Demo2Frm.cpp
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:5k
源码类别:

RichEdit

开发平台:

Delphi

  1. //---------------------------------------------------------------------------
  2. #include <vclvcl.h>
  3. #pragma hdrstop
  4. #include "Demo2Frm.h"
  5. //---------------------------------------------------------------------------
  6. #pragma link "RichView"
  7. #pragma link "RVScroll"
  8. #pragma link "RVStyle"
  9. #pragma resource "*.dfm"
  10. TfrmDemo2 *frmDemo2;
  11. //---------------------------------------------------------------------------
  12. __fastcall TfrmDemo2::TfrmDemo2(TComponent* Owner)
  13.     : TForm(Owner)
  14. {
  15. }
  16. //---------------------------------------------------------------------------
  17. void TfrmDemo2::ChangeBackgroundColor()
  18. {
  19.   cdlg->Color = rvs->Color;
  20.   if (cdlg->Execute())
  21.   {
  22.     rvs->Color = cdlg->Color;
  23.     rv->Invalidate();
  24.   }
  25. }
  26. //---------------------------------------------------------------------------
  27. void TfrmDemo2::ChangeBreakColor(int ItemNo)
  28. {
  29.   unsigned char BreakWidth,BreakWidth2;
  30.   int BreakTag;
  31.   TColor BreakColor;
  32.   TRVBreakStyle BreakStyle;
  33.   rv->GetBreakInfo(ItemNo, BreakWidth, BreakStyle, BreakColor, BreakTag);
  34.   cdlg->Color = BreakColor;
  35.   // RichView has no styles of "breaks", each "break" is individual
  36.   // So for changing color of all "breaks" with specified width we need
  37.   // to check all document
  38.   if (cdlg->Execute())
  39.   {
  40.     for (int i=0; i<rv->ItemCount; i++)
  41.     {
  42.       if (rv->GetItemStyle(i)==rvsBreak)
  43.       {
  44.         rv->GetBreakInfo(i, BreakWidth2, BreakStyle, BreakColor, BreakTag);
  45.         if (BreakWidth2==BreakWidth)
  46.           rv->SetBreakInfo(i, BreakWidth2, BreakStyle, cdlg->Color, BreakTag);
  47.       }
  48.     }
  49.     rv->Invalidate();
  50.   }
  51. }
  52. //---------------------------------------------------------------------------
  53. void TfrmDemo2::ChangeTextStyle(int StyleNo)
  54. {
  55.   fdlg->Font->Assign(rvs->TextStyles->Items[StyleNo]);
  56.   if (fdlg->Execute())
  57.   {
  58.     rvs->TextStyles->Items[StyleNo]->Assign(fdlg->Font);
  59.     rv->Format();
  60.   }
  61. }
  62. //---------------------------------------------------------------------------
  63. void TfrmDemo2::ChangeHighlightColor(int StyleNo)
  64. {
  65.   cdlg->Color = rvs->TextStyles->Items[StyleNo]->HoverColor;
  66.   if (cdlg->Execute())
  67.     rvs->TextStyles->Items[StyleNo]->HoverColor = cdlg->Color;
  68. }
  69. //---------------------------------------------------------------------------
  70. void __fastcall TfrmDemo2::FormCreate(TObject *Sender)
  71. {
  72.   rv->AddNL("Click on text, line or background to customize",1,1);
  73.   rv->AddNL("Right click for menu",1,1);
  74.   rv->AddBreakEx(1,rvbsLine,clGreen);
  75.   rv->AddBulletEx("", 0, il, 0);
  76.   rv->Add(" - thin line", 0);
  77.   rv->AddBulletEx("", 1, il, 0);
  78.   rv->Add(" - thick line", 0);
  79.   rv->AddBreakEx(2,rvbsLine,clSilver);
  80.   rv->AddNL("", 0,0);
  81.   rv->AddNL("This is a normal text with ", 0,0);
  82.   rv->Add("hypertext jump",2);
  83.   rv->Add(".",0);
  84.   rv->AddNL("", 0,0);
  85.   rv->AddNL("This is a bottom text ", 3,0);
  86.   rv->AddBreakEx(1,rvbsLine,clGreen);
  87.   rv->AddNL("ESC closes window",1,1);
  88.   rv->Format();
  89. }
  90. //---------------------------------------------------------------------------
  91. void __fastcall TfrmDemo2::FormKeyDown(TObject *Sender, WORD &Key,
  92.     TShiftState Shift)
  93. {
  94.   if (Key==VK_ESCAPE)
  95.     Close();    
  96. }
  97. //---------------------------------------------------------------------------
  98. void __fastcall TfrmDemo2::rvRVMouseDown(TCustomRichView *Sender,
  99.     TMouseButton Button, TShiftState Shift, int ItemNo, int X, int Y)
  100. {
  101.   if (Button!=mbLeft)
  102.     return;
  103.   if (ItemNo==-1)
  104.   {
  105.     ChangeBackgroundColor();
  106.     return;
  107.   }
  108.   int StyleNo = rv->GetItemStyle(ItemNo);
  109.   switch (StyleNo)
  110.   {
  111.     case rvsBullet:
  112.       Application->MessageBox("This is just a pointer to 'break'", "Bullet",
  113.                              MB_OK | MB_ICONINFORMATION);
  114.       break;
  115.     case rvsBreak:
  116.       ChangeBreakColor(ItemNo);
  117.       break;
  118.     default:
  119.       ChangeTextStyle(StyleNo);
  120.       break;
  121.   }
  122. }
  123. //---------------------------------------------------------------------------
  124. void __fastcall TfrmDemo2::rvRVMouseUp(TCustomRichView *Sender,
  125.     TMouseButton Button, TShiftState Shift, int ItemNo, int X, int Y)
  126. {
  127.   if (Button!=mbRight)
  128.     return;
  129.   pm->Tag = ItemNo;
  130.   int StyleNo = 0; // avoiding warning
  131.   if (ItemNo!=-1)
  132.     StyleNo = rv->GetItemStyle(ItemNo);
  133.   mitBack->Visible  = (ItemNo==-1);
  134.   mitBreak->Visible = (ItemNo>=0 && StyleNo==rvsBreak);
  135.   mitText->Visible  = (ItemNo>=0 && StyleNo>=0);
  136.   mitHighlight->Visible = (mitText->Visible && rvs->TextStyles->Items[StyleNo]->Jump);
  137.   TPoint p = rv->ClientToScreen(Point(X,Y));
  138.   pm->Popup(p.x,p.y);
  139. }
  140. //---------------------------------------------------------------------------
  141. void __fastcall TfrmDemo2::mitBackClick(TObject *Sender)
  142. {
  143.   ChangeBackgroundColor();
  144. }
  145. //---------------------------------------------------------------------------
  146. void __fastcall TfrmDemo2::mitBreakClick(TObject *Sender)
  147. {
  148.   ChangeBreakColor(pm->Tag);
  149. }
  150. //---------------------------------------------------------------------------
  151. void __fastcall TfrmDemo2::mitTextClick(TObject *Sender)
  152. {
  153.   ChangeTextStyle(rv->GetItemStyle(pm->Tag));
  154. }
  155. //---------------------------------------------------------------------------
  156. void __fastcall TfrmDemo2::mitHighlightClick(TObject *Sender)
  157. {
  158.   ChangeHighlightColor(rv->GetItemStyle(pm->Tag));
  159. }
  160. //---------------------------------------------------------------------------