利用程式碼新增的物件 如何使用Events |
尚未結案
|
brange
一般會員 發表:6 回覆:9 積分:3 註冊:2007-07-04 發送簡訊給我 |
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 發送簡訊給我 |
首先請參閱如何編輯程式碼。
<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 發送簡訊給我 |
這個方法我試了好幾次 才知道它在搞什麼 但現在又有問題了 就是: 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 發送簡訊給我 |
||
brange
一般會員 發表:6 回覆:9 積分:3 註冊:2007-07-04 發送簡訊給我 |
||
brange
一般會員 發表:6 回覆:9 積分:3 註冊:2007-07-04 發送簡訊給我 |
||
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
插個花~
看見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 發送簡訊給我 |
||
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
觸發的事件不是只有在Object Inspector裡面指定,在程式執行中,運用事先預備做好的函式指定給接受訊息物件的事件進入點如(On Click等,另外利用函式指標也可達成動態呼叫不同事件處理函式的功能。
P.S.另外一問一答,請不要在一個主題內連環問其他問題,以免與主題不符,謝謝! ===================引 用 brange 文 章=================== 轉換Timage型態 這一步大約明白了 但請問一下 當程式執行到一半時 指定好的事件可以取消嗎 就比如在某個狀態下 才需要讓這個Image物件去指定給某個事件 又當無此狀態之下時 Image這個物件所指定的事件不要去動作或取消指定事件 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |