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

RichEdit

开发平台:

Delphi

  1. unit Unit1;
  2. interface
  3. {------------------------------------------------------------------------------}
  4. { Important settings:
  5.     rvoTagsArePChars in RichViewEdit1.Options
  6. {------------------------------------------------------------------------------}
  7. uses
  8.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  9.   Dialogs, StdCtrls, RVStyle, RVScroll, RichView, RVEdit;
  10. type
  11.   TForm1 = class(TForm)
  12.     RichViewEdit1: TRichViewEdit;
  13.     RVStyle1: TRVStyle;
  14.     Button1: TButton;
  15.     Button2: TButton;
  16.     Label1: TLabel;
  17.     Edit1: TEdit;
  18.     Label2: TLabel;
  19.     Edit2: TEdit;
  20.     Button3: TButton;
  21.     Label3: TLabel;
  22.     procedure Button1Click(Sender: TObject);
  23.     procedure Button2Click(Sender: TObject);
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure Button3Click(Sender: TObject);
  26.     procedure Edit1Change(Sender: TObject);
  27.     procedure Edit2Change(Sender: TObject);
  28.     procedure RichViewEdit1Change(Sender: TObject);
  29.   private
  30.     { Private declarations }
  31.     LastNameItemNo,          // Storing LastItem no is not necessary,
  32.     LastDateItemNo: Integer; // but increases efficiency
  33.     Freeze: Boolean;
  34.     procedure InsertField(const field, value: String; var LastItemNo: Integer);
  35.   public
  36.     { Public declarations }
  37.   end;
  38. var
  39.   Form1: TForm1;
  40. implementation
  41. procedure GetFieldItemNo(rv: TCustomRichView; const field: String; var ItemNo: Integer);
  42. var i: Integer;
  43. begin
  44.   if (ItemNo>=0) and (ItemNo<rv.ItemCount) and
  45.      (PChar(rv.GetItemTag(ItemNo)) = field) then
  46.     exit;
  47.   ItemNo := -1;
  48.   for i := 0 to rv.ItemCount-1 do
  49.     if PChar(rv.GetItemTag(i)) = field then begin
  50.       ItemNo := i;
  51.       exit;
  52.     end;
  53. end;
  54. function GetFieldValue(rv: TCustomRichView; const field: String;
  55.                        var LastItemNo: Integer): String;
  56. begin
  57.   GetFieldItemNo(rv, field, LastItemNo);
  58.   if LastItemNo>=0 then
  59.     Result := rv.GetItemText(LastItemNo)
  60.   else
  61.     Result := '';
  62. end;
  63. procedure SetFieldValue(rv: TCustomRichViewEdit; const field, value: String;
  64.                         var LastItemNo: Integer);
  65. begin
  66.   GetFieldItemNo(rv, field, LastItemNo);
  67.   if LastItemNo>=0 then
  68.     rv.SetItemTextEd(LastItemNo, value);
  69. end;
  70. {$R *.dfm}
  71. procedure TForm1.FormCreate(Sender: TObject);
  72. begin
  73.   RichViewEdit1.Clear;
  74.   RichViewEdit1.AddNL('Insert fields here',0,0);
  75.   RichViewEdit1.Format;
  76. end;
  77. procedure TForm1.InsertField(const field, value: String; var LastItemNo: Integer);
  78. var StyleNo: Integer;
  79. begin
  80.   if GetFieldValue(RichViewEdit1, field, LastItemNo)<>'' then begin
  81.     Application.MessageBox('Field already exists!','',0);
  82.     exit;
  83.   end;
  84.   StyleNo := RichViewEdit1.CurParaStyleNo;
  85.   RichViewEdit1.CurTextStyleNo := 6;
  86.   RichViewEdit1.InsertStringTag(value, Integer(StrNew(PChar(field))));
  87.   RichViewEdit1.CurTextStyleNo := StyleNo;
  88.   RichViewEdit1.SetFocus;
  89. end;
  90. procedure TForm1.Button1Click(Sender: TObject);
  91. begin
  92.   InsertField('name', Edit1.Text, LastNameItemNo);
  93. end;
  94. procedure TForm1.Button2Click(Sender: TObject);
  95. begin
  96.   InsertField('date', Edit2.Text, LastDateItemNo);
  97. end;
  98. procedure TForm1.Button3Click(Sender: TObject);
  99. begin
  100.   RichViewEdit1.ApplyTextStyle(0);
  101.   RichViewEdit1.SetFocus;
  102. end;
  103. procedure TForm1.Edit1Change(Sender: TObject);
  104. begin
  105.   if Freeze then
  106.     exit;
  107.   Freeze := True;
  108.   try
  109.     SetFieldValue(RichViewEdit1, 'name', Edit1.Text, LastNameItemNo);
  110.   finally
  111.     Freeze := False;
  112.   end;
  113. end;
  114. procedure TForm1.Edit2Change(Sender: TObject);
  115. begin
  116.   if Freeze then
  117.     exit;
  118.   Freeze := True;
  119.   try
  120.     SetFieldValue(RichViewEdit1, 'date', Edit2.Text, LastDateItemNo);
  121.   finally
  122.     Freeze := False;
  123.   end;
  124. end;
  125. procedure TForm1.RichViewEdit1Change(Sender: TObject);
  126. var s: String;
  127. begin
  128.   if Freeze then
  129.     exit;
  130.   Freeze := True;
  131.   try
  132.     s := GetFieldValue(RichViewEdit1, 'name', LastNameItemNo);
  133.     if s<>'' then
  134.       Edit1.Text := s;
  135.     s := GetFieldValue(RichViewEdit1, 'date', LastDateItemNo);
  136.     if s<>'' then
  137.       Edit2.Text := s;
  138.   finally
  139.     Freeze := False;
  140.   end;      
  141. end;
  142. end.