Impression automatique avec un TWebBrowser

Résolu
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 - 12 janv. 2005 à 17:22
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 - 13 janv. 2005 à 10:17
Bonjour,

Je tourne en rond depuis quelque temps sur un petit problème...

Dans mon application j'ai un WebBrowser dont je me sert pour afficher une image. Une fois celle-ci affichée je l'imprime.

Je fait ceci :
WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT );

Ce qui a pour effet de m'afficher la boîte dialogue de l'imprimante et me permet de lancer mon impression.

Mon problème est que je voudrais pouvoir choisir mon imprimante (car ce n'est pas celle par défaut), mettre l'orientation de la page et choisir les marge par le code. J'aimerai savoir comment modifier les paramètres d'impression ainsi que l'imprimante par code.

Merci d'avance
Nelson

P.S : j'ai essayé les composants TPrinters et ça n'a rien donné.

4 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 janv. 2005 à 09:28
Alors voici deux fonctions que j'utilise. Une pour récupérer
l'imprimante par defaut et l'autre pour changer l'imprimante par
défaut. Je pense qu'en regardant de plus pres tu pourras changer
egalement les marges et orientation.



{------------------------------------------------------------------------------}


{ Permet de mettre une imprimante par defaut. }


{------------------------------------------------------------------------------}


procedure SetDefaultPrinter(PrinterName : String);



var


szPrinterName, szIniInfo, szSection : PChar;


Arr_Tmp : Array[0..64] of Char;



begin



Try


{Réservation de l'espace mémoire}


GetMem(szPrinterName,SizeOf(Char) * 256);


GetMem(szIniInfo,SizeOf(Char) * 256);


GetMem(szSection,10) ;


{Récupération des informations sur l'imprimante}


StrPCopy(szPrinterName,PrinterName);


GetProfileString('DEVICES',szPrinterName,nil,szIniInfo,254) ;



{Si on trouve les infos de l imprimante}


If szIniInfo^ <> #0 then


begin


StrCat(szPrinterName,',') ;


StrCat(szPrinterName,szIniInfo) ;


{On Change l imprimante}


WriteProfileString('Windows','DEVICE',szPrinterName) ;


{On informe les applications du changement}


StrCopy(Arr_Tmp, 'windows');


SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@Arr_Tmp));


// StrCopy(szSection,'Windows') ;


// Ne fonctionne pas avec Win98/ Me : PostMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(szSection)) ;


end;



{On libère l'espace memoire}


FreeMem(szPrinterName,SizeOf(Char) * 256) ;


FreeMem(szIniInfo,SizeOf(Char) * 256) ;


FreeMem(szSection,10) ;


except



{Pas d'espace mémoire}


on E: EOutOfMemory do ShowMessage(E.Message) ;


{Erreur de pointeur}


on E: EInvalidPointer do ShowMessage(E.Message) ;


end;


end;



{------------------------------------------------------------------------------}


{ Permet de récupérer l'imprimante par defaut. }


{------------------------------------------------------------------------------}


function GetDefaultPrinter : String;



var


szCurrentPrinter : PChar;



begin



Try


{Réservation de l'espace mémoire}


GetMem(szCurrentPrinter,SizeOf(Char) * 256);


{Information sur l'imprimante par défaut}


GetProfileString('Windows', 'DEVICE', '', szCurrentPrinter, 254);


{On renvoie le nom de l'imprimante par défaut}


Result := Copy(szCurrentPrinter, 1, Pos(',', szCurrentPrinter)-1);


{On vide la mémoire}


FreeMem(szCurrentPrinter, SizeOf(Char) * 256) ;


except


Result := '';


end;


end;



Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
12 janv. 2005 à 22:08
Je connais pas tres bien le composant WebBrowser pourrais tu me dire comment tu fais pour imprimer avec et je verrais si ma soluce pourra te servir.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 1
13 janv. 2005 à 08:30
Et bien en utilisant la commande :

WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER );

Tu imprime directement le contenu de ton webBrowser sans même demander à l'utilisateur. En mettant OLECMDEXECOPT_PROMPTUSER comme 2ème paramètre tu vas afficher la boîte de dialogue d'impression.

Le seul problème de l'impression sans demande à l'utilisateur c'est qu'il prend tout par défaut (imprimante, marges, orientation).

Ce que j'aimerais c'est utiliser cette commande, mais qu'avant je puisse modifier les paramètres d'impression.

Voilà.

Nelson
0
neo557 Messages postés 34 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 30 août 2006 1
13 janv. 2005 à 10:17
Merci pour ton code.

avec ceci je peux effectivement changer d'imprimante par défaut quand bon me semble.

Je n'ai pas encore vérifier comment je peux orienter le papier et écrire les marges en code mais j'ai remarqué que avec la fonction que tu m'a donné il prend non seulement l'imprimante choisie comme imprimante par défaut mais il reprend également tous les paramètres de l'imprimante...

Je veux dire que je n'ai qu'a effectuer mes réglages dans les options de l'imprimante sous windows et ils seront pris en compte sous delphi.

C'est nickel merci beuacoup !!!

Nelson
0
Rejoignez-nous