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

怎麼移動一個Form,讓另一個Form跟著?

尚未結案
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-23 17:10:51 IP:163.28.xxx.xxx 未訂閱
我的程式有兩個Form,Form1和Form2 我想移動Form1時,Form2也跟著移動(相對位置不變) 就像WinAMP那樣,該怎麼做比較好呢? 我有參考過lcsboy大大的文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20073 不過~~是攔截Form1的WM_MOVE嗎? 請各位幫個忙吧~~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-23 23:34:02 IP:61.221.xxx.xxx 未訂閱
引言: 我的程式有兩個Form,Form1和Form2 我想移動Form1時,Form2也跟著移動(相對位置不變) 就像WinAMP那樣,該怎麼做比較好呢? 我有參考過lcsboy大大的文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20073 不過~~是攔截Form1的WM_MOVE嗎? 請各位幫個忙吧~~
arisaka_matsuri 你好:
(1)應該是抓 WM_MOVING 吧
( >
// >>>>>>>>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-24 09:45:42 IP:211.75.xxx.xxx 未訂閱
攔WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-24 12:14:27 IP:163.28.xxx.xxx 未訂閱
感謝RaynorPao和jcjroc的提示 問題已經解決囉~~ 順便把 href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20073">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20073 改寫(真的是必殺技,偶比較喜歡這個版本) < class="code"> // Unit1.h class TForm1 : public TForm { __published: // IDE-managed Components private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(); TWndMethod OldWinProc; void __fastcall Form1Moving(TMessage &Message); }; // Unit1.cpp #include "Unit2.h" __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Form2 = new TForm2(this); Form2->Show(); Form2->Width = Width; Form2->Height = Height; Form2->Left = Left; Form2->Top = Height Top; OldWinProc = Form1->WindowProc; Form1->WindowProc = Form1Moving; } __fastcall TForm1::~TForm1() { delete Form2; } void __fastcall TForm1::Form1Moving(TMessage &Message) { if(Message.Msg == WM_MOVING) { Form2->Left = Form1->Left; Form2->Top = Form1->Height Form1->Top; } else OldWinProc(Message); } 發表人 - arisaka_matsuri 於 2003/10/24 12:19:23
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-24 13:57:11 IP:211.75.xxx.xxx 未訂閱
這樣不等於多做好多事? 第一你要在LBUTTOMDOWN時先記下WindowPostion 再來於MOUSEMOVE時判斷是否LBUTTON 有按住 然後比對Window Postion 的Offset值 這種做法只在於當Mouse按在任何一區時移動Window好用,也就事說Window的移動是由我們自己決定時. 但如果是正常的Window(有Caption)上,移動的功能是Windows自己做出的,此時只要攔WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,就知道Window被移動 不過任你用何種方式移動Window終歸會呼叫SetWindowPos,而此API會引發WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-24 17:18:26 IP:163.28.xxx.xxx 未訂閱
jcjroc大大說的是~ 不過,既然我今天在BCB下寫程式 我不太在乎要攔什麼比較好 從原始碼來看,還蠻清爽的,道理又說的通 速度慢一點、或是>>的目的就好 畢竟我真正>< face="Verdana, Arial, Helvetica">引言: 不過任你用何種方式移動Window終歸會呼叫SetWindowPos,而此API會引發WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED 我想,我瞭解你的意思了 如果哪天寫 >
系統時間:2024-05-08 7:22:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!