1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| Constructor tImpression.INIT;
(* CREATION DU CONTEXTE DE PERIPHERIQUE D'IMPRESSION - INITIALISATION DES CHAMPS *)
Var c : Array [0..255] of Char; (* CHAINE "device=" DANS LE FICHIER WIN.INI *)
NomDriver, NomDevice, NomPort : pChar; (* NOMS DU DRIVER, DU PERIPHERIQUE ET DU PORT DE SORTIE *)
Begin
tObject.INIT;
(* DETERMINATION DE L'IMPRIMANTE PAR DEFAUT *)
StrCopy(SectionIni,'Windows');
StrCopy(EntreeIni,'device');
GetProfileString(SectionIni,EntreeIni,',,',c,SizeOf(c));
NomDevice:=c;
NomDriver:=StrPos(c,','); NomDriver[0]:=#0; Inc(NomDriver);
NomPort:=StrPos(NomDriver,','); NomPort[0]:=#0; Inc(NomPort);
(* CREATION DU CONTEXTE DE PERIPHERIQUE *)
DC:=CreateDC(NomDriver,NomDevice,NomPort,Nil);
(* CALCUL DU NOMBRE DE PIXELS PAR POUCE *)
if DC <> 0
then
dy:=GetDeviceCaps(DC,LogPixelsY);
End;
Function tImpression.IMPRIMER_F119 (hWindow : hWnd) : Boolean;
(* IMPRESSION DU F-119 *)
Var AncienCurseur : hCursor; (* ANCIEN CURSEUR *)
AncienMode : Integer; (* ANCIENNE UNITE D'ECRAN *)
AncienAlignement : Word; (* ANCIEN ALIGNEMENT DU TEXTE *)
DI : tDocInfo; (* INFORMATIONS UTILES A LA FONCTION StartDoc *)
AdresseBitmap : Pointer; (* ADRESSE DU CONTENU DE LA BITMAP *)
Erreur : Integer; (* RESULTAT DE FONCTION DE COMMANDE D'IMPRESSION *)
Titre : Array [0..255] of Char; (* TITRE DU MESSAGE D'ERREUR *)
Texte : Array [0..255] of Char; (* TEXTE DU MESSAGE D'ERREUR *)
c : Array [0..255] of Char; (* CHAINE DE TRAVAIL *)
Begin
IMPRIMER_F119:=True;
if DC <> 0
then
begin
if F119.Handle = 0
then (* CHARGEMENT DE L'IMAGE DU F-119 *)
CHARGEMENT_IMAGE_F119(hWindow);
if F119.Handle <> 0
then
begin
AncienCurseur:=SetCursor(LoadCursor(0,idc_Wait));
(* STRUCTURE DE DEMARRAGE DE LA SESSION D'IMPRESSION *)
DI.cbSize:=SizeOf(tDocInfo);
DI.lpszDocName:=NomApplication;
DI.lpszOutput:=nil;
(* INITIALISATION DU CONTEXTE DE PERIPHERIQUE *)
AncienMode:=SetMapMode(DC,mm_LoMetric);
AncienAlignement:=SetTextAlign(DC,ta_Left or ta_BaseLine or ta_NoUpdateCP);
(* SESSION D'IMPRESSION *)
if (StartDoc(DC,DI) > 0) and (StartPage(DC) > 0)
then
begin
(* IMAGE DU DOCUMENT *)
AdresseBitmap:=GlobalLock(F119.Handle);
SetDIBitsToDevice(DC,0,0,F119.EnTete^.BMIHeader.BIWidth,F119.EnTete^.BMIHeader.BIHeight,
0,0,0,F119.EnTete^.BMIHeader.BIHeight,
AdresseBitmap,F119.EnTete^,DIB_RGB_Colors);
(* DONNEES ECRITES *)
{Bla bla bla}
(* IMPRESSION DE LA PAGE *)
Erreur:=EndPage(DC);
if Erreur >= 0
then
begin
Erreur:=0;
EndDoc(DC);
end
else (* ERREUR RENVOYEE PAR L'IMPRIMANTE *)
begin
case Erreur of
sp_Error : StrCopy(Texte,'Erreur générale de l''imprimante');
sp_AppAbort,sp_UserAbort : StrCopy(Texte,'Impression stoppée');
sp_OutOfDisk : StrCopy(Texte,'Espace disque insuffisant pour l''impression d''arrière-plan');
sp_OutOfMemory : StrCopy(Texte,'Mémoire insuffisante pour l''impression d''arrière-plan');
end;
AbortDoc(DC);
StrCopy(Titre,'Erreur d''impression du F-119');
MessageBox(hWindow,Texte,Titre,mb_IconHand or mb_Ok);
IMPRIMER_F119:=False;
end;
GlobalUnlock(F119.Handle);
end
else (* ERREUR D'INITIALISATION DE L'IMPRIMANTE *)
begin
AbortDoc(DC);
StrCopy(Texte,'Erreur d''initialisation de l''imprimante');
StrCopy(Titre,'Erreur d''impression du F-119');
MessageBox(hWindow,Texte,Titre,mb_IconHand or mb_Ok);
IMPRIMER_F119:=False;
end;
(* RESTAURATION DU CONTEXTE DE PERIPHERIQUE *)
SetMapMode(DC,AncienMode);
SetTextAlign(DC,AncienAlignement);
SetCursor(AncienCurseur);
end
else (* IMAGE DU F-119 NON CHARGEE *)
IMPRIMER_F119:=False;
end
else (* CONTEXTE DE PERIPHERIQUE NON CREE *)
begin
StrCopy(Texte,'Contexte de périphérique non créé.'#10#10#13);
StrCopy(Titre,'Cela peut provenir d''un manque de mémoire ou bien de l''absence d''imprimante définie par défaut.');
StrCat(Texte,Titre);
StrCopy(Titre,'Erreur d''impression du F-119');
MessageBox(hWindow,Texte,Titre,mb_IconHand or mb_Ok);
IMPRIMER_F119:=False;
end;
End;
Destructor tImpression.DONE;
(* DESTRUCTION DU CONTEXTE DE PERIPHERIQUE D'IMPRESSION ET DES FONTES *)
Begin
if DC <> 0
then
DeleteDC(DC);
tObject.DONE;
End; |
Partager