2010-03-22 38 views
1

我發現很多方法可以使TWebBrowser顯示一個無模式的打印對話框,但是如何讓它顯示一個模態對話框?我想打印一個html頁面,這就是爲什麼我需要模態對話框。TWebBrowser模態打印對話框?

我真的很感激你的想法。

謝謝!

回答

0

尤里卡!我解決了它。

方法如下:

當你顯示無模式的打印對話框,您可以禁用在Delphi中調用窗體。然後,您可以使用OnCommandStateChange事件來檢測用戶何時打印或取消打印對話框。

示例代碼:

WebBrowser1.OnCommandStateChange:=WebBrowser1CommandStateChange; 
    WebBrowser1.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, 
    vaIn, vaOut); 

procedure TForm1.WebBrowser1CommandStateChange(Sender: TObject; Command: 
    Integer; Enable: WordBool); 
begin 
    if Enabled then 
    Enabled:=false 
    else begin 
    Enabled:=true; 
    WebBrowser1.OnCommandStateChange:=nil; 
    end; 
end; 

我懇請你們這些人來測試我的解決辦法,因爲我不知道這個代碼的可靠性。

謝謝!

+1

我有類似的問題。測試你的解決方案:問題是WebBrowser1CommandStateChange在打印對話框顯示前被觸發2次。然後在關閉時再次發射。 – kobik 2011-12-05 08:59:23

+0

請參見此[回覆](http://stackoverflow.com/a/8438967/960757),問題的措辭不同,但是['OLECMDEXECOPT_PROMPTUSER'](http://msdn.microsoft.com/en-us/library /aa769937%28v=vs.85%29.aspx)命令選項與['PRINT_WAITFORCOMPLETION'](http://msdn.microsoft.com/en-us/library/aa769937%28v=vs.85%29.aspx )標誌將使對話框模態。 – TLama 2011-12-09 00:31:01

1

我想不出爲什麼會有很多方法顯示無模式對話的原因。爲什麼要在顯示無模式打印對話框時繼續與Web瀏覽器交互?

如果要通過程序來啓動打印,但需要用戶選擇打印機,使用:

ExecWB(OLE_CMDID_PRINT, OLECMDEXECOPT_PROMPTUSER); 
+1

你沒看過這篇文章。 ExecWB(OLE_CMDID_PRINT,OLECMDEXECOPT_PROMPTUSER);將顯示一個無模式的打印對話框。這意味着在顯示打印對話框時,用戶可以繼續與程序進行交互。這不是我想要的!那麼如何讓它顯示一個MODAL打印對話框? (這意味着打印對話框是模式對我的程序,而不是網頁瀏覽器!) – Steve 2010-03-22 20:04:50

+0

好的,我總是使用DONTPROMPTUSER!你是否嘗試過簡單地禁用網頁瀏覽器,而你呢? – frogb 2010-03-23 18:25:47