我發現很多方法可以使TWebBrowser顯示一個無模式的打印對話框,但是如何讓它顯示一個模態對話框?我想打印一個html頁面,這就是爲什麼我需要模態對話框。TWebBrowser模態打印對話框?
我真的很感激你的想法。
謝謝!
我發現很多方法可以使TWebBrowser顯示一個無模式的打印對話框,但是如何讓它顯示一個模態對話框?我想打印一個html頁面,這就是爲什麼我需要模態對話框。TWebBrowser模態打印對話框?
我真的很感激你的想法。
謝謝!
尤里卡!我解決了它。
方法如下:
當你顯示無模式的打印對話框,您可以禁用在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;
我懇請你們這些人來測試我的解決辦法,因爲我不知道這個代碼的可靠性。
謝謝!
我想不出爲什麼會有很多方法顯示無模式對話的原因。爲什麼要在顯示無模式打印對話框時繼續與Web瀏覽器交互?
如果要通過程序來啓動打印,但需要用戶選擇打印機,使用:
ExecWB(OLE_CMDID_PRINT, OLECMDEXECOPT_PROMPTUSER);
我有類似的問題。測試你的解決方案:問題是WebBrowser1CommandStateChange在打印對話框顯示前被觸發2次。然後在關閉時再次發射。 – kobik 2011-12-05 08:59:23
請參見此[回覆](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