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

RichEdit

开发平台:

Delphi

  1. unit Demo2Frm;
  2. interface
  3. {$I RV_Defs.inc}
  4. uses
  5.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  6.   RVScroll, RichView, RVStyle,
  7.   {$IFDEF RICHVIEWDEF4}
  8.   ImgList,
  9.   {$ENDIF}  
  10.   Menus;
  11. type
  12.   TfrmDemo2 = class(TForm)
  13.     rv: TRichView;
  14.     rvs: TRVStyle;
  15.     fdlg: TFontDialog;
  16.     cdlg: TColorDialog;
  17.     pm: TPopupMenu;
  18.     mitBack: TMenuItem;
  19.     mitBreak: TMenuItem;
  20.     mitText: TMenuItem;
  21.     mitHighlight: TMenuItem;
  22.     il: TImageList;
  23.     procedure FormCreate(Sender: TObject);
  24.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  25.       Shift: TShiftState);
  26.     procedure rvRVMouseDown(Sender: TCustomRichView; Button: TMouseButton;
  27.       Shift: TShiftState; ItemNo, X, Y: Integer);
  28.     procedure mitBackClick(Sender: TObject);
  29.     procedure mitBreakClick(Sender: TObject);
  30.     procedure mitTextClick(Sender: TObject);
  31.     procedure rvRVMouseUp(Sender: TCustomRichView; Button: TMouseButton;
  32.       Shift: TShiftState; ItemNo, X, Y: Integer);
  33.     procedure mitHighlightClick(Sender: TObject);
  34.   private
  35.     { Private declarations }
  36.     procedure ChangeBackgroundColor;
  37.     procedure ChangeTextStyle(StyleNo: Integer);
  38.     procedure ChangeBreakColor(ItemNo: Integer);
  39.     procedure ChangeHighlightColor(StyleNo: Integer);    
  40.   public
  41.     { Public declarations }
  42.   end;
  43. implementation
  44. {$R *.DFM}
  45. {-----------------------------------------------------------}
  46. procedure TfrmDemo2.ChangeBackgroundColor;
  47. begin
  48.   cdlg.Color := rvs.Color;
  49.   if cdlg.Execute then begin
  50.     rvs.Color := cdlg.Color;
  51.     rv.Invalidate;
  52.   end;
  53. end;
  54. {-----------------------------------------------------------}
  55. procedure TfrmDemo2.ChangeBreakColor(ItemNo: Integer);
  56. var BreakWidth,BreakWidth2: Byte;
  57.     BreakTag, i: Integer;
  58.     BreakColor: TColor;
  59.     BreakStyle: TRVBreakStyle;
  60. begin
  61.   rv.GetBreakInfo(ItemNo, BreakWidth, BreakStyle, BreakColor, BreakTag);
  62.   cdlg.Color := BreakColor;
  63.   // RichView has no styles of "breaks", each "break" is individual
  64.   // So for changing color of all "breaks" with specified width we need
  65.   // to check all document
  66.   if cdlg.Execute then begin
  67.     for i := 0 to rv.ItemCount-1 do
  68.       if rv.GetItemStyle(i)=rvsBreak then begin
  69.         rv.GetBreakInfo(i, BreakWidth2, BreakStyle, BreakColor, BreakTag);
  70.         if BreakWidth2=BreakWidth then
  71.           rv.SetBreakInfo(i, BreakWidth2, BreakStyle, cdlg.Color, BreakTag);
  72.       end;
  73.     rv.Invalidate;
  74.   end;
  75. end;  
  76. {-----------------------------------------------------------}
  77. procedure TfrmDemo2.ChangeHighlightColor(StyleNo: Integer);
  78. begin
  79.   cdlg.Color := rvs.TextStyles[StyleNo].HoverColor;
  80.   if cdlg.Execute then
  81.     rvs.TextStyles[StyleNo].HoverColor := cdlg.Color;
  82. end;
  83. {-----------------------------------------------------------}
  84. procedure TfrmDemo2.ChangeTextStyle(StyleNo: Integer);
  85. begin
  86.   fdlg.Font.Assign(rvs.TextStyles[StyleNo]);
  87.   if fdlg.Execute then begin
  88.     rvs.TextStyles[StyleNo].Assign(fdlg.Font);
  89.     rv.Format;
  90.   end;
  91. end;
  92. {-----------------------------------------------------------}
  93. procedure TfrmDemo2.FormCreate(Sender: TObject);
  94. begin
  95.   rv.AddNL('Click on text, line or background to customize',1,1);
  96.   rv.AddNL('Right click for menu',1,1);
  97.   rv.AddBreakEx(1,rvbsLine,clGreen);
  98.   rv.AddBulletEx('', 0, il, 0);
  99.   rv.Add(' - thin line', 0);
  100.   rv.AddBulletEx('', 1, il, 0);
  101.   rv.Add(' - thick line', 0);
  102.   rv.AddBreakEx(2,rvbsLine,clSilver);
  103.   rv.AddNL('', 0,0);
  104.   rv.AddNL('This is a normal text with ', 0,0);
  105.   rv.Add('hypertext jump',2);
  106.   rv.Add('.',0);
  107.   rv.AddNL('', 0,0);
  108.   rv.AddNL('This is a bottom text ', 3,0);
  109.   rv.AddBreakEx(1,rvbsLine,clGreen);
  110.   rv.AddNL('ESC closes window',1,1);
  111.   rv.Format;
  112. end;
  113. {-----------------------------------------------------------}
  114. procedure TfrmDemo2.FormKeyDown(Sender: TObject; var Key: Word;
  115.   Shift: TShiftState);
  116. begin
  117.   if Key=VK_ESCAPE then Close;
  118. end;
  119. {-----------------------------------------------------------}
  120. procedure TfrmDemo2.rvRVMouseDown(Sender: TCustomRichView; Button: TMouseButton;
  121.   Shift: TShiftState; ItemNo, X, Y: Integer);
  122. var StyleNo: Integer;
  123. begin
  124.   if Button<>mbLeft then exit;
  125.   if ItemNo=-1 then begin
  126.     ChangeBackgroundColor;
  127.     exit;
  128.   end;
  129.   StyleNo := rv.GetItemStyle(ItemNo);
  130.   case StyleNo of
  131.     rvsBullet:
  132.       Application.MessageBox('This is just a pointer to "break"', 'Bullet',
  133.                              MB_OK or MB_ICONINFORMATION);
  134.     rvsBreak:
  135.       ChangeBreakColor(ItemNo);
  136.     else
  137.       ChangeTextStyle(StyleNo);
  138.   end;
  139. end;
  140. {-----------------------------------------------------------}
  141. procedure TfrmDemo2.rvRVMouseUp(Sender: TCustomRichView; Button: TMouseButton;
  142.   Shift: TShiftState; ItemNo, X, Y: Integer);
  143. var StyleNo: Integer;
  144.     p: TPoint;
  145. begin
  146.   if Button<>mbRight then exit;
  147.   pm.Tag := ItemNo;
  148.   StyleNo := 0;// avoiding warning
  149.   if ItemNo<>-1 then
  150.     StyleNo := rv.GetItemStyle(ItemNo);
  151.   mitBack.Visible := ItemNo=-1;
  152.   mitBreak.Visible := (ItemNo>=0) and (StyleNo=rvsBreak);
  153.   mitText.Visible := (ItemNo>=0) and (StyleNo>=0);
  154.   mitHighlight.Visible := mitText.Visible and rvs.TextStyles[StyleNo].Jump;
  155.   p := rv.ClientToScreen(Point(X,Y));
  156.   pm.Popup(p.X,p.Y);
  157. end;
  158. {-----------------------------------------------------------}
  159. procedure TfrmDemo2.mitBackClick(Sender: TObject);
  160. begin
  161.   ChangeBackgroundColor;
  162. end;
  163. procedure TfrmDemo2.mitBreakClick(Sender: TObject);
  164. begin
  165.   ChangeBreakColor(pm.Tag);
  166. end;
  167. procedure TfrmDemo2.mitTextClick(Sender: TObject);
  168. begin
  169.   ChangeTextStyle(rv.GetItemStyle(pm.Tag));
  170. end;
  171. procedure TfrmDemo2.mitHighlightClick(Sender: TObject);
  172. begin
  173.   ChangeHighlightColor(rv.GetItemStyle(pm.Tag));
  174. end;
  175. end.