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

如何把視窗"關閉"...程式卻留在工作列繼續的工作

答題得分者是:RedSnow
goodfeel1001
一般會員


發表:10
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-20 20:54:33 IP:220.135.xxx.xxx 未訂閱
Dear 各位前輩~ 小弟我正在撰寫...toush panpel 驅動程式...目前發生一個問題...請問我要如何寫一個程式就像... EX: 1‧我們都有用過MSN嗎?...現在假如它(指MSN)在DESKTOP上面執行..而我不想在DESKTOP上看到它...請注意是按"X"喔(表示USER即將結束執行)...MSN它就會把視窗放在右下角...等到使用者確定把右下角工作列的MSN關閉..它才真正的結束工作... 2‧TRAYICON的元件我已經使用過了....不過好像沒什麼效果ㄝ...>__<... goodfeel1001
RedSnow
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-20 21:55:47 IP:61.217.xxx.xxx 未訂閱
goodfeel1001 您好:    這個動作可以透過攔截系統訊息 (WndProc 及 Application->OnMessage) 來處理,攔截對象是 WM_SYSCOMMAND 與 SC_CLOSE,攔截到之後做您想要的處理,不要將訊息交還給系統處理即可。      7 天天敲鍵盤 v 時時按滑鼠 8
goodfeel1001
一般會員


發表:10
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-21 11:19:44 IP:211.23.xxx.xxx 未訂閱
Dear RedSnow~ 小弟愚昧..可以麻煩您..寫得更詳細點ㄇ?... goodfeel
haman
中階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-21 11:54:22 IP:211.76.xxx.xxx 未訂閱
TrayIcon的話我的做法是…
bool CloseThis = false;    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
        if(CloseThis == false)                //判斷是否關閉
        {
                TrayIcon1->Minimize();
                CanClose = false;
        }
}    void __fastcall TForm1::N3Click(TObject *Sender)
{
        CloseThis = true;                   //離開
        Form1->Close();
}    void __fastcall TForm1::N13Click(TObject *Sender)
{
        TrayIcon1->Restore();//顯示
}
==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@
goodfeel1001
一般會員


發表:10
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-21 12:17:18 IP:211.23.xxx.xxx 未訂閱
Dear haman~ 您的方法不錯...但是如果我要寫的是...toush screen driver...萬一有使用者是按"X"喔(表示user 將暫時結束DESKTOP Form 的執行)... PS: 1 ‧因為TOUSH SCREEN 會被使用者...可能不段地..被碰觸....TOUSH SCREEN就像是一個平面式的滑鼠....我寫的unility..會在DESKTOP的畫面佔用很大的空間...所以必須...提供一個機制....停留在右下角的工作列上....(這情形很像是雅虎奇摩即時通或者是MSN)的情況 ********************************************************************** 這個動作可以透過攔截系統訊息 (WndProc 及 Application->OnMessage) 來處理,攔截對象是 WM_SYSCOMMAND 與 SC_CLOSE,攔截到之後做您想要的處理,不要將訊息交還給系統處理即可。 ********************************************************************** 所以想請問各位前輩...上面RedSnow所寫的東西...可以寫得詳細點ㄇ?... GOODFEEL
RedSnow
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-21 12:53:34 IP:59.115.xxx.xxx 未訂閱
goodfeel1001 您好:    以下範例中的 GoHide() 是一個虛擬的自定函式,請您自行代換成您要處理的動作:
// 於 .h 檔案中:
private:
    void __fastcall WndProc(TMessage &Message);
    void __fastcall AppMessage(tagMSG &Msg, bool &Handled);    //-------------------------------------
// 於 .cpp 檔案中:
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    Application->OnMessage  = AppMessage;
}    // 這一段可以捕捉到 Windows Taskbar 及點擊 "程式左上角圖示" 後的系統選單中
// 將程式 "最小化" 與 "關閉" 的動作
void __fastcall TMainForm::AppMessage(tagMSG &Msg, bool &Handled)
{
    if (Msg.message == WM_SYSCOMMAND) {
        if (Msg.wParam == SC_MINIMIZE || Msg.wParam == SC_CLOSE) {
            GoHide(NULL);  // 自定函式
            Handled = true;
        }
    }
}    // 這一段可以捕捉到 System Menu (程式右上角的 "_" 與 "x" 小按鈕) 中
// 將程式 "最小化" 與 "關閉" 的動作
void __fastcall TMainForm::WndProc(Messages::TMessage& Message)
{
    if(Message.Msg == WM_SYSCOMMAND) {
        if (Message.WParam == SC_MINIMIZE || Message.WParam == SC_CLOSE) {
            GoHide(NULL);  // 自定函式
            return;
        }
    }        TForm::WndProc(Message);
}
7 天天敲鍵盤 v 時時按滑鼠 8
goodfeel1001
一般會員


發表:10
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-21 13:40:05 IP:211.23.xxx.xxx 未訂閱
Dear RedSnow~ 喔..原來是這樣..非常感激您的幫助...我已經把問題解決了..謝謝您喔...^___________^....我會繼續努力的....感恩.... goodfeel
系統時間:2024-05-09 7:48:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!