2010-03-22 6 views
1

J'ai trouvé plusieurs façons de faire en sorte que TWebBrowser affiche une boîte de dialogue d'impression non modale, mais comment la rendre modale? Je voudrais imprimer une page html, c'est pourquoi j'ai besoin du dialogue modal.Boîte de dialogue d'impression modale TWebBrowser?

J'apprécierais vraiment vos idées sur celui-ci.

Merci!

Répondre

0

Eureka! Je l'ai résolu.

Voici comment:

Lorsque vous affichez la boîte de dialogue d'impression modales, vous pouvez désactiver le formulaire d'appel à Delphes. Vous pouvez ensuite utiliser l'événement OnCommandStateChange pour détecter lorsque l'utilisateur imprime ou annule la boîte de dialogue Imprimer.

code Exemple:

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; 

Je vous prie de bien vouloir les gens à tester ma solution, comme je ne suis pas sûr de la fiabilité de ce code.

Merci!

+1

J'ai un problème similaire. testé votre solution: le problème est 'WebBrowser1CommandStateChange' est déclenché 2 fois avant l'affichage de la boîte de dialogue d'impression. puis se déclenche à nouveau quand il se ferme. – kobik

+0

Voir cette [réponse] (http://stackoverflow.com/a/8438967/960757), la question est formulée différemment mais le ['OLECMDEXECOPT_PROMPTUSER'] (http://msdn.microsoft.com/fr-fr/library /aa769937%28v=vs.85%29.aspx) option de commande avec ['PRINT_WAITFORCOMPLETION'] (http://msdn.microsoft.com/fr-fr/library/aa769937%28v=vs.85%29.aspx Le drapeau rendra le dialogue modal. – TLama

1

Je ne peux pas penser à une raison pour laquelle il y aurait beaucoup de façons d'afficher une boîte de dialogue non modale. Pourquoi voudriez-vous continuer à interagir avec le navigateur Web pendant l'affichage d'une boîte de dialogue d'impression sans modèle?

Si vous voulez lancer l'impression par le programme, mais il faut à l'utilisateur de sélectionner l'imprimante, utilisez:

ExecWB(OLE_CMDID_PRINT, OLECMDEXECOPT_PROMPTUSER); 
+1

Vous n'avez pas bien lu le message. ExecWB (OLE_CMDID_PRINT, OLECMDEXECOPT_PROMPTUSER); montrera une boîte de dialogue d'impression non modale. Cela signifie que lorsque la boîte de dialogue d'impression est affichée, l'utilisateur peut continuer à interagir avec le programme. Et ce n'est pas ce que je veux! Alors, comment faire pour afficher une boîte de dialogue d'impression MODAL? (ce qui signifie que la boîte de dialogue d'impression est modale pour mon programme, pas pour le webbrowser!) – Steve

+0

OK, j'utilise toujours DONTPROMPTUSER! Avez-vous essayé de désactiver simplement le webbrowser pendant que vous faites cela? – frogb

Questions connexes