Showing posts with label MDI Child Form. Show all posts
Showing posts with label MDI Child Form. Show all posts

Tuesday, July 10, 2012

MDI Application 啟動時檢查命令列參數並開啟 MDI Child Form (C++ Builder)

在MDI Application 啟動時檢查命令列參數並開啟 MDI Child Form。
在程式啟動時,若於 MDI Form 尚未建立完成時,例如Constructro, OnCreate, OnShow 等函數開啟 MDI Child Form 會產生以下錯誤:

Cannot create form. No MDI forms are currently active.

MDI Child Form 必須等 MDI Form 物件建立之後才可開啟。

這個問題有二個解決方法:參考來源:http://www.delphigroups.info/3/4/437727.html


法一:增加自建訊息(Message)

1. 增加一個自建設息,例如:APPWM_CHECKPARAMS

2. 在 MDI Form 的 Constructor 送出這個訊息

PostMessage(Handle, APPWM_CHECKPARAMS, 0, 0);

3. 覆寫 MDIForm 的 WndProc,若 MDIForm收到 APPWM_CHECKPARAMS 則檢查命令列參數並開啟 MDI Chile Form。

void __fastcall TForm1::WndProc(TMessage &Message)

{
    if( Message.Msg == APPWM_CHECKPARAMS )
    {
        // check for the filename here, opening child windows if needed...
    }
    else
        TForm::WndProc(Message);
    }
}


法二:在 OnPaint

(參考來源)

在程式中增加一個布林變數,判斷OnPaint是否為第一次執行。若是第一次則檢查命令列參數並開啟 MDI Chile Form。但因為每次 OnPaint 是都必須判斷,不是好的方法。

[Qt] 執行檔需要哪些 Dll?

 1. 使用 Qt  的 windeployqt.exe 工具 (在 C:\Qt\Qt5.14.1\5.14.1\msvc2017\bin\)。   a. 把執行檔 myProgram.exe 放在某個資料夾。   b. 在檔案總管這個資料夾按 Shift 和滑鼠右鍵,開啟 Po...