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

RichEdit

开发平台:

Delphi

  1. /*==============================================================================
  2.   This demo shows how to implement listbox-like selection using hypertext.
  3.   Property settings:
  4.   - rvoTagsArePChars is included in rv->Options
  5.   - rvoAllowSelection is excluded from rv->Options
  6.   - rv->TabNavigation = rvtnNone
  7.   - rv->Style = RVStyle1
  8.   - 3 text styles are created in RVStyle->TextStyles
  9.     TextStyles->Items[0] - normal text
  10.     TextStyles->Items[1] - hypertext
  11.     TextStyles->Items[2] - hypertext with background
  12.   NOTE: This demo is a bit overcomplicated.
  13.     If you do not use tables (TRVTableItemInfo), you do not need to
  14.     work with RVData variables (because documents without tables
  15.     have only one RVData - rv->RVData)
  16.   NOTE2: phonebook can be saved (rv->SaveRVFFromFile())
  17.     and loaded (rv->LoadRVFFromFile()). In order to load bullets (images with phones),
  18.     process OnRVFImageListNeeded.
  19. {=============================================================================*/
  20. #include <vclvcl.h>
  21. #pragma hdrstop
  22. #include "Unit1.h"
  23. #include "Unit2.h"
  24. //---------------------------------------------------------------------------
  25. #pragma link "RichView"
  26. #pragma link "RVScroll"
  27. #pragma link "RVStyle"
  28. #pragma resource "*.dfm"
  29. TForm1 *Form1;
  30. //---------------------------------------------------------------------------
  31. __fastcall TForm1::TForm1(TComponent* Owner)
  32. : TForm(Owner)
  33. {
  34. }
  35. //---------------------------------------------------------------------------
  36. #define TEXTSTYLE_NOTMALTEXT  0
  37. #define TEXTSTYLE_JUMP        1
  38. #define TEXTSTYLE_SELECTED    2
  39. int TForm1::MakeTag(AnsiString s)
  40. {
  41.   return (int)StrNew(s.c_str());
  42. }
  43. //---------------------------------------------------------------------------
  44. AnsiString TForm1::GetTagStr(int tag)
  45. {
  46.   // reverse function
  47.   AnsiString Result = (char*)tag;
  48.   for (int i=1; i<=Result.Length(); i++)
  49.     if (Result[i]==1)
  50.       Result[i] = ' ';
  51.   return Result;
  52. }
  53. //---------------------------------------------------------------------------
  54. void __fastcall TForm1::FormCreate(TObject *Sender)
  55. {
  56.   rv->AddNL("Telephone directory:",0,0);
  57.   rv->AddBulletEx("",0, ImageList1, 0);
  58.   rv->AddTag("Kim Lumber",TEXTSTYLE_JUMP, MakeTag("123-4567"));
  59.   rv->AddBulletEx("",0, ImageList1, 0);
  60.   rv->AddTag("Phil Forest",TEXTSTYLE_JUMP, MakeTag("234-5678"));
  61.   rv->AddBulletEx("",0, ImageList1, 0);
  62.   rv->AddTag("Woody Young",TEXTSTYLE_JUMP, MakeTag("345-6789"));
  63.   rv->Format();
  64. }
  65. //---------------------------------------------------------------------------
  66. void TForm1::Select(TCustomRVFormattedData* RVData, int ItemNo)
  67. {
  68.   if (FSelectedRVData && FSelectedRVData==RVData && FSelectedItemNo==ItemNo)
  69.   {
  70.     Button2->Click();
  71.     return;
  72.   }
  73.   if (FSelectedRVData)
  74.     FSelectedRVData->GetItem(FSelectedItemNo)->StyleNo = TEXTSTYLE_JUMP;
  75.   if (RVData)
  76.   {
  77.     Edit1->Text = GetTagStr(RVData->GetItemTag(ItemNo));
  78.     RVData->GetItem(ItemNo)->StyleNo = TEXTSTYLE_SELECTED;
  79.   }
  80.   FSelectedRVData = RVData;
  81.   FSelectedItemNo = ItemNo;
  82.   rv->Refresh();
  83.   /*
  84.    In this demo, two text styles (TEXTSTYLE_SELECTED and TEXTSTYLE_JUMP)
  85.    have difference only in colors.
  86.    But if they had different font name/size/style, or different jump flag,
  87.    Refresh() would be not enough - change this line to rv->Format();
  88.   */
  89. }
  90. //---------------------------------------------------------------------------
  91. void __fastcall TForm1::rvJump(TObject *Sender, int id)
  92. {
  93.   TCustomRVFormattedData* RVData;
  94.   int ItemNo;
  95.   rv->GetJumpPointLocation(id, RVData, ItemNo);
  96.   Select(RVData, ItemNo);
  97. }
  98. //---------------------------------------------------------------------------
  99. void __fastcall TForm1::Button1Click(TObject *Sender)
  100. {
  101.   Form2->Edit1->Text = "";
  102.   Form2->Edit2->Text = "";
  103.   if (Form2->ShowModal()==mrOk)
  104.   {
  105.     rv->AddBulletEx("",0, ImageList1, 0);
  106.     rv->AddTag(Form2->Edit1->Text ,TEXTSTYLE_JUMP, MakeTag(Form2->Edit2->Text));
  107.     rv->FormatTail();
  108.     Select(rv->RVData, rv->ItemCount-1);
  109.   }
  110. }
  111. //---------------------------------------------------------------------------
  112. void __fastcall TForm1::Button2Click(TObject *Sender)
  113. {
  114.   if (FSelectedRVData==NULL)
  115.   {
  116.     MessageBeep(0);
  117.     return;
  118.   }
  119.   Form2->Edit1->Text = FSelectedRVData->GetItemTextA(FSelectedItemNo);
  120.   Form2->Edit2->Text = GetTagStr(FSelectedRVData->GetItemTag(FSelectedItemNo));
  121.   if (Form2->ShowModal()==mrOk)
  122.   {
  123.     FSelectedRVData->SetItemTextA(FSelectedItemNo, Form2->Edit1->Text);
  124.     FSelectedRVData->SetItemTag(FSelectedItemNo, MakeTag(Form2->Edit2->Text));
  125.     rv->Format();
  126.     Edit1->Text = Form2->Edit2->Text;
  127.   }
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TForm1::Button3Click(TObject *Sender)
  131. {
  132.   if (FSelectedRVData==NULL)
  133.   {
  134.     MessageBeep(0);
  135.     return;
  136.   }
  137.   TCustomRVFormattedData* RVData = FSelectedRVData;
  138.   int ItemNo                     = FSelectedItemNo;
  139.   Select(NULL, -1);
  140.   RVData->DeleteItems(ItemNo-1, 2); // deleting two items: image and text
  141.   rv->Format();
  142.   Edit1->Text = "";
  143. }
  144. //---------------------------------------------------------------------------