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

RichEdit

开发平台:

Delphi

  1. //---------------------------------------------------------------------------
  2. /*
  3.  Important settings:
  4.   rvoTagsArePChars in RichViewEdit1->Options
  5. */
  6. //---------------------------------------------------------------------------
  7. #include <vclvcl.h>
  8. #pragma hdrstop
  9. #include "Unit1.h"
  10. //---------------------------------------------------------------------------
  11. #pragma link "RVEdit"
  12. #pragma link "RichView"
  13. #pragma link "RVScroll"
  14. #pragma link "RVStyle"
  15. #pragma resource "*.dfm"
  16. TForm1 *Form1;
  17. //---------------------------------------------------------------------------
  18. __fastcall TForm1::TForm1(TComponent* Owner)
  19. : TForm(Owner)
  20. {
  21. }
  22. //---------------------------------------------------------------------------
  23. bool GetFieldLocation(TCustomRVData* RootRVData, const AnsiString field,
  24.   TCustomRVData* &RVData, int &ItemNo)
  25. {
  26.   for (int i=0; i<RootRVData->ItemCount; i++)
  27.     if (RootRVData->GetItemStyle(i)==rvsTable)
  28.     {
  29.       TRVTableItemInfo* table = (TRVTableItemInfo*)(RootRVData->GetItem(i));
  30.       for (int r=0; r<table->Rows->Count; r++)
  31.         for (int c=0; c<table->Rows->Items[r]->Count; c++)
  32.           if (table->Cells[r][c])
  33.           {
  34.             if (GetFieldLocation(table->Cells[r][c]->GetRVData(), field, RVData, ItemNo))
  35.               return true;
  36.           }
  37.     }
  38.     else if (AnsiString(PChar(RootRVData->GetItemTag(i))) == field)
  39.     {
  40.       ItemNo = i;
  41.       RVData = RootRVData->GetSourceRVData();
  42.       return true;
  43.     }
  44.   return false;
  45. }
  46. //---------------------------------------------------------------------------
  47. AnsiString GetFieldValue(TCustomRichView* rv, const AnsiString field)
  48. {
  49.   int ItemNo;
  50.   TCustomRVData* RVData;
  51.   if (GetFieldLocation(rv->RVData, field, RVData, ItemNo))
  52.     return RVData->GetRVData()->GetItemText(ItemNo);
  53.   else
  54.     return "";
  55. }
  56. //---------------------------------------------------------------------------
  57. void SetFieldValue(TCustomRichViewEdit* rv,  const AnsiString field,
  58.   const AnsiString value)
  59. {
  60.   int ItemNo;
  61.   TCustomRVData* RVData;
  62.   TWinControl* ctrl;
  63.   bool AutoSelect;
  64.   if (GetFieldLocation(rv->RVData, field, RVData, ItemNo))
  65.   {
  66.     if (RVData->GetRVData()->InheritsFrom(__classid(TRVTableCellData)))
  67.     {
  68.       ctrl = GetParentForm(rv)->ActiveControl;
  69.       RVData->Edit();
  70.       AutoSelect = false;
  71.       if (ctrl && ctrl->InheritsFrom(__classid(TEdit)))
  72.       {
  73.         AutoSelect = ((TEdit*)ctrl)->AutoSelect;
  74.         ((TEdit*)ctrl)->AutoSelect = false;
  75.       }
  76.       GetParentForm(rv)->ActiveControl = ctrl;
  77.       if (ctrl && ctrl->InheritsFrom(__classid(TEdit)))
  78.         ((TEdit*)ctrl)->AutoSelect = AutoSelect;
  79.     }
  80.     if (RVData->GetRVData()->InheritsFrom(__classid(TRVEditRVData)))
  81.       ((TCustomRichViewEdit*)((TRVEditRVData*)(RVData->GetRVData()))->RichView)->SetItemTextEd(ItemNo, value);
  82.   }
  83. }
  84. void __fastcall TForm1::FormCreate(TObject *Sender)
  85. {
  86.   RichViewEdit1->Clear();
  87.   TRVTableItemInfo* table = new TRVTableItemInfo(1,2,RichViewEdit1->RVData);
  88.   table->Cells[0][0]->Clear();
  89.   table->Cells[0][0]->AddNL("Name: ",0,1);
  90.   table->Cells[0][0]->AddNLTag(Edit1->Text,6,-1, (int)StrNew("name"));
  91.   table->Cells[0][1]->Clear();
  92.   table->Cells[0][1]->AddNL("Date: ",0,1);
  93.   table->Cells[0][1]->AddNLTag(Edit2->Text,6,-1, (int)StrNew("date"));
  94.   table->BorderWidth     = 1;
  95.   table->CellBorderWidth = 1;
  96.   RichViewEdit1->AddItem("",table);
  97.   RichViewEdit1->Format();
  98. }
  99. //---------------------------------------------------------------------------
  100. void TForm1::InsertField(const AnsiString field, const AnsiString value)
  101. {
  102.   if (GetFieldValue(RichViewEdit1, field)!="")
  103.   {
  104.     Application->MessageBox("Field already exists!","", 0);
  105.     return;
  106.   }
  107.   int StyleNo = RichViewEdit1->CurTextStyleNo;
  108.   RichViewEdit1->CurTextStyleNo = 6;
  109.   RichViewEdit1->InsertStringTag(value, (int)StrNew(field.c_str()));
  110.   RichViewEdit1->CurTextStyleNo = StyleNo;
  111.   RichViewEdit1->SetFocus();
  112. }
  113. //---------------------------------------------------------------------------
  114. void __fastcall TForm1::Button1Click(TObject *Sender)
  115. {
  116.   InsertField("name", Edit1->Text);
  117. }
  118. //---------------------------------------------------------------------------
  119. void __fastcall TForm1::Button2Click(TObject *Sender)
  120. {
  121.   InsertField("date", Edit2->Text);
  122. }
  123. //---------------------------------------------------------------------------
  124. void __fastcall TForm1::Button3Click(TObject *Sender)
  125. {
  126.   RichViewEdit1->ApplyTextStyle(0);
  127.   RichViewEdit1->SetFocus();
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TForm1::Edit1Change(TObject *Sender)
  131. {
  132.   if (Freeze)
  133.     return;
  134.   Freeze = true;
  135.   try
  136.   {
  137.     SetFieldValue(RichViewEdit1, "name", Edit1->Text);
  138.   }
  139.   catch(...)
  140.   {
  141.   }
  142.   Freeze = false;
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TForm1::Edit2Change(TObject *Sender)
  146. {
  147.   if (Freeze)
  148.     return;
  149.   Freeze = true;
  150.   try
  151.   {
  152.     SetFieldValue(RichViewEdit1, "date", Edit2->Text);
  153.   }
  154.   catch(...)
  155.   {
  156.   }
  157.   Freeze = false;
  158. }
  159. //---------------------------------------------------------------------------
  160. void __fastcall TForm1::RichViewEdit1Change(TObject *Sender)
  161. {
  162.   if (Freeze)
  163.     return;
  164.   Freeze = true;
  165.   try
  166.   {
  167.     AnsiString s = GetFieldValue(RichViewEdit1, "name");
  168.     if (s!="")
  169.       Edit1->Text = s;
  170.     s = GetFieldValue(RichViewEdit1, "date");
  171.     if (s!="")
  172.       Edit2->Text = s;
  173.   }
  174.   catch(...)
  175.   {
  176.   }
  177.   Freeze = false;
  178. }
  179. //---------------------------------------------------------------------------