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

RichEdit

开发平台:

Delphi

  1. /*------------------------------------------------------------------------------
  2.  Implementing "fields"
  3.  The main property settings:
  4.  - rvoTagsArePChars in RichViewEdit1->Options (so each item can have associated string)
  5.  - RVStyle1->TextStyles collection has two styles (for static text and for fields)
  6.    Especially look at Protection properties
  7.  - RichViewEdit1 is set to "use predefined set of styles" (right click on
  8.    RichViewEdit1 in design time, then choose "Settings")
  9.  - AcceptDragDropFormats = []
  10. ------------------------------------------------------------------------------*/
  11. #include <vclvcl.h>
  12. #include <SysUtils.hpp>
  13. #pragma hdrstop
  14. #include "Unit1.h"
  15. //---------------------------------------------------------------------------
  16. #pragma link "RVEdit"
  17. #pragma link "RichView"
  18. #pragma link "RVScroll"
  19. #pragma link "RVStyle"
  20. #pragma resource "*.dfm"
  21. TForm1 *Form1;
  22. //---------------------------------------------------------------------------
  23. __fastcall TForm1::TForm1(TComponent* Owner)
  24. : TForm(Owner)
  25. {
  26. }
  27. //---------------------------------------------------------------------------
  28. bool GetFieldLocation(TCustomRVData* RootRVData, const AnsiString field,
  29.   TCustomRVData* &RVData, int &ItemNo)
  30. {
  31.   for (int i=0; i<RootRVData->ItemCount; i++)
  32.     if (RootRVData->GetItemStyle(i)==rvsTable)
  33.     {
  34.       TRVTableItemInfo* table = (TRVTableItemInfo*)(RootRVData->GetItem(i));
  35.       for (int r=0; r<table->Rows->Count; r++)
  36.         for (int c=0; c<table->Rows->Items[r]->Count; c++)
  37.           if (table->Cells[r][c])
  38.             if (GetFieldLocation(table->Cells[r][c]->GetRVData(), field, RVData, ItemNo))
  39.               return true;
  40.     }
  41.     else if (AnsiString(PChar(RootRVData->GetItemTag(i)))==field)
  42.     {
  43.       ItemNo = i;
  44.       RVData = RootRVData->GetSourceRVData();
  45.       return true;
  46.     }
  47.   return false;
  48. }
  49. //---------------------------------------------------------------------------
  50. AnsiString GetFieldValue(TCustomRichView* rv, const AnsiString field)
  51. {
  52.   TCustomRVData* RVData;
  53.   int ItemNo;
  54.   if (GetFieldLocation(rv->RVData, field, RVData, ItemNo))
  55.     return RVData->GetItemTextA(ItemNo);
  56.   else
  57.     return "";
  58. }
  59. //---------------------------------------------------------------------------
  60. void __fastcall TForm1::FormCreate(TObject *Sender)
  61. {
  62.   RichViewEdit1->Clear();
  63.   RichViewEdit1->AddNL("2 + 2 =", 1,0);
  64.   RichViewEdit1->AddNLTag("  ", 0,-1, Integer(StrNew("answer1")));
  65.   RichViewEdit1->AddNL("?", 1,-1);
  66.   RichViewEdit1->AddNL("3 + 3 =", 1,0);
  67.   RichViewEdit1->AddNLTag("  ", 0,-1, Integer(StrNew("answer2")));
  68.   RichViewEdit1->AddNL("?", 1,-1);
  69.   RichViewEdit1->Format();
  70.   RichViewEdit1->SetSelectionBounds(1,2,1,2);
  71. }
  72. //---------------------------------------------------------------------------
  73. void __fastcall TForm1::RichViewEdit1Paste(TCustomRichViewEdit *Sender,
  74. bool &DoDefault)
  75. {
  76.   // allowing to paste only one line text
  77.   
  78.   AnsiString s = Clipboard()->AsText;
  79.   if (!strchr(s.c_str(), 'r') && !strchr(s.c_str(), 'n'))
  80.     RichViewEdit1->InsertText(s,false);
  81.   DoDefault = false;
  82. }
  83. //---------------------------------------------------------------------------
  84. void __fastcall TForm1::Button1Click(TObject *Sender)
  85. {
  86.   AnsiString s = GetFieldValue(RichViewEdit1, "answer1");
  87.   if (StrToIntDef(Trim(s), 0)!=4)
  88.   {
  89.     Application->MessageBox("Wrong! Try again","Test", 0);
  90.     return;
  91.   }
  92.   s = GetFieldValue(RichViewEdit1, "answer2");
  93.   if (StrToIntDef(Trim(s), 0)!=6)
  94.   {
  95.     Application->MessageBox("Wrong! Try again", "Test", 0);
  96.     return;
  97.   }
  98.   Application->MessageBox("Test is passed", "Test", 0);
  99. }
  100. //---------------------------------------------------------------------------