全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1509
推到 Plurk!
推到 Facebook!

動態產生物件之Event 如何指向自訂的procedure

尚未結案
cck
一般會員


發表:1
回覆:1
積分:0
註冊:2003-05-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-15 18:01:09 IP:211.79.xxx.xxx 未訂閱
各位大大 我在一panel中產生數個TImage物件, 想把那些物件的onClick Event connect到我自寫的procedure, 且各物件是指向同一procedure, 如何判斷是那個物件觸發的, 請問要如何做,謝謝
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-15 18:07:10 IP:202.39.xxx.xxx 未訂閱
在 OnClick 這個 Event 的 Procedure 中 有個 Sender 的參數 例: if Sender = Image1 then   // 由 Image1 觸發 OnClick else if Sender = Panel1 then   // 由 Panel1 觸發 OnClick    --- 每個人都是一本書
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-15 18:48:05 IP:152.104.xxx.xxx 未訂閱
版主大人 您只解答了 1/3
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-15 18:59:27 IP:202.39.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-15 19:03:58 IP:218.32.xxx.xxx 未訂閱
引言: 我在一panel中產生數個TImage物件, 想把那些物件的onClick Event connect到我自寫的procedure, 且各物件是指向同一procedure
這篇應可參考 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29440
引言: 如何判斷是那個物件觸發的.
請參考 hagar 版主的回應
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-15 19:04:52 IP:218.16.xxx.xxx 未訂閱
假設你的自定 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-15 19:10:03 IP:218.32.xxx.xxx 未訂閱
>
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-15 19:14:58 IP:202.39.xxx.xxx 未訂閱
好哦! 好哦! 不過我比較喜歡去找美眉喝大酒! < > 不過我還沒吃晚飯! < > --- 每個人都是一本書 發表人 - hagar 於 2003/05/15 19:23:22
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-15 19:19:37 IP:218.16.xxx.xxx 未訂閱
吃飽粉久了,...我廠這兒 5:30 pm 吃晚飯,早上遲到沒吃早餐,要待到11:30am吃午飯,散完步便不夠力氣待18小時吃下一餐了< > 若你請我吃宵夜又無妨< >
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-15 19:20:04 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-16 09:56:01 IP:211.79.xxx.xxx 未訂閱
感謝各位的解答, 因為問題寫的不清楚,所以照成各位有些confuse, 我指的是動態產生的物件 所以感謝wnhoo非常清楚的回應, 符合我的需求 謝謝
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-16 10:20:09 IP:218.16.xxx.xxx 未訂閱
引言: 我在一panel中產生數個TImage物件, 想把那些物件的onClick Event connect到我自寫的procedure, 且各物件是指向同一procedure, 如何判斷是那個物件觸發的, 請問要如何做,謝謝
純粹採訪一下給分心態。 請問 wnhoo 提出的回文裡,有那一句是有幫助解決你上面題出的問題而不在他之前的文章已解答的呢? 若有,可否指出給小弟見識見識因小弟資質有限看不出來。若沒有,那給分的標準又是甚麼呢? 謝謝。
系統時間:2024-04-24 20:00:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!