2010-03-22 3 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

+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

1

Я не могу придумать, почему было бы много способов показать немодальный диалог. Зачем вам нужно продолжать взаимодействие с веб-браузером, пока отображается диалоговое окно немодальной печати?

Если вы хотите, чтобы начать печать с помощью программы, но нужно пользователю выбрать принтер, используйте:

ExecWB(OLE_CMDID_PRINT, OLECMDEXECOPT_PROMPTUSER); 
+1

Вы хорошо не читали сообщение. ExecWB (OLE_CMDID_PRINT, OLECMDEXECOPT_PROMPTUSER); покажет немодальный диалог печати. Это означает, что пока отображается диалоговое окно печати, пользователь может продолжить взаимодействие с программой. И это не то, что я хочу! Итак, как мне заставить отображать диалоговое окно MODAL? (это означает, что диалог печати является модальным для моей программы, а не для веб-браузера!) – Steve

+0

ОК, я всегда использую DONTPROMPTUSER! Вы пытались просто отключить веб-браузер, когда вы это делаете? – frogb

Смежные вопросы