動態產生物件之Event 如何指向自訂的procedure |
尚未結案
|
cck
一般會員 發表:1 回覆:1 積分:0 註冊:2003-05-06 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
懷舊的人
高階會員 發表:28 回覆:152 積分:141 註冊:2003-01-08 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
Unit1.pas:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; procedure Image1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Image1Click(Sender: TObject); begin if Sender = Image1 then ShowMessage('Image1 Clicked') else if Sender = Image2 then ShowMessage('Image2 Clicked') else if Sender = Image3 then ShowMessage('Image3 Clicked') else if Sender = Image4 then ShowMessage('Image4 Clicked'); end; end.Unit1.dfm: object Form1: TForm1 Left = 192 Top = 116 Width = 544 Height = 375 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Panel1: TPanel Left = 32 Top = 8 Width = 473 Height = 313 Caption = 'Panel1' TabOrder = 0 object Image1: TImage Left = 56 Top = 40 Width = 105 Height = 105 OnClick = Image1Click end object Image2: TImage Left = 216 Top = 40 Width = 105 Height = 105 OnClick = Image1Click end object Image3: TImage Left = 56 Top = 168 Width = 105 Height = 105 OnClick = Image1Click end object Image4: TImage Left = 216 Top = 168 Width = 105 Height = 105 OnClick = Image1Click end end end--- 每個人都是一本書 發表人 - hagar 於 2003/05/15 19:03:07 |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
假設你的自定 procedure 叫 ImageClick 那你動態建立 Image 時可順帶用指定 onClick 事件,如 :
with Timage.Create(panel1) do begin Parent := Panel1; ...... ...... onClick := ImageClick; end; proceduer ImageClick(Sender : TObject); begin if Sender is TImage then begin TImage(Sender).SaveToFIle(Path FileName); TImage(Sender)...... ..... end; end;其實通當不用特別分是那一個呼叫,因為從上可見可直接操控 Sender 但若你真的要分別它們來做別的特別的東西,可以在建立時給個不同的名稱或 Tag 在 onClick 裡 對一下即可。 |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg; type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure MYCLICK (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm}
// 事件
procedure TForm1.MYCLICK (Sender: TObject);
BEGIN
IF Sender IS TIMAGE THEN
BEGIN
SHOWMESSAGE((Sender AS TIMAGE).Name); END;
END;
//动态产生5个IMAGE,并指定事件
procedure TForm1.Button1Click(Sender: TObject);
VAR
IMAGE:TIMAGE;
I,II:INTEGER;
begin
I:=5; FOR II:=0 TO 5 DO
BEGIN
IMAGE:=TIMAGE.Create(PANEL1);
IMAGE.Left :=5+I;
IMAGE.Top:=5+I;
IMAGE.Width :=50;
IMAGE.Height:=50;
IMAGE.Name:='IMAGE'+INTTOSTR(II);
IMAGE.Parent :=PANEL1;
IMAGE.Picture.LoadFromFile('C:\spy.jpg'); IMAGE.OnClick:=MYCLICK;
I:=I+20;
END;
end; end. 供参考!!!! 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
cck
一般會員 發表:1 回覆:1 積分:0 註冊:2003-05-06 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |