我想動態創建TImage控制元件,然后拖放它們。但是,如果我想將用于拖動的程序分配給此影像的事件,它會給我:
錯誤:為呼叫“ClickEvent”指定的引數數量錯誤
這是我的拖動代碼:
procedure ClickEvent(Sender:TObject; Button:TMouseButton; Shift:TShiftstate; X,Y:Integer);
begin
if Button = mbLeft then TControl(Sender).BeginDrag(False);
end;
在這里我創建影像并添加屬性:
procedure SpawnCard(Ort:TWinControl; sKarte:TKarteClass; Liste: Array of TKarte; BilderListe:Array of TCustomImage);
var
Bild:TImage;
begin
Liste[High(Liste)]:=sKarte.Create();
Bild:=TImage.Create(Combat);
with Bild do
begin
onm ouseDown:=ClickEvent;
Parent:=Ort;
Top:=1;
Left:=200*length(BilderListe);
width:=200;
height:=300;
Proportional:=True;
Stretch:=True;
Picture.LoadFromFile(Liste[High(Liste)].PicPath);
end;
BilderListe[High(BilderListe)]:=Bild;
end;
我不想打電話ClickEvent,我只想把它分配給事件。
uj5u.com熱心網友回復:
TImage.OnMouseDown(繼承自TControl其父類)是一個TMouseEvent屬性。
TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer) of object;
如您所見,它被宣告為“物件”,這意味著它需要一個方法指標(參見方法指標部分)。
示例 1:
ClickEvent在表單(或任何其他物件)上宣告:
TForm1 = class(TForm)
Image1: TImage;
public
procedure ClickEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
...
procedure TForm1.ClickEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then TControl(Sender).BeginDrag(False);
end;
然后您可以按如下方式分配它:
Image1.OnMouseDown := Form1.ClickEvent;
示例 2:
宣告ClickEvent為類方法:
TMyEventHandlers = class
class procedure ClickEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
...
class procedure TMyEventHandlers.ClickEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then TControl(Sender).BeginDrag(False);
end;
然后您可以按如下方式分配它:
Image1.OnMouseDown := TMyEventHandlers.ClickEvent;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495040.html
