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

RichEdit

开发平台:

Delphi

  1. //---------------------------------------------------------------------------
  2. // Important settings:
  3. //    rvoTagsArePChars in RichViewEdit1->Options
  4. //---------------------------------------------------------------------------
  5. #include <vclvcl.h>
  6. #pragma hdrstop
  7. #include "Unit1.h"
  8. //---------------------------------------------------------------------------
  9. #pragma link "RVEdit"
  10. #pragma link "RichView"
  11. #pragma link "RVScroll"
  12. #pragma link "RVStyle"
  13. #pragma resource "*.dfm"
  14. TForm1 *Form1;
  15. //---------------------------------------------------------------------------
  16. __fastcall TForm1::TForm1(TComponent* Owner)
  17. : TForm(Owner)
  18. {
  19. }
  20. //---------------------------------------------------------------------------
  21. void GetFieldItemNo(TCustomRichView* rv, const AnsiString field, int& ItemNo)
  22. {
  23.   if (ItemNo>=0 && ItemNo<rv->ItemCount &&
  24.      AnsiString(PChar(rv->GetItemTag(ItemNo))) == field)
  25.     return;
  26.   ItemNo = -1;
  27.   for (int i=0; i<rv->ItemCount; i++)
  28.     if (AnsiString(PChar(rv->GetItemTag(i))) == field)
  29.     {
  30.       ItemNo = i;
  31.       return;
  32.     }
  33. }
  34. //---------------------------------------------------------------------------
  35. AnsiString GetFieldValue(TCustomRichView* rv, const AnsiString field,
  36.   int& LastItemNo)
  37. {
  38.   GetFieldItemNo(rv, field, LastItemNo);
  39.   if (LastItemNo>=0)
  40.     return rv->GetItemText(LastItemNo);
  41.   else
  42.     return "";
  43. }
  44. //---------------------------------------------------------------------------
  45. void SetFieldValue(TCustomRichViewEdit* rv, const AnsiString field,
  46.   const AnsiString value, int& LastItemNo)
  47. {
  48.   GetFieldItemNo(rv, field, LastItemNo);
  49.   if (LastItemNo>=0)
  50.     rv->SetItemTextEd(LastItemNo, value);
  51. }
  52. void __fastcall TForm1::FormCreate(TObject *Sender)
  53. {
  54.   RichViewEdit1->Clear();
  55.   RichViewEdit1->AddNL("Insert fields here",0,0);
  56.   RichViewEdit1->Format();
  57. }
  58. //---------------------------------------------------------------------------
  59. void TForm1::InsertField(const AnsiString field, const AnsiString value,
  60.   int & LastItemNo)
  61. {
  62.   if (GetFieldValue(RichViewEdit1, field, LastItemNo)!="")
  63.   {
  64.     Application->MessageBox("Field already exists!","",0);
  65.     return;
  66.   }
  67.   int StyleNo = RichViewEdit1->CurParaStyleNo;
  68.   RichViewEdit1->CurTextStyleNo = 6;
  69.   RichViewEdit1->InsertStringTag(value, (int)StrNew(field.c_str()));
  70.   RichViewEdit1->CurTextStyleNo = StyleNo;
  71.   RichViewEdit1->SetFocus();
  72. }
  73. void __fastcall TForm1::Button1Click(TObject *Sender)
  74. {
  75.   InsertField("name", Edit1->Text, LastNameItemNo);
  76. }
  77. //---------------------------------------------------------------------------
  78. void __fastcall TForm1::Button2Click(TObject *Sender)
  79. {
  80.   InsertField("date", Edit2->Text, LastDateItemNo);
  81. }
  82. //---------------------------------------------------------------------------
  83. void __fastcall TForm1::Button3Click(TObject *Sender)
  84. {
  85.   RichViewEdit1->ApplyTextStyle(0);
  86.   RichViewEdit1->SetFocus();
  87. }
  88. //---------------------------------------------------------------------------
  89. void __fastcall TForm1::Edit1Change(TObject *Sender)
  90. {
  91.   if (Freeze)
  92.     return;
  93.   Freeze = true;
  94.   try
  95.   {
  96.     SetFieldValue(RichViewEdit1, "name", Edit1->Text, LastNameItemNo);
  97.   }
  98.   catch(...)
  99.   {
  100.   }
  101.   Freeze = false;
  102. }
  103. //---------------------------------------------------------------------------
  104. void __fastcall TForm1::Edit2Change(TObject *Sender)
  105. {
  106.   if (Freeze)
  107.     return;
  108.   Freeze = true;
  109.   try
  110.   {
  111.     SetFieldValue(RichViewEdit1, "date", Edit2->Text, LastDateItemNo);
  112.   }
  113.   catch(...)
  114.   {
  115.   }
  116.   Freeze = false;
  117. }
  118. //---------------------------------------------------------------------------
  119. void __fastcall TForm1::RichViewEdit1Change(TObject *Sender)
  120. {
  121.   if (Freeze)
  122.     return;
  123.   Freeze = true;
  124.   try
  125.   {
  126.     AnsiString s = GetFieldValue(RichViewEdit1, "name", LastNameItemNo);
  127.     if (s!="")
  128.       Edit1->Text = s;
  129.     s = GetFieldValue(RichViewEdit1, "date", LastDateItemNo);
  130.     if (s!="")
  131.       Edit2->Text = s;
  132.   }
  133.   catch(...)
  134.   {
  135.   }
  136.   Freeze = false;
  137. }
  138. //---------------------------------------------------------------------------