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

請問主視窗內是否可get到子視窗image元件上mouse的訊息

尚未結案
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-07 17:30:29 IP:210.243.xxx.xxx 訂閱
請問一下我原本在主視窗內有一個image元件,所以去檢查其image元件上是否有滑鼠按下,"主視窗"程式碼可以這樣的敘述,

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//do something~
}
但當我建立子視窗,將image元件搬到子視窗去,直接在"主視窗"去得知子視窗內的image元件上是否有滑鼠按下,若在"主視窗"內加上程式碼如下:

void __fastcall TMDIChild::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//do something~
}

會出現這樣的錯誤訊息
[C Error] ImgMain.cpp(581): E2316 _fastcall TMDIChild::Image1MouseDown(TObject *,TMouseButton,TShiftState,int,int) is not a member of TMDIChild

我的問題是,如何讓主視窗可以知道子視窗的image元件上是否有滑鼠移動或按下,並得知滑鼠座標。
我知道這樣會有問題,可是卻不知道怎麼樣修正,請各位先進指點一下~
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-08 12:28:07 IP:210.243.xxx.xxx 訂閱
不好意思~貼了那段錯誤訊息,可能會模糊了問題的焦點,再補充說明一下~
其實我最主要是想問~在主視窗內是否可即時get到子視窗內的image元件上MouseDown,或MouseMove或MouseUp的訊息,並且得知滑鼠的X,Y座標,然後在主視窗內做出之後需對應的動作。
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-08 16:05:16 IP:203.70.xxx.xxx 未訂閱
將所有MDIChildForm上TImage的event property
指定同 一個處理程序就好了....
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-08 16:44:26 IP:210.243.xxx.xxx 訂閱
感謝JOW大的建議~不過還是不太了解你的意思.....~"~
請問可以說明再詳細一點嗎?還是可以舉個例子~
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-13 21:08:23 IP:123.195.xxx.xxx 訂閱
這個問題我自己解決了,把經驗分享一下

先說明一下原本要在主視窗內get到子視窗image元件上mouse訊息的用意:
是因為我在主視窗內有做toolbar,然後toolbar有一些繪圖的動作,像是畫矩形、圓形等等。
且原先開始是把image元件放在主視窗內,那麼要得知滑鼠是否有在image元件上按下,程式如下即可,且toolbar的訊息可直接傳入。

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//do something~
}

可是當image元件搬到子視窗之後,很多問題就產生了,像是toolbar的訊息要傳到子視窗,且我原本的演算法都寫在主視窗內,要整個搬到子視窗去工程浩大。所以才想問問"主視窗內是否可get到子視窗image元件上mouse的訊息"。
但找了很多文章,並在經過自己實驗的結果發現,若要對每張開啟且放在子視窗的圖做更改,將演算法放在主視窗的方法並不好。
因為會變成多個子視窗共用主視窗的演算後的data,而不是各個子視窗擁有各自演算後的data。
但若是把演算法放在子視窗,那麼每個子視窗可以都用同一個演算法運算,但是每個子視窗擁有各自算出的data,接著主視窗要get某個子視窗的運算結果時,去拮取正在active的視窗資料便可。

詳情可參考"程式設計俱樂部"內keyword"MDI多重視窗畫面處理"一文
http://www.programmer-club.com/pc2020v5/forum/ShowOneTextN.asp?board_pc2020=cb&id=13475&mode=keyword&szKeyword=µøµ¡&parentid=13412&selectmethod=subject

希望這些資料可以幫助有需要的網友
frankfang
一般會員


發表:0
回覆:2
積分:5
註冊:2006-08-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-06 00:33:35 IP:203.70.xxx.xxx 訂閱
可是我把Image1搬到MdiChild後   event還是回到MdiParent上啊

void __fastcall TMainForm::FormClick(TObject *Sender)
{
Form1->Parent = this;
Image1->Parent = Form1;
Image1->Align = alClient;
Form1->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Image1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
ShowMessage( "Image1 Mouse Down" );
}
//---------------------------------------------------------------------------
系統時間:2024-03-29 16:08:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!