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

如何不讓程式被移出螢幕?

尚未結案
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-14 12:58:01 IP:211.72.xxx.xxx 未訂閱
請問我要怎麼做,才能讓程式不被使用者移出螢幕外呢? -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-16 00:36:57 IP:211.76.xxx.xxx 未訂閱
不被移出screen的話用mousemove配合Screen->Width跟Screen->Height就行了吧? ==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-16 02:56:23 IP:210.64.xxx.xxx 未訂閱
這個方法無效吧? 移動程式時,是用滑鼠拉著 Form 的 Title Bar 在移動, 這並不會被 Form 的 MouseMove 事件收到阿 @@    我在想,是否有事件或是有方法可以偵測到使用者正在移動我的程式呢? 若是可以的話就一切好辦了  --
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-16 21:38:06 IP:61.230.xxx.xxx 未訂閱
chtai 您好:    透過重載 Form 的 WndProc 程序,然後在其內檢查 WM_WINDOWPOSCHANGING 訊息,即可檢查視窗位置與重設視窗位置。 7 天天敲鍵盤 v 時時按滑鼠 8
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-16 22:31:52 IP:211.74.xxx.xxx 未訂閱
感謝 RedSnow 大哥回應, 不好意思,您說的東西我從來沒碰過,不知該怎麼下手, 能否麻煩您寫個例子讓我學習學習呢 ? -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁 發表人 - chtai 於 2005/10/16 22:35:35
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-16 22:59:21 IP:61.217.xxx.xxx 未訂閱
chtai 您好:    以下範例請參考:
// 於 .h 檔案中:
private:
    void __fastcall WndProc(TMessage& Message);    // 於 .cpp 檔案中:
void __fastcall TForm1::WndProc(TMessage& Message)
{
    switch(Message.Msg) {
        case WM_WINDOWPOSCHANGING: {
            WINDOWPOS *WinPos = (WINDOWPOS*)(Message.LParam);                // 若視窗上端位置高於螢幕頂端,則設為頂部貼齊
            if (WinPos->y < 0) WinPos->y = 0;                // 若視窗左側位置超過螢幕左沿,則設為左側貼齊
            if (WinPos->x < 0) WinPos->x = 0;                // 若視窗底端位置超過螢幕底端,則設為底部貼齊
            if ((WinPos->y   WinPos->cy) > Screen->Height) WinPos->y = Screen->Height-WinPos->cy;                // 若視窗右側位置超過螢幕右沿,則設為右側貼齊
            if ((WinPos->x   WinPos->cx) > Screen->Width) WinPos->x = Screen->Width-WinPos->cx;                break;
        }
        default:
            break;
    }        TForm::WndProc(Message);
}
7 天天敲鍵盤 v 時時按滑鼠 8
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-16 23:14:39 IP:211.74.xxx.xxx 未訂閱
又學了一招 ! 感謝 RedSnow 大哥 :) 每次上 Delphi K.Top 都會有不一樣的收獲,真是太好了 -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-18 17:11:20 IP:210.64.xxx.xxx 未訂閱
RedSnow 大哥您好, 感謝您回答我"如何不讓程式移出螢幕"的問題。 看到您的解法之後,又引起了我的一些疑問。 既然在 WndProc 裡頭可以先對一些 Message 處理,那是否有 "滑鼠進入以及離開程式" 的 Message 呢? 因為我剛好也得對滑鼠進入及離開程式做些處理,想說若是可以都在 WndProc 裡頭處理掉,那就太好了 :) 謝謝您 -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-18 22:50:35 IP:61.217.xxx.xxx 未訂閱
chtai 您好:
引言:既然在 WndProc 裡頭可以先對一些 Message 處理,那是否有 "滑鼠進入以及離開程式" 的 Message 呢? 因為我剛好也得對滑鼠進入及離開程式做些處理,想說若是可以都在 WndProc 裡頭處理掉,那就太好了 :)
我做過類似的動作,但是效果不怎麼好,有時會收不到 MouseLeave 的訊息,我建議您還是多花一點功夫,在 Mouse Hook 上面著手會比較穩當些。 7 天天敲鍵盤 v 時時按滑鼠 8
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-01 14:12:28 IP:203.70.xxx.xxx 未訂閱
最後我是透過檢查 CM_MOUSELEAVE 與 CM_MOUSEENTER 訊息,來偵測滑鼠是否離開或進入程式界面。 不過這兩個訊息似乎是 BCB 自定義的,在 MSDN 裡頭找不到。 -- http://www.csie.nctu.edu.tw/~chtai/software.php 好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
系統時間:2024-04-28 17:12:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!