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

RichEdit

开发平台:

Delphi

  1. /*=============================================================================}
  2. { This demo shows how to read information about items in RichView              }
  3. { Key methods and properties:                                                  }
  4. { - ItemCount,                                                                 }
  5. { - GetItemStyle,                                                              }
  6. { - GetItemText, GetBreakInfo, GetPictureInfo, GetControlInfo, GetBulletInfo,  }
  7. {   GetHotspotInfo                                                             }
  8. { This demo also shows "hotspots"                                              }
  9. {=============================================================================*/
  10. #include <vclvcl.h>
  11. #pragma hdrstop
  12. #include "Unit1.h"
  13. //---------------------------------------------------------------------------
  14. #pragma link "RichView"
  15. #pragma link "RVScroll"
  16. #pragma link "RVStyle"
  17. #pragma resource "*.dfm"
  18. TForm1 *Form1;
  19. //---------------------------------------------------------------------------
  20. __fastcall TForm1::TForm1(TComponent* Owner)
  21. : TForm(Owner)
  22. {
  23. }
  24. //---------------------------------------------------------------------------
  25. void TForm1::FillLeftRichView()
  26. {
  27.   RichView1->AddNL("Reading information about items",1,1);
  28.   RichView1->AddBreakEx(2, rvbsLine, clRed);
  29.   RichView1->AddNL("Image: ",0,0);
  30.   Graphics::TBitmap* bmp = new Graphics::TBitmap;
  31.   bmp->Width  = 60;
  32.   bmp->Height = 40;
  33.   bmp->Canvas->Pen->Color   = clRed;
  34.   bmp->Canvas->Brush->Color = clYellow;
  35.   bmp->Canvas->Rectangle(0,0,60,40);
  36.   RichView1->AddPictureEx("Yellow box", bmp, -1, rvvaMiddle);
  37.   RichView1->AddBreak();
  38.   RichView1->AddNL("Bullet: ",0,0);
  39.   RichView1->AddBulletEx("Printer image",0, ImageList1, -1);
  40.   RichView1->AddBreak();
  41.   RichView1->AddNL("Hotspot: ",0,0);
  42.   RichView1->AddHotspotEx("Active printer image",1, 0, ImageList1, -1);
  43.   RichView1->AddNL("(move mouse to hotspot and you see picture changes;"
  44.           " more information about hotspots will be in hypertext description)",
  45.           0,-1);
  46.   RichView1->AddBreak();
  47.   RichView1->AddNL("Button: ",0,0);
  48.   TButton * btn = new TButton((TComponent*)NULL);
  49.   btn->Width = 100;
  50.   btn->Caption = "Out of order";
  51.   RichView1->AddControlEx("Button example", btn, -1, rvvaBaseline);
  52.   RichView1->Format();
  53. }
  54. //---------------------------------------------------------------------------
  55. void GetBreakInfo(int ItemNo, TRichView* RichView1, TRichView* RichView2)
  56. {
  57.   unsigned char Width;
  58.   TColor Color;
  59.   TRVBreakStyle Style;
  60.   int Tag;
  61.   AnsiString ColorString;
  62.   RichView1->GetBreakInfo(ItemNo, Width, Style, Color, Tag);
  63.   if (Color == clNone)
  64.     ColorString = "line has color of the 0-th text style";
  65.   else
  66.     ColorString = ColorToString(Color);
  67.   RichView2->AddFmt("Item #%d: break. Color=%s; Width=%d",
  68.                     ARRAYOFCONST((ItemNo, ColorString, (int)Width)), 0, 0);
  69.   // Style is always rvbsLine in current version
  70. }
  71. //---------------------------------------------------------------------------
  72. void GetPictureInfo(int ItemNo, TRichView* RichView1, TRichView* RichView2)
  73. {
  74.   TGraphic   *gr;
  75.   TRVVAlign  VAlign;
  76.   AnsiString VAString;
  77.   AnsiString Name;
  78.   int        Tag;
  79.   RichView1->GetPictureInfo(ItemNo, Name, gr, VAlign, Tag);
  80.   switch (VAlign)
  81.   {
  82.     case rvvaBaseline:
  83.       VAString = "text base line";
  84.       break;
  85.     case rvvaMiddle:
  86.       VAString = "text middle";
  87.       break;
  88.     default:
  89.       VAString = "?";
  90.   }
  91.   RichView2->AddFmt("Item #%d: image (%s, %dx%d); Vertical alignment: %s; Name='%s'",
  92.                     ARRAYOFCONST((ItemNo, AnsiString(gr->ClassName()), gr->Width, gr->Height, VAString, Name)),
  93.                     0, 0);
  94. }
  95. //---------------------------------------------------------------------------
  96. void GetControlInfo(int ItemNo, TRichView* RichView1, TRichView* RichView2)
  97. {
  98.   TControl*  ctrl;
  99.   TRVVAlign  VAlign;
  100.   AnsiString VAString;
  101.   AnsiString Name;
  102.   int        Tag;
  103.   RichView1->GetControlInfo(ItemNo, Name, ctrl, VAlign, Tag);
  104.   switch (VAlign)
  105.   {
  106.     case rvvaBaseline:
  107.       VAString = "text base line";
  108.       break;
  109.     case rvvaMiddle:
  110.       VAString = "text middle";
  111.       break;
  112.     default:
  113.       VAString = "?";
  114.   }
  115.   RichView2->AddFmt("Item #%d: control (%s, %dx%d); Vertical alignment: %s; Name='%s'",
  116.                     ARRAYOFCONST((ItemNo, AnsiString(ctrl->ClassName()), ctrl->Width, ctrl->Height, VAString, Name)),
  117.                     0, 0);
  118. }
  119. //---------------------------------------------------------------------------
  120. void GetBulletInfo(int ItemNo, TRichView* RichView1, TRichView* RichView2)
  121. {
  122.   TCustomImageList* ImageList;
  123.   AnsiString  Name;
  124.   int         ImageIndex, Tag;
  125.   RichView1->GetBulletInfo(ItemNo, Name, ImageIndex, ImageList, Tag);
  126.   RichView2->AddFmt("Item #%d: bullet; ImageList='%s'; Image index=%d; Name='%s'",
  127.                     ARRAYOFCONST((ItemNo, ImageList->Name, ImageIndex, Name)),
  128.                     0, 0);
  129. }
  130. //---------------------------------------------------------------------------
  131. void GetHotspotInfo(int ItemNo, TRichView* RichView1, TRichView* RichView2)
  132. {
  133.   TCustomImageList* ImageList;
  134.   AnsiString  Name;
  135.   int         HotImageIndex, ImageIndex, Tag;
  136.   RichView1->GetHotspotInfo(ItemNo, Name, ImageIndex, HotImageIndex, ImageList, Tag);
  137.   RichView2->AddFmt("Item #%d: bullet; ImageList='%s'; Image index=%d, Hot image index=%d; Name='%s'",
  138.                     ARRAYOFCONST((ItemNo, ImageList->Name, ImageIndex, HotImageIndex, Name)),
  139.                     0, 0);
  140. }
  141. //---------------------------------------------------------------------------
  142. void TForm1::FillRightRichView()
  143. {
  144.   AnsiString s;
  145.   // Reading information about items
  146.   for (int i=0; i<RichView1->ItemCount; i++)
  147.   {
  148.     int ItemStyle = RichView1->GetItemStyle(i);
  149.     if (ItemStyle>=0)
  150.     {
  151.       // Parameter of GetItemStyle - index of item (0..ItemCount).
  152.       // If GetItemStyle returns zero or positive value,
  153.       // this item is text, and returned value is an index in
  154.       // collection of styles (RVStyle.TextStyles)
  155.       s = RichView1->GetItemTextA(i);
  156.       RichView2->AddFmt("Item #%d: text. Value='%s'. Style of text is '%s'",
  157.                        ARRAYOFCONST((i, s, RVStyle1->TextStyles->Items[ItemStyle]->StyleName)),0,0);
  158.     }
  159.     else
  160.       // If GetItemStyle returns negative value, this item is a non-text item
  161.       switch (ItemStyle)
  162.       {
  163.         case rvsBreak:
  164.           GetBreakInfo(i, RichView1, RichView2);
  165.           break;
  166.         case rvsPicture:
  167.           GetPictureInfo(i, RichView1, RichView2);
  168.           break;
  169.         case rvsComponent:
  170.           GetControlInfo(i, RichView1, RichView2);
  171.           break;
  172.         case rvsBullet:
  173.           GetBulletInfo(i, RichView1, RichView2);
  174.           break;
  175.         case rvsHotspot:
  176.           GetHotspotInfo(i, RichView1, RichView2);
  177.           break;
  178.         default:
  179.           RichView2->AddNL("Unknown item type", 0, 0);
  180.       }
  181.     RichView2->AddBreak();
  182.   }
  183.   RichView2->Format();
  184. }
  185. //---------------------------------------------------------------------------
  186. void __fastcall TForm1::FormCreate(TObject *Sender)
  187. {
  188.   FillLeftRichView();
  189.   FillRightRichView();
  190. }
  191. //---------------------------------------------------------------------------