unit Demo4Frm; interface {$I RV_Defs.inc} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RVScroll, RichView, RVStyle, ImgList, Menus; type TfrmDemo4 = class(TForm) rv: TRichView; rvs: TRVStyle; pm: TPopupMenu; Watch1: TMenuItem; Phone1: TMenuItem; Keyboard1: TMenuItem; NoSmokeSign1: TMenuItem; Socket1: TMenuItem; Pot1: TMenuItem; Books1: TMenuItem; Bridge1: TMenuItem; ilGoods: TImageList; il: TImageList; procedure FormCreate(Sender: TObject); procedure rvJump(Sender: TObject; id: Integer); procedure pmItemClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } Goods: array[0..9] of Integer; GoodsCount: Integer; public { Public declarations } procedure BuildDoc; end; implementation const Descriptions: array [0..7] of String = ( 'Exact time twice a day!', 'Unique 9-button model', 'Additional keys available on request', 'Must have for any airline!', 'Second hand', 'Universal thing', '2 kg', 'Brooklyn Bridge, available only today, 10% discount for the first 10 buyers!' ); {$R *.DFM} { TfrmDemo4 } procedure TfrmDemo4.BuildDoc; var i, VPos: Integer; begin VPos := rv.VScrollPos; rv.Clear; rv.AddNL('Welcome to our shop!',1,1); rv.AddNL('Today we have:',2,1); for i := 0 to GoodsCount-1 do begin rv.AddBulletEx('', Goods[i], ilGoods, 0); rv.Add(pm.Items[Goods[i]].Caption,3); rv.Add(' ('+Descriptions[Goods[i]]+') ',0); rv.AddHotspotEx('', 2,3, il, -1); rv.AddBreak; end; if GoodsCount<>10 then rv.AddHotspotEx('', 0,1, il, 0); rv.Format; rv.VScrollPos := VPos; end; procedure TfrmDemo4.FormCreate(Sender: TObject); begin {$IFDEF RICHVIEWDEF5} pm.AutoHotkeys := maManual; {$ENDIF} BuildDoc; end; procedure TfrmDemo4.rvJump(Sender: TObject; id: Integer); var p: TPoint; i: Integer; begin if id=GoodsCount then begin // adding GetCursorPos(p); pm.Popup(p.x, p.y); end else begin // deleting for i := id to GoodsCount-2 do Goods[i] := Goods[i+1]; dec(GoodsCount); BuildDoc; end; end; procedure TfrmDemo4.pmItemClick(Sender: TObject); begin Goods[GoodsCount] := TMenuItem(Sender).MenuIndex; inc(GoodsCount); BuildDoc; rv.VScrollPos := rv.VScrollMax; end; procedure TfrmDemo4.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_ESCAPE then Close; end; end.