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

RichEdit

开发平台:

Delphi

  1. unit Demo4Frm;
  2. interface
  3. {$I RV_Defs.inc}
  4. uses
  5.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  6.   RVScroll, RichView, RVStyle,
  7.   {$IFDEF RICHVIEWDEF4}
  8.   ImgList,
  9.   {$ENDIF}  
  10.   Menus;
  11. type
  12.   TfrmDemo4 = class(TForm)
  13.     rv: TRichView;
  14.     rvs: TRVStyle;
  15.     pm: TPopupMenu;
  16.     Watch1: TMenuItem;
  17.     Phone1: TMenuItem;
  18.     Keyboard1: TMenuItem;
  19.     NoSmokeSign1: TMenuItem;
  20.     Socket1: TMenuItem;
  21.     Pot1: TMenuItem;
  22.     Books1: TMenuItem;
  23.     Bridge1: TMenuItem;
  24.     ilGoods: TImageList;
  25.     il: TImageList;
  26.     procedure FormCreate(Sender: TObject);
  27.     procedure rvJump(Sender: TObject; id: Integer);
  28.     procedure pmItemClick(Sender: TObject);
  29.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  30.       Shift: TShiftState);
  31.   private
  32.     { Private declarations }
  33.     Goods: array[0..9] of Integer;
  34.     GoodsCount: Integer;
  35.   public
  36.     { Public declarations }
  37.     procedure BuildDoc;
  38.   end;
  39. implementation
  40. const Descriptions: array [0..7] of String =
  41. (
  42.    'Exact time twice a day!',
  43.    'Unique 9-button model',
  44.    'Additional keys available on request',
  45.    'Must have for any airline!',
  46.    'Second hand',
  47.    'Universal thing',
  48.    '2 kg',
  49.    'Brooklyn Bridge, available only today, 10% discount for first 10 buyers!'
  50. );
  51. {$R *.DFM}
  52. { TfrmDemo4 }
  53. procedure TfrmDemo4.BuildDoc;
  54. var i, VPos: Integer;
  55. begin
  56.   VPos := rv.VScrollPos;
  57.   rv.Clear;
  58.   rv.AddNL('Welcome to our shop!',1,1);
  59.   rv.AddNL('Today we have:',2,1);
  60.   for i := 0 to GoodsCount-1 do begin
  61.     rv.AddBulletEx('', Goods[i], ilGoods, 0);
  62.     rv.Add(pm.Items[Goods[i]].Caption,3);
  63.     rv.Add(' ('+Descriptions[Goods[i]]+') ',0);
  64.     rv.AddHotspotEx('', 2,3, il, -1);
  65.     rv.AddBreak;
  66.   end;
  67.   if GoodsCount<>10 then
  68.     rv.AddHotspotEx('', 0,1, il, 0);
  69.   rv.Format;
  70.   rv.VScrollPos := VPos;
  71. end;
  72. procedure TfrmDemo4.FormCreate(Sender: TObject);
  73. begin
  74.   {$IFDEF RICHVIEWDEF5}
  75.   pm.AutoHotkeys := maManual;
  76.   {$ENDIF}
  77.   BuildDoc;
  78. end;
  79. procedure TfrmDemo4.rvJump(Sender: TObject; id: Integer);
  80. var p: TPoint;
  81.     i: Integer;
  82. begin
  83.   if id=GoodsCount then begin
  84.     // adding
  85.     GetCursorPos(p);
  86.     pm.Popup(p.x, p.y);
  87.     end
  88.   else begin
  89.     // deleting
  90.     for i := id to GoodsCount-2 do
  91.       Goods[i] := Goods[i+1];
  92.     dec(GoodsCount);
  93.     BuildDoc;
  94.   end;
  95. end;
  96. procedure TfrmDemo4.pmItemClick(Sender: TObject);
  97. begin
  98.   Goods[GoodsCount] := TMenuItem(Sender).MenuIndex;
  99.   inc(GoodsCount);
  100.   BuildDoc;
  101.   rv.VScrollPos := rv.VScrollMax;
  102. end;
  103. procedure TfrmDemo4.FormKeyDown(Sender: TObject; var Key: Word;
  104.   Shift: TShiftState);
  105. begin
  106.   if Key=VK_ESCAPE then Close;
  107. end;
  108. end.