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 是都必須判斷,不是好的方法。

No comments:

Post a Comment

phpMyAdmin 無法存取 MariaDB 10 的解決方法

 [Reference]  https://www.qnap.com/zh-tw/how-to/faq/article/%E7%82%BA%E4%BB%80%E9%BA%BC%E7%84%A1%E6%B3%95%E5%9C%A8-phpmyadmin-%E5%AD%98%E5%8...