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

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, RVTable, CRVData, RVERVData;
  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.     Freeze: Boolean;
  32.     procedure InsertField(const field, value: String);
  33.   public
  34.     { Public declarations }
  35.   end;
  36. var
  37.   Form1: TForm1;
  38. implementation
  39. function GetFieldLocation(RootRVData: TCustomRVData; const field: String;
  40.                            var RVData: TCustomRVData;
  41.                            var ItemNo: Integer): Boolean;
  42. var i,r,c: Integer;
  43.     table: TRVTableItemInfo;
  44. begin
  45.   Result := False;
  46.   for i := 0 to RootRVData.ItemCount-1 do
  47.     if RootRVData.GetItemStyle(i)=rvsTable then begin
  48.       table := TRVTableItemInfo(RootRVData.GetItem(i));
  49.       for r := 0 to table.Rows.Count-1 do
  50.         for c := 0 to table.Rows[r].Count-1 do
  51.           if table.Cells[r,c]<>nil then begin
  52.             Result := GetFieldLocation(table.Cells[r,c].GetRVData, field, RVData, ItemNo);
  53.             if Result then
  54.               exit;
  55.           end
  56.       end
  57.     else if PChar(RootRVData.GetItemTag(i)) = field then begin
  58.       ItemNo := i;
  59.       RVData := RootRVData.GetSourceRVData;
  60.       Result := True;
  61.       exit;
  62.     end;
  63. end;
  64. function GetFieldValue(rv: TCustomRichView; const field: String): String;
  65. var ItemNo: Integer;
  66.     RVData: TCustomRVData;
  67. begin
  68.   if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then
  69.     Result := RVData.GetRVData.GetItemTextA(ItemNo)
  70.   else
  71.     Result := '';
  72. end;
  73. procedure SetFieldValue(rv: TCustomRichViewEdit; const field, value: String);
  74. var ItemNo: Integer;
  75.     RVData: TCustomRVData;
  76.     Ctrl: TWinControl;
  77.     AutoSelect: Boolean;
  78. begin
  79.   if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then begin
  80.     if RVData.GetRVData is TRVTableCellData then begin
  81.       ctrl := GetParentForm(rv).ActiveControl;
  82.       TRVTableCellData(RVData).Edit;
  83.       AutoSelect := False;
  84.       if (ctrl<>nil) and (ctrl is TEdit) then begin
  85.         AutoSelect := TEdit(ctrl).AutoSelect;
  86.         TEdit(ctrl).AutoSelect := False;
  87.       end;
  88.       GetParentForm(rv).ActiveControl := ctrl;
  89.       if (ctrl<>nil) and (ctrl is TEdit) then
  90.         TEdit(ctrl).AutoSelect := AutoSelect;
  91.     end;
  92.     if RVData.GetRVData is TRVEditRVData then
  93.       (TRVEditRVData(RVData.GetRVData).RichView as TCustomRichViewEdit).SetItemTextEd(ItemNo, value);
  94.   end;
  95. end;
  96. {$R *.dfm}
  97. procedure TForm1.FormCreate(Sender: TObject);
  98. var table: TRVTableItemInfo;
  99. begin
  100.   RichViewEdit1.Clear;
  101.   table := TRVTableItemInfo.CreateEx(1,2,RichViewEdit1.RVData);
  102.   table.Cells[0,0].Clear;
  103.   table.Cells[0,0].AddNL('Name: ',0,1);
  104.   table.Cells[0,0].AddNLTag(Edit1.Text,6,-1,Integer(StrNew('name')));
  105.   table.Cells[0,1].Clear;
  106.   table.Cells[0,1].AddNL('Date: ',0,1);
  107.   table.Cells[0,1].AddNLTag(Edit2.Text,6,-1,Integer(StrNew('date')));
  108.   table.BorderWidth := 1;
  109.   table.CellBorderWidth := 1;  
  110.   RichViewEdit1.AddItem('',table);
  111.   RichViewEdit1.Format;
  112. end;
  113. procedure TForm1.InsertField(const field, value: String);
  114. var StyleNo: Integer;
  115. begin
  116.   if GetFieldValue(RichViewEdit1, field)<>'' then begin
  117.     Application.MessageBox('Field already exists!','', 0);
  118.     exit;
  119.   end;
  120.   StyleNo := RichViewEdit1.CurTextStyleNo;
  121.   RichViewEdit1.CurTextStyleNo := 6;
  122.   RichViewEdit1.InsertStringTag(value, Integer(StrNew(PChar(field))));
  123.   RichViewEdit1.CurTextStyleNo := StyleNo;
  124.   RichViewEdit1.SetFocus;
  125. end;
  126. procedure TForm1.Button1Click(Sender: TObject);
  127. begin
  128.   InsertField('name', Edit1.Text);
  129. end;
  130. procedure TForm1.Button2Click(Sender: TObject);
  131. begin
  132.   InsertField('date', Edit2.Text);
  133. end;
  134. procedure TForm1.Button3Click(Sender: TObject);
  135. begin
  136.   RichViewEdit1.ApplyTextStyle(0);
  137.   RichViewEdit1.SetFocus;
  138. end;
  139. procedure TForm1.Edit1Change(Sender: TObject);
  140. begin
  141.   if Freeze then
  142.     exit;
  143.   Freeze := True;
  144.   try
  145.     SetFieldValue(RichViewEdit1, 'name', Edit1.Text);
  146.   finally
  147.     Freeze := False;
  148.   end;
  149. end;
  150. procedure TForm1.Edit2Change(Sender: TObject);
  151. begin
  152.   if Freeze then
  153.     exit;
  154.   Freeze := True;
  155.   try
  156.     SetFieldValue(RichViewEdit1, 'date', Edit2.Text);
  157.   finally
  158.     Freeze := False;
  159.   end;
  160. end;
  161. procedure TForm1.RichViewEdit1Change(Sender: TObject);
  162. var s: String;
  163. begin
  164.   if Freeze then
  165.     exit;
  166.   Freeze := True;
  167.   try
  168.     s := GetFieldValue(RichViewEdit1, 'name');
  169.     if s<>'' then
  170.       Edit1.Text := s;
  171.     s := GetFieldValue(RichViewEdit1, 'date');
  172.     if s<>'' then
  173.       Edit2.Text := s;
  174.   finally
  175.     Freeze := False;
  176.   end;
  177. end;
  178. end.