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

RichEdit

开发平台:

Delphi

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