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

請問,程式中,如何快速得知 滑鼠點到 哪一個Form的抬頭?或Focus

答題得分者是:syntax
harktrip
一般會員


發表:30
回覆:30
積分:12
註冊:2007-04-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-21 09:59:14 IP:61.221.xxx.xxx 訂閱
例如...我有 MyForm[x] ,假設x是0~19,有20個MDIChild Form

但使用者操作時,會亂點, 我又要做TreeView的相對節點圖案改變

問題來了,程式如何做,可以在點到該Form時,就知道被點選的Form不一樣了,
讓程式可以去更改TreeView的節點圖案?

各位兄弟幫個忙..這很傷腦筋的
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-22 03:37:22 IP:61.64.xxx.xxx 訂閱
連這種問題你都很傷腦經
那接下來你要如何走下去?

1.思考是滑鼠點在 form 上才算,還是 form 上的元件都算
2.思考是否有現成的事件,如 On Click, OnFocused,或是必須使用組合處理 On MouseEnter On MouseUp/ On MouseDown On MouseLeave 之類的
3.寫出程式

就這樣,不難,難在於,你沒有去試試看(有的話,程式碼呢?),就來問

===================引 用 harktrip 文 章===================
例如...我有 MyForm[x] ,假設x是0~19,有20個MDIChild Form

但使用者操作時,會亂點, 我又要做TreeView的相對節點圖案改變

問題來了,程式如何做,可以在點到該Form時,就知道被點選的Form不一樣了,
讓程式可以去更改TreeView的節點圖案?

各位兄弟幫個忙..這很傷腦筋的
編輯記錄
syntax 重新編輯於 2008-01-22 03:38:06, 註解 無‧
syntax 重新編輯於 2008-01-22 03:38:31, 註解 forbidden‧
harktrip
一般會員


發表:30
回覆:30
積分:12
註冊:2007-04-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-22 08:34:56 IP:61.221.xxx.xxx 訂閱
各Form建立的程式
Edit_Form[Page_Code] = new TForm(Application);
Edit_Form[Page_Code]->Parent=Form1;
Edit_Form[Page_Code]->FormStyle= fsMDIChild;
Edit_Form[Page_Code]->DoubleBuffered = true;
Edit_Form[Page_Code]->ClientHeight=480;
Edit_Form[Page_Code]->ClientWidth=640; Edit_Form[Page_Code]->OnClose= My_CloseForm;
Edit_Form[Page_Code]->Tag= Page_Code;
Edit_Form[Page_Code]->Caption=str1;
Edit_Form[Page_Code]->OnMouseMove =MyMouseMove_Form;
Edit_Form[Page_Code]->OnMouseDown =MyMouseClick_Form;
Edit_Form[Page_Code]->OnClick =MyClick;
Edit_Form[Page_Code]->OnMouseUp = MyMouseUp ;
Edit_Form[Page_Code]->OnClose=MyFormClose;

Form建立後,各Form有各自的各種物件在上面,不過相同滑鼠事件,都指向同一個
TImage_MMI *Parts_Image= new TImage_MMI(Edit_Form[Page_Code]);
Parts_Image->Parent=Edit_Form[Page_Code];
Parts_Image->PopupMenu=PopupPart;
Parts_Image->OnMouseDown = MyMouseDown;
Parts_Image->OnMouseMove = MyMouseMove;
Parts_Image->OnMouseUp = MyMouseUp;
Parts_Image->OnDragDrop = MyEndDrag;
Parts_Image->Tag= Label_Index;

加上MyClick
void _fastcall TForm1::MyClick(TObject *Sender)
{
// i=dynamic_cast(Sender)->Tag;
Application->MessageBoxA("點到了", "訊息提示", IDOK);
}
問題是這樣的,
.點到各Form的空白處,可以觸發MyClik,但點到Form的抬頭,是觸發啥事件?


各位兄弟幫幫忙.感恩啦







===================引 用 syntax 文 章===================
1.思考是滑鼠點在 form 上才算,還是 form 上的元件都算
2.思考是否有現成的事件,如 On Click, OnFocused,或是必須使用組合處理 On MouseEnter On MouseUp/ On MouseDown On MouseLeave 之類的
3.寫出程式

就這樣,不難,難在於,你沒有去試試看(有的話,程式碼呢?),就來問 ---> 這很傷人耶...會來問,當然是困擾許久,動手N遍了


編輯記錄
harktrip 重新編輯於 2008-01-22 09:02:51, 註解 無‧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-01-22 15:07:07 IP:61.64.xxx.xxx 訂閱
傷到你,很抱歉

但是,就算你做 1 萬遍,沒有貼上來,那要如何知道你做了哪些東西?問題在哪?

你可以想想,你會打電話到醫院看病,還是親自去醫院看病?

沒東西,沒搞頭!

2.思考是否有現成的事件 --> 你是思考了,但是應該會發現「點到Form的抬頭,是觸發啥事件?」這個沒有現成的

所以必須自己處理--> 抓取 WM_MOUSEMOVE WM_NCxBUTTONDOWN

顯然你沒有訊息處理的知識喔!趕快去加強囉!

你的程式,是沒有什麼問題,但是,相信你會很累的在維護這所有的關係上,每新增、刪除一個元件,就必須維護滑鼠事件
所以你必須改變你的切入點,相信你會發現簡單又快的方法

===================引 用 harktrip 文 章===================
各Form建立的程式
Edit_Form[Page_Code] = new TForm(Application);
Edit_Form[Page_Code]->Parent=Form1;
Edit_Form[Page_Code]->FormStyle= fsMDIChild;
Edit_Form[Page_Code]->DoubleBuffered = true;
Edit_Form[Page_Code]->ClientHeight=480;
Edit_Form[Page_Code]->ClientWidth=640; Edit_Form[Page_Code]->OnClose= My_CloseForm;
Edit_Form[Page_Code]->Tag= Page_Code;
Edit_Form[Page_Code]->Caption=str1;
Edit_Form[Page_Code]->OnMouseMove =MyMouseMove_Form;
Edit_Form[Page_Code]->OnMouseDown =MyMouseClick_Form;
Edit_Form[Page_Code]->OnClick =MyClick;
Edit_Form[Page_Code]->OnMouseUp = MyMouseUp ;
Edit_Form[Page_Code]->OnClose=MyFormClose;

Form建立後,各Form有各自的各種物件在上面,不過相同滑鼠事件,都指向同一個
TImage_MMI *Parts_Image= new TImage_MMI(Edit_Form[Page_Code]);
Parts_Image->Parent=Edit_Form[Page_Code];
Parts_Image->PopupMenu=PopupPart;
Parts_Image->OnMouseDown = MyMouseDown;
Parts_Image->OnMouseMove = MyMouseMove;
Parts_Image->OnMouseUp = MyMouseUp;
Parts_Image->OnDragDrop = MyEndDrag;
Parts_Image->Tag= Label_Index;

加上MyClick
void _fastcall TForm1::MyClick(TObject *Sender)
{
// i=dynamic_cast
問題是這樣的,
.點到各Form的空白處,可以觸發MyClik,但點到Form的抬頭,是觸發啥事件?


各位兄弟幫幫忙.感恩啦







===================引 用 syntax 文 章===================
1.思考是滑鼠點在 form 上才算,還是 form 上的元件都算
2.思考是否有現成的事件,如 On Click, OnFocused,或是必須使用組合處理 On MouseEnter On MouseUp/ On MouseDown On MouseLeave 之類的
3.寫出程式

就這樣,不難,難在於,你沒有去試試看(有的話,程式碼呢?),就來問 ---> 這很傷人耶...會來問,當然是困擾許久,動手N遍了


編輯記錄
syntax 重新編輯於 2008-01-22 15:13:03, 註解 無‧
系統時間:2024-04-25 23:57:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!