線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2460
推到 Plurk!
推到 Facebook!

利用程式碼新增的物件 如何使用Events

尚未結案
brange
一般會員


發表:6
回覆:9
積分:3
註冊:2007-07-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-05 00:02:57 IP:61.61.xxx.xxx 訂閱
TImage *Image[54];
Image[i]=new TImage(this);
Image[i]->Parent=Form1;

像上面那樣用程式碼新增出來的物件
如何去使用Events
像一些Click、MouseDown、MouseUp、MouseMove、DockDrop、DockOver....等等的Events

請問下列的方法 是否為使用Events的方法
Image[i]->OnClick([_fastcall*[_closure][TObiect*]][TObiect*]);
Image[i]->OnMouseDown([_fastcall*[_closure][TObiect*,TMouseButton,TShiftState,int,int]]...);

是的話
再請問 事件後那一長串 分別代表什麼意思
([_fastcall*[_closure][TObiect*]][TObiect*])
([_fastcall*[_closure][TObiect*,TMouseButton,TShiftState,int,int]]...);
是否可以給個範例來當作參考

harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-05 01:07:28 IP:59.104.xxx.xxx 未訂閱
首先請參閱如何編輯程式碼
<textarea class="cpp" rows="10" cols="60" name="code">class TForm1 : public TForm { __published: // IDE-managed Components TImage *Image1; private: // User declarations void __fastcall myImageClick(TObject *Sender);//宣告事件處裡函式 public: // User declarations __fastcall TForm1(TComponent* Owner); }; </textarea><br /> <textarea class="cpp" rows="10" cols="60" name="code">//--------------------------------------------------------------------------- void __fastcall TForm1::myImageClick(TObject *Sender) { ShowMessage("myImageClick"); } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Image1->0nClick = myImageClick; //指定事件處裡函式 } </textarea><br />
至於使用方法範例書上會有,或是善加利用搜尋。
------
~§~迷時師渡,悟了自渡~§~
編輯記錄
harpist 重新編輯於 2007-07-05 01:09:01, 註解 無‧
brange
一般會員


發表:6
回覆:9
積分:3
註冊:2007-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-09 23:44:54 IP:61.61.xxx.xxx 訂閱
harpist
謝謝harpist的說明
這個方法我試了好幾次
才知道它在搞什麼

但現在又有問題了
就是:

TImage *Image[108]
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i=1;i<=108;i ){
Image[i]=new TImage(this);
Image[i]->Parent=Form1; //產生在Form1上
Image[i]->Left=i*113; //產生在Form1從左算起
Image[i]->Top=0; //產生在Form1從上面數
Image[i]->Width=113; //每個元件的寬
Image[i]->Height=145; //每個元件的高
switch(i){
case 15:
Image[15]->OnMouseDown =myImage15MouseDown; //指定事件處裡函式
break;
//case 16:........等等
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::myImage16MouseDown(TObject *Sender,TMouseButton Button,
TShiftState Shift, int X, int Y)
{ //對觸發此事件的要求程式碼
}
如上面的程式
新增i個Image[i]在Form上
設定好顯示的位址與Image大小
現在要對某一個Image做事件的觸發動作
就要先設定好某個的事件處裡函式(如: Image[15] ->OnMouseDown)
這樣一來
如果某幾個觸發的動作事件所要的要求都一樣
那麼不就要寫一堆
請問有沒有一個事件處裡函式
是可以以陣列的方式來處理的
或是有更好的方法可以提供參考嗎

harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-10 02:16:37 IP:211.74.xxx.xxx 未訂閱
如果觸發的動作事件所要的要求都一樣那就指向同一個事件處裡函式,
然後可以在事件處裡函式裡面判斷是誰觸發事件再對應處裡動作,事件
處裡函式參數 Sender 就是觸發的物件。
------
~§~迷時師渡,悟了自渡~§~
brange
一般會員


發表:6
回覆:9
積分:3
註冊:2007-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-22 13:48:33 IP:61.61.xxx.xxx 訂閱
harpist 謝謝您的說明
大約了解你意思
你所說的Sender這個參數
是觸發的物件
pde
brange
一般會員


發表:6
回覆:9
積分:3
註冊:2007-07-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-22 13:58:31 IP:61.61.xxx.xxx 訂閱
harpist 謝謝您的說明
大約了解你的意思
你所說事件處裡函式參數
Sender就是觸發的物件
我有試著去讓它動作
但就是不行耶
如 當我按下那個Image時 要讓它隱藏

void __fastcall TForm1::myImageMouseDown(TObject *Sender,TMouseButton Button,
TShiftState Shift, int X, int Y)
{
*Sender->Visible =false;
}
不是這樣做嗎

Stallion
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-22 14:14:23 IP:211.22.xxx.xxx 未訂閱
插個花~
看見Sender的型態沒?是TObject為所有物件之父,物件導向有另一個特性「多型」,你要先將他轉換成Timage的型態才可!物件導向的觀念應該再加強一下!
TImage *aImage;

aImage = (TImage *)Sender;
aImage->Visible =false;
===================引 用 brange 文 章===================
harpist 謝謝您的說明
大約了解你的意思
你所說事件處裡函式參數
Sender就是觸發的物件
我有試著去讓它動作
但就是不行耶
如 當我按下那個Image時 要讓它隱藏

void __fastcall TForm1::myImageMouseDown(TObject *Sender,TMouseButton Button,
TShiftState Shift, int X, int Y)
{
*Sender->Visible =false;
}
不是這樣做嗎

brange
一般會員


發表:6
回覆:9
積分:3
註冊:2007-07-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-12 14:09:34 IP:61.61.xxx.xxx 訂閱
轉換Timage型態 這一步大約明白了
但請問一下
當程式執行到一半時 指定好的事件可以取消嗎
就比如在某個狀態下 才需要讓這個Image物件去指定給某個事件
又當無此狀態之下時 Image這個物件所指定的事件不要去動作或取消指定事件
Stallion
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-08-12 14:35:39 IP:211.22.xxx.xxx 未訂閱
觸發的事件不是只有在Object Inspector裡面指定,在程式執行中,運用事先預備做好的函式指定給接受訊息物件的事件進入點如(On Click等,另外利用函式指標也可達成動態呼叫不同事件處理函式的功能。
P.S.另外一問一答,請不要在一個主題內連環問其他問題,以免與主題不符,謝謝!
===================引 用 brange 文 章===================
轉換Timage型態 這一步大約明白了
但請問一下
當程式執行到一半時 指定好的事件可以取消嗎
就比如在某個狀態下 才需要讓這個Image物件去指定給某個事件
又當無此狀態之下時 Image這個物件所指定的事件不要去動作或取消指定事件
系統時間:2024-05-04 10:23:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!