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

RichEdit

开发平台:

Delphi

  1. unit Unit1;
  2. interface
  3. {------------------------------------------------------------------------------
  4.  Implementing "fields"
  5.  The main property settings:
  6.  - rvoTagsArePChars in RichViewEdit1.Options (so each item can have associated string)
  7.  - RVStyle1.TextStyles collection has two styles (for static text and for fields)
  8.    Especially look at Protection properties
  9.  - RichViewEdit1 is set to "use predefined set of styles" (right click on
  10.    RichViewEdit1 at design time, then choose "Settings")
  11.  - AcceptDragDropFormats = []
  12. ------------------------------------------------------------------------------ }
  13. uses
  14.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  15.   Dialogs, RVStyle, RVScroll, RichView, RVEdit, Clipbrd, StdCtrls,
  16.   CRVData, RVTable;
  17. type
  18.   TForm1 = class(TForm)
  19.     RichViewEdit1: TRichViewEdit;
  20.     rvs: TRVStyle;
  21.     Button1: TButton;
  22.     procedure FormCreate(Sender: TObject);
  23.     procedure RichViewEdit1Paste(Sender: TCustomRichViewEdit;
  24.       var DoDefault: Boolean);
  25.     procedure Button1Click(Sender: TObject);
  26.   private
  27.     { Private declarations }
  28.   public
  29.     { Public declarations }
  30.   end;
  31. var
  32.   Form1: TForm1;
  33. implementation
  34. {$R *.dfm}
  35. function GetFieldLocation(RootRVData: TCustomRVData; const field: String;
  36.                            var RVData: TCustomRVData;
  37.                            var ItemNo: Integer): Boolean;
  38. var i,r,c: Integer;
  39.     table: TRVTableItemInfo;
  40. begin
  41.   Result := False;
  42.   for i := 0 to RootRVData.ItemCount-1 do
  43.     if RootRVData.GetItemStyle(i)=rvsTable then begin
  44.       table := TRVTableItemInfo(RootRVData.GetItem(i));
  45.       for r := 0 to table.Rows.Count-1 do
  46.         for c := 0 to table.Rows[r].Count-1 do
  47.           if table.Cells[r,c]<>nil then begin
  48.             Result := GetFieldLocation(table.Cells[r,c].GetRVData, field, RVData, ItemNo);
  49.             if Result then
  50.               exit;
  51.           end
  52.       end
  53.     else if PChar(RootRVData.GetItemTag(i)) = field then begin
  54.       ItemNo := i;
  55.       RVData := RootRVData.GetSourceRVData;
  56.       Result := True;
  57.       exit;
  58.     end;
  59. end;
  60. function GetFieldValue(rv: TCustomRichView; const field: String): String;
  61. var RVData: TCustomRVData;
  62.     ItemNo: Integer;
  63. begin
  64.   if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then
  65.     Result := RVData.GetItemTextA(ItemNo)
  66.   else
  67.     Result := '';
  68. end;
  69. procedure TForm1.FormCreate(Sender: TObject);
  70. begin
  71.   RichViewEdit1.Clear;
  72.   RichViewEdit1.AddNL('2 + 2 =', 1,0);
  73.   RichViewEdit1.AddNLTag('  ', 0,-1, Integer(StrNew('answer1')));
  74.   RichViewEdit1.AddNL('?', 1,-1);
  75.   RichViewEdit1.AddNL('3 + 3 =', 1,0);
  76.   RichViewEdit1.AddNLTag('  ', 0,-1, Integer(StrNew('answer2')));
  77.   RichViewEdit1.AddNL('?', 1,-1);
  78.   RichViewEdit1.Format;
  79.   RichViewEdit1.SetSelectionBounds(1,2,1,2);
  80. end;
  81. procedure TForm1.RichViewEdit1Paste(Sender: TCustomRichViewEdit;
  82.   var DoDefault: Boolean);
  83. var s: String;
  84. begin
  85.   // allowing to paste only one line text
  86.   s := Clipboard.AsText;
  87.   if (Pos(#10,s)=0) and (Pos(#13,s)=0) then
  88.     RichViewEdit1.InsertText(s,False);
  89.   DoDefault := False;
  90. end;
  91. procedure TForm1.Button1Click(Sender: TObject);
  92. var s: String;
  93. begin
  94.   s := GetFieldValue(RichViewEdit1, 'answer1');
  95.   if StrToIntDef(Trim(s), 0)<>4 then begin
  96.     Application.MessageBox('Wrong! Try again','Test', 0);
  97.     exit;
  98.   end;
  99.   s := GetFieldValue(RichViewEdit1, 'answer2');
  100.   if StrToIntDef(Trim(s), 0)<>6 then begin
  101.     Application.MessageBox('Wrong! Try again','Test', 0);
  102.     exit;
  103.   end;
  104.   Application.MessageBox('Test is passed','Test', 0);
  105. end;
  106. end.