Oh Panoramiciens de peu de foi, que vous n'ayez pas cru que KGF.dll ait déjà prévu cette opération !
Yannick aime ce message
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
Sujet: re Lun 24 Mai 2021 - 3:59
Je m'en retourne de ce pas prier pour sainte Kgf mère de toute les dlls
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Kgf et Imprimante Lun 24 Mai 2021 - 9:12
Mince alors, je l'avais loupée celle-la... Un grand merci seigneur Klaus, ça va m'être bien utile !
PS J'ai modifié un peu ma sub du début qui donne grâce à Klaus un tas de renseignements sur les imprimantes installées et qui ne laisse plus traîner de messages vides dans la file d'attente après exécution. Avec un exemple d'appel (liste des imprimantes installées)
Code:
DIM i%: FONT_SIZE 0,10 Pr_Infos(0,"") PRINT " Total = "+str$(Pr_nb%)+" imprimantes :": PRINT FOR i% = 1 TO Pr_nb%: PRINT Pr_Lst$(i%): NEXT i% END
SUB Pr_Infos(orient%,prn$) ' Caractéristiques d'une imprimante ' orient% = 0 Portrait, = 1 Paysage ' prn$ = "": imprimante par défaut ' sinon nom de l'imprimante (pour essais) ' par exemple "Microsoft XPS Document Writer" impression virtuelle ' dans un fichier .XPS ' Dans les paramètres des fonctions, le positionnement initial doit être fait en ' valeurs absolues: distances par rapport aux bords gauche et haut de la feuille ' A4, sans tenir compte des marges non imprimables. ' Les couleurs sont à exprimer au format BGR (en non pas RGB): B*256*256+G*256+R DLL_ON "C:\PANORAMIC\KGF\KGF.dll" IF VARIABLE("phnd%") = 0 THEN DIM phnd% IF VARIABLE("chnd%") = 0 THEN DIM chnd% IF VARIABLE("Pr_res%") = 0 THEN DIM Pr_res% IF VARIABLE("Pr_nb%") = 0 THEN DIM Pr_nb%: ' nombre d'imprimantes installées IF VARIABLE("Pr_lst$()") = 0 THEN DIM Pr_lst$(10): ' liste des imprimantes IF VARIABLE("Pr_def$") = 0 THEN DIM Pr_def$: ' nom imprimante par défaut IF VARIABLE("Pr_px%") = 0 THEN DIM Pr_px%: ' pixels par mm (600 dpi) IF VARIABLE("Pr_lt%") = 0 THEN DIM Pr_lt%: ' largeur totale IF VARIABLE("Pr_ht%") = 0 THEN DIM Pr_ht%: ' hauteur totale IF VARIABLE("Pr_mg%") = 0 THEN DIM Pr_mg%: ' marge gauche IF VARIABLE("Pr_mh%") = 0 THEN DIM Pr_mh%: ' marge haut IF VARIABLE("Pr_lu%") = 0 THEN DIM Pr_lu%: ' largeur utile IF VARIABLE("Pr_hu%") = 0 THEN DIM Pr_hu%: ' hauteur utile
DIM_LOCAL res%,i% IF prn$ <> "": ' autre que l'impàrimante par défaut Pr_res%=DLL_CALL4("PrinterManager",10,ADR(phnd%),ADR(chnd%),ADR(prn$)) END_IF ' Nom de l'imprimante par défaut LIST 850: HIDE 850 Pr_res% = DLL_CALL1("GetPrinterNames",HANDLE(850)): ' -> liste des imprimantes Pr_nb% = COUNT(850) Pr_def$ = ITEM_READ$(850,Pr_res%): ' imprimante par défaut FOR i% = 1 TO Pr_nb%: Pr_Lst$(i%) = ITEM_READ$(850,i%): NEXT i% DELETE 850 ' Orientation portrait (0) ou paysage (1) Pr_res% = DLL_CALL4("PrinterManager",4,ADR(phnd%),ADR(chnd%),orient%): ' orientation Pr_res% = DLL_CALL4("PrinterManager",1,ADR(phnd%),ADR(chnd%),0): ' init ' Dimensions sans les marges, en pixels: ' ATTENTION: Les dimensions sont actualisées en fonction de l'option orientation ! ' ========== Pr_lt% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),3,0,0): ' largeur totale Pr_ht% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),4,0,0): ' hauteur totale IF orient% = 0 Pr_px% = Pr_ht%/297: ' pixels par mm, à l'impression en 600 dpi ELSE Pr_px% = Pr_lt%/297: ' idem (paysage) END_IF ' Marges non imprimables: décalage en pixels à soustraire gauche et haut: Pr_mg% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),1,0,0): ' marge gauche Pr_mh% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),2,0,0): ' marge haut ' Dimensions utiles, en pixels: IF Pr_mg% = 0 OR Pr_mh%= 0: ' cas imprimante virtuelle (PDFCreator) Pr_mg% = 75: Pr_mh% = 75: ' forçage comme imprimante réelle Pr_lu% = Pr_lt% - 2*Pr_mg%: Pr_hu% = Pr_ht% - 2*Pr_mh% ELSE Pr_lu% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),7,0,0): ' largeur utile Pr_hu% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),8,0,0): ' hauteur utile END_IF ' Suppression du message vide créé dans la file d'attente imprimante: res% = DLL_CALL4("PrinterManager",7,ADR(phnd%),ADR(chnd%),0) DLL_OFF END_SUB
(dont 2 imprimantes physiques, Samsung et HP)
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Kgf et Imprimante Lun 24 Mai 2021 - 14:16
Excellent, JL35 !
Regarde la nouvelle version de KGF.dll que je viens de publier. On peut maintenant spécifier les coordonnées et les dimensions en pixels (défaut, comme avant) ou en millimètres, et on peut changer cela à volonté en cours d'impression, même sur la même page !
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Kgf et Imprimante Lun 24 Mai 2021 - 14:36
Encore une fois merci Klaus, je vais engranger ça tout de suite.
J'aime bien toutes les possibilités et facilités d'impression (entre autres !) offertes par Kgf.dll, finalement pas mal de mes programmes se terminent ainsi: une impression sur une feuille A4.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Kgf et Imprimante Lun 24 Mai 2021 - 14:39
Oui, pour moi aussi. Et ce qui est intéressant, c'est qu'on peut mélanger des traits ou formes pour dessiner des formulaires, des graphismes et images, tout ça avec du texte. On peut vraiment composer une page comme celle d'un magazine.
Il ne reste plus qu'à faire un IDE de conception de page d'impression...
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
Sujet: re Lun 24 Mai 2021 - 15:59
Voilà, mon livre de prières est à jour.
lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
Sujet: Re: Kgf et Imprimante Mar 1 Juin 2021 - 19:34
bonsoir à tous
@Klaus
J'essaye d'imprimer un fichier txt, et j'ai une erreur à la ligne 104 du programme ci joint.(ligne de DLL_call6 du printerprinttext)
Peux tu STP me dire ce qui cloche.
Merci.
Bonne soirée
Code:
DIM dll$, res%, phnd%, chnd%, txt$, pol$, sz%, attr$, cl%, clsz%, x%, y%, R, G, B ,toto$ , fichier$ , titre$ dim passage ,f$ , coulsiz% dll$ = "KGF.dll" label final , impression ,retour DLL_ON dll$
dim a$
retour: passage=passage+1 if passage=1 alpha 50 top 50,50 caption 50, "Saisir le nom du fichier " color 50 ,0,224,255 font_size 50, 15
edit 51 top 51,50 left 51,350 height 51, 30
alpha 52 top 52,150 caption 52, "Saisir le Titre " color 52 ,160,160,255 font_size 52, 15
edit 53 top 53,150 left 53,350 height 53, 30
button 55 top 55,250 left 55,400 caption 55, "Impression on_click 55, impression
button 56 top 56,250 left 56,200 caption 56 ,"Fin" on_click 56 , final end_if
end
impression: f$=text$ (51)
if file_exists (f$) =0 message "Le fichier n'existe pas" goto retour end_if a$=text$(53) if a$="" message "il faut saisir un titre" goto retour end_if ' Initialisation impression pour Titre *******************
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
Sujet: Re: Kgf et Imprimante Mer 2 Juin 2021 - 14:05
Bonjour à tous.
@Papydall.
Merci pour ta réponse rapide, mais il y a 2 choses.
La première, c'est que sur l’exemple de Klaus sur KGF.CHM il y a bien une virgule, c'est donc une petite erreur.
la deuxième j'ai donc enlevé la Virgule, et cette fois j'ai un autre message.
Merci pour les prochaines réponses
Bonne après midi
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Kgf et Imprimante Jeu 3 Juin 2021 - 11:30
Tu as mis le doigt sur un bug dans cette fonction. Ce bug a été introduit en V9.49 lors de la prise en compte des mesures en pixels et en millimètres. Ceci est corrigé. Recharge la DLL.
Cependant, il y avait un certain nombre d'incohérences dans ton code. Voici une verison modifiée et annotée pour signaler les changements que j'ai apportés:
Code:
DIM dll$, res%, phnd%, chnd%, txt$, pol$, sz%, attr$, cl%, clsz%, x%, y%, R%, G%, B% ,toto$ , fichier$ , titre$ : ' R, G, B en integer ! dim passage ,f$ , coulsiz% dll$ = "KGF.dll" label final , impression ,retour DLL_ON dll$
dim a$
retour: passage=passage+1 if passage=1 alpha 50 top 50,50 caption 50, "Saisir le nom du fichier " color 50 ,0,224,255 font_size 50, 15
edit 51 top 51,50 left 51,350 height 51, 30
alpha 52 top 52,150 caption 52, "Saisir le Titre " color 52 ,160,160,255 font_size 52, 15
edit 53 top 53,150 left 53,350 height 53, 30
button 55 top 55,250 left 55,400 caption 55, "Impression" on_click 55, impression
button 56 top 56,250 left 56,200 caption 56 ,"Fin" on_click 56 , final end_if
end
impression: f$=dir_current$+""+text$ (51)
if file_exists (f$) =0 message "Le fichier n'existe pas: "+f$ +chr$(13)+chr$(10)+dir_current$ goto retour end_if a$=text$(53) if a$="" message "il faut saisir un titre" goto retour end_if ' Initialisation impression pour Titre *******************
' ************************************************************ file_open_read 1,f$ x% = 250: y% = 200 : ' <======= initialiser le positionnement ici, hors de la boucle !
while file_eof(1) <> 1 file_readln 1, a$
attr$ = "BAXAY": ' gras, positionnement en absolu R% = 0: G% = 255: B% = 0 : ' <===== en integer ! clsz% = cl% + sz% : ' <====== ????????? inutile, pas utilisé ! ' x% = 250: y% = 200 <======= ne pas réinitialiser ici ! pol$ = "Arial" sz% = 12 coulsiz% = ((B%*256+G%)*256+R%)*256 + sz% : ' <====== R, G, B en integer, ajout de sz%
txt$=a$
y% = y% + 45 x%=200
' Préparation impression de txt$ res% = DLL_call6("PrinterPrintText",adr(txt$),adr(pol$),adr(attr$),coulsiz%,adr(x%),adr(y%))
end_while
' Clôture et lancement impression res% = DLL_call4("PrinterManager",3,ADR(phnd%),ADR(chnd%),0): ' fermer et imprimer
TERMINATE
end
final: terminate end
Dernière édition par Klaus le Jeu 3 Juin 2021 - 14:27, édité 1 fois
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Kgf et Imprimante Jeu 3 Juin 2021 - 13:22
Bonjour Klaus J’aime aussi apporter ma petite aide. Dans ton dernier code(qui est celui de lepetitmarocain et que tu as modifié), la 1ère ligne comporte une erreur : la virgule avant ' R, G, B … qui est en fait un deux-points : La ligne 37 :
Code:
Caption 55, "Impression
Ajouter un guillemet à la fin
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Kgf et Imprimante Jeu 3 Juin 2021 - 14:27
Merci, Papydall. J'ai intégré cela dans le code ci-dessus...
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
Sujet: re Jeu 3 Juin 2021 - 14:44
Merci Klaus, je file me mettre à jour.
lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
Sujet: Re: Kgf et Imprimante Jeu 3 Juin 2021 - 19:31
Bonsoir à tous.
@Klaus.
Merci d'avoir modifié mon programme, que je vais mettre de coté pour avoir un exemple supervisé par le spécialiste
@Papydall
Merci d'avoir vu que j'avais mis une virgule de trop, qui a fait qu' une erreur à été découverte pas Klaus.
Quand tout le monde s'y met, les informations et les modifs fonctionnent comme il faut.