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

如何在运行期间,实现一个BUTTON的ONCLICK事件是另两个BUTTON事件的合集?

答題得分者是:Stallion
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-16 15:42:15 IP:58.62.xxx.xxx 訂閱
我3个BUTTON,
第1个BUTTON的on_click事件是: showmessage('1');
第2个BUTTON的on_click事件是: showmessage('2');
第3个BUTTON的on_click事件空,

现在,我想在程序运行时(不是在设计期),执行一段代码,
来实现第三个Button的on_click事件是: showmessage('1'); showmessage('2');
即,是前两个BUTTON的on_click合集.

这段代码我该怎么写?

編輯記錄
aKnightChen@Hotmail.com 重新編輯於 2007-07-16 15:45:13, 註解 论坛不允许onclick字符出现,,,晕‧
taishyang 重新編輯於 2007-07-16 15:46:18, 註解 將文章分類成[問題]‧
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-16 16:13:16 IP:58.62.xxx.xxx 訂閱
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('1');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('2');

end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//目前没有事件(在设计期间,是不允许在这里写事件,否则,与本题意不符),
//想实现以下两个功能(但要求通过点击Button4来实现设置它的事件)
//Button1Click(Sender);
//Button2Click(Sender);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
//我要在这里写代码,实现Button3的事件是:执行Button1.Click,Button2.Click
//即,最终效果是,showmessage('1');ShowMessage('2');
end;

end.

編輯記錄
aKnightChen@Hotmail.com 重新編輯於 2007-07-16 16:13:48, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-16 16:15:47 IP:211.22.xxx.xxx 未訂閱
1.在Button3_On.Click事件裡面連續呼叫Button1_On.Click及Button2_On.Click不就是這樣嗎?
2.另外寫一個procedureA,然後在procedureA裡面連續呼叫Button1_On.Click及Button2_On.Click,然後把這個procedureA指定給Button3_On.Click這個procedure。
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-16 17:04:05 IP:58.62.xxx.xxx 訂閱
好,我讲一下我真实的使用目的,

我有个程序,我想for i=0 to Screen.FormCount-1 的方法,
再遍历所有FORM,如果有StringGrid控件的话,
就看看它有没有PopupMenu,如果有的话,就再增加几个'我自已的定义的通用'PopupMenu.MenuItem
如果没有的话,;就创建一个PopupMenu,并也增加几个'我自已的定义的通用'PopupMenu.MenuItem
(注:我这里会使用到OnPopup事件,所以,我会做: PopupMenu1.OnPopup=myStandPopupEvent)
这样做并没有什么困难,
我已实现了,
可是,问题来了,
如果我原先的StringGrid中存在PopupMenu,并且也有OnPoup事件,
我希望在我的myStandPopupEvent中,能兼容原先的onPopup事件,而不是完全覆盖。




Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-16 18:15:12 IP:211.22.xxx.xxx 未訂閱
1.你前後的問題也太風馬牛不相及了吧~
2.按照你的狀況來說,你最好在自訂的myStandPopupEvent裡面動手腳,按照所在的FORM裡面的StringGrid來增減自訂的PopupMenu裡想要顯示的MenuItem,再將該自訂的PopupMenu指定給VCL元件上的PopupMenu比較實在。也就是說所有VCL元件上的PopupMenu屬性要動態設定,而被設定的自訂PopupMenu元件內容也要動態增減如此。
===================引 用 aKnightChen@Hotmail.com 文 章===================
好,我讲一下我真实的使用目的,
我有个程序,我想for i=0 to Screen.FormCount-1 的方法,
再遍历所有FORM,如果有StringGrid控件的话,
就看看它有没有PopupMenu,如果有的话,就再增加几个'我自已的定义的通用'PopupMenu.MenuItem
如果没有的话,;就创建一个PopupMenu,并也增加几个'我自已的定义的通用'PopupMenu.MenuItem
(注:我这里会使用到OnPopup事件,所以,我会做: PopupMenu1.OnPopup=myStandPopupEvent)
这样做并没有什么困难,
我已实现了,
可是,问题来了,
如果我原先的StringGrid中存在PopupMenu,并且也有OnPoup事件,
我希望在我的myStandPopupEvent中,能兼容原先的onPopup事件,而不是完全覆盖。




aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-17 07:47:20 IP:58.62.xxx.xxx 訂閱
元件我都可以动态创建,
但是,事件处理方面有困难,
因为原先的PopMenu有OnPopup事件,
而自定义的PopMenu.MenuItem也要使用到OnPopup事件,
,准确地说,是在原先的PopupMenu上动态生成几个MenuItem,但我还想动态改变原先的OnPopup事件(在原先Onpup代码上,再动态增加几个处理语句),问题就卡在这里。
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-17 07:50:04 IP:58.62.xxx.xxx 訂閱
搞定,在DelphiBBS.com上,有一位朋友教我了,这里与大家一起分享一下。


private
{ Private declarations }
FOldPopup: TNotifyEvent;
procedure NewPopup(Sender: TObject);

public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.NewPopup(Sender: TObject);
begin
if Assigned(FOldPopup) then
FOldPopup(Sender);
ShowMessage('2');
end;

procedure TForm1.SetEventClick(Sender: TObject);
begin

//保存旧的Popup事件
FOldPopup := PopupMenu1.OnPopup;

//挂上新的Popup事件
PopupMenu1.OnPopup := NewPopup;
end;
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-17 09:28:42 IP:211.22.xxx.xxx 未訂閱
還有更活的寫法~
1.把自訂的PopupMenu AutoPopup屬性設定為false。
2.然後在相關的StringGrid VCL元件上面利用Mouse Down來動態設定與顯示PopupMenu,並在自訂的PopupMenu的OnPopup事件裡面依照所作用的元件來增減項目,小弟認為這樣是最活的。
3.以下有兩篇相似的範例,請參考~
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=28297
http://delphi.ktop.com.tw/board.php?cid=168&fid=913&tid=75364
系統時間:2024-05-02 22:05:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!