Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| DLL Print | |
| | |
Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: DLL Print Sam 19 Nov 2011 - 14:18 | |
| Hello Klaus, J'essaye d'utiliser ta DLL et j'ai un gros plantage lors de l’exécution de ceci: - Code:
-
DLL_ON "Print.dll"
LABEL FinProg
DIM res% DIM imp_fct%,imp_hnd%,canv_hnd% DIM imp_font$:imp_font$="Courier New" DIM imp_text$:imp_text$="Essai d'impression" DIM nom$:nom$=string$(255," ")
DIM OPEN_JOB% : OPEN_JOB% = 1 DIM CLOSE_JOB% : CLOSE_JOB%= 3 DIM DEF_FONT% : DEF_FONT% = 5 DIM DEF_PAGE% : DEF_PAGE% = 4 DIM DEF_TITRE% : DEF_TITRE%= 6
DIM PRN_TEXT% : PRN_TEXT% = 1
' choisir une imprimante res% = DLL_call2("SelectWindowsPrinter",adr(nom$),len(nom$)) if res%=0 THEN GOTO FinProg nom$=trim$(nom$) message "Selection de l'imprimante "+nom$+" retour:"+str$(res%) ' je ne pige pas la valeur de retour de SelectWindowsPrinter
' ouverture job d'impression res%=DLL_CALL4("PrinterManager",OPEN_JOB%,adr(imp_hnd%),adr(canv_hnd%),0) message "ouverture : "+str$(res%) if res%=0 THEN GOTO FinProg
' orientation de la page res%=DLL_CALL4("PrinterManager",DEF_PAGE%,adr(imp_hnd%),adr(canv_hnd%),0) : ' Orientation portrait message "orientation:"+str$(res%) if res%=0 THEN GOTO FinProg
' titre de la page res%=DLL_CALL4("PrinterManager",DEF_TITRE%,adr(imp_hnd%),adr(imp_text$),len(imp_text$)) if res%=0 THEN GOTO FinProg message " TITRE OK: "+str$(res%)
' definition du texte en rouge (codage en RGB? ) , gras res% = DLL_call6("PrinterFunction",DEF_FONT%,imp_hnd%,canv_hnd%,ADR(imp_font$),1,256) message str$(res%)
' impression du texte res%= = DLL_call6("PrinterFunction",PRN_TEXT%,imp_hnd%,canv_hnd%,ADR(imp_text$),len(imp_text$),1) message str$(res%)
' fermeture res% = DLL_call4("PrinterManager",CLOSE_JOB,imp_handle%,canv_hnd%,0)
DLL_OFF END
FinProg: DLL_OFF Message "FinProg" TERMINATE
Où est mon erreur ? EDIT:bon faut rajouter adr() pour les handles mais j'ai toujours un plantage... Manifestement il y a quelque chose qui cloche: soit il y a des erreurs dans la doc (comme PrinterManager pour le passage de l'adresse des variables pour les handles) soit j'ai pas compris le principe d'appel aux fonctions... Pourtant j'ai fais des tests en large, en long et en travers... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 16:09 | |
| Je lance un appel : Quelqu'un a déjà réussi à faire fonctionner cette DLL ?.... | |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 17:57 | |
| Hallo Nardo, hier mein Testprogramm. Es druckt ein Formblatt mit Rahmen. Severin Bonjour Nardo, Voici mon programme de test. Elle imprime un formulaire avec cadre. Severin Hello Nardo, Here's my test program. It prints a form with frame. Severin - Code:
-
' Druckertest ******************************************************************
dim DRUCK_i% dim DRUCK_j% dim phnd% dim chnd% dim dh dim dv dim lg% dim ht% dim DRUCK_horz dim Druck_vert dim DRUCK_horz_mm dim Druck_vert_mm
dim pi2 dim fact dim s$ dim DRUCK_WIN_s1$
dim DRUCK_X% dim DRUCK_y% dim t% dim p% dim cf% dim cb% dim n% dim DRUCK_Breite% dim DRUCK_Hoehe% DIM DRUCK_horz_FAK DIM DRUCK_vert_FAK
dim chform%
REM **************************************************************************** REM DRUCKER VORBEREITUNG ******************************************************* REM **************************************************************************** REM REM LADEN DER Print.DLL REM dll_on "Print.dll"
REM **************************************************************************** REM ERSTELLEN DES TITEL FÜR DEN DRUCKER-MANAGER VON WINDOWS ******************** REM **************************************************************************** DRUCK_WIN_s1$ = "Testdruck Print.DLL" REM DRUCK_i% = dll_call4("PrinterManager",6,adr(phnd%),adr(DRUCK_WIN_s1$),len(DRUCK_WIN_s1$))
REM **************************************************************************** REM STARTEN DES DRUCKVORGANGES ************************************************* REM **************************************************************************** REM DRUCK_i% = dll_call4("PrinterManager",1,adr(phnd%),adr(chnd%),0) REM REM REM **************************************************************************** REM PRÜFEN DER BEDRUCKBAREN BREITE UND HÖHE REM **************************************************************************** REM REM REM REM 8 = Rückkehr mit der Dimension des Blattes REM REM opt1% = Code Rückgabewert REM 1 PHYSICALOFFSETX eine horizontale Verschiebung in Pixel REM 2 PHYSICALOFFSETY vertikalen Versatz in Pixel REM 3 PHYSICALWIDTH Breite in Pixeln REM 4 PHYSICALHEIGHT Höhe in Pixeln REM 5 LOGPIXELSX horizontale Auflösung in Pixel / Zoll REM 6 LOGPIXELSY vertikale Auflösung in Pixel / Zoll REM 7 HORZRES Breite in Pixeln REM 8 VERTRES nützlich Höhe in Pixeln REM 9 HORZSIZE Breite in Millimeter REM 10 VERTSIZE Nutzhöhe in Millimetern REM REM **************************************************************************** REM ERMITTELN DER PAPIERBREITE in mm ******************************************* REM **************************************************************************** REM DRUCK_Breite% = 9 :REM 9 Breite in Millimeter REM DRUCK_horz_mm = dll_call6("PrinterFunction",8,adr(phnd%),adr(chnd%),DRUCK_Breite%,0,0) REM Print "Papierbreite ";DRUCK_horz_mm;" mm" REM REM **************************************************************************** REM ERMITTELN DER PAPIERBREITE in Pixel **************************************** REM **************************************************************************** REM DRUCK_Breite% = 7 :REM 7 Breite in Pixel REM DRUCK_horz = dll_call6("PrinterFunction",8,adr(phnd%),adr(chnd%),DRUCK_Breite%,0,0) REM Print "Papierbreite ";DRUCK_horz;" pixel" REM DRUCK_horz_FAK = DRUCK_horz/DRUCK_horz_mm REM Print "1 mm = ";DRUCK_horz/DRUCK_horz_mm REM REM **************************************************************************** REM ERMITTELN DER PAPIERHÖHE in mm ********************************************* REM **************************************************************************** REM DRUCK_Hoehe% = 10 :REM 10 Höhe in Millimetern REM DRUCK_vert_mm = dll_call6("PrinterFunction",8,adr(phnd%),adr(chnd%),DRUCK_Hoehe%,0,0) REM Print "Papierhöhe ";DRUCK_vert_mm;" mm" REM REM **************************************************************************** REM ERMITTELN DER PAPIERHÖHE in Pixel ****************************************** REM **************************************************************************** REM DRUCK_Hoehe% = 8 :REM 8 Höhe in Pixel REM DRUCK_vert = dll_call6("PrinterFunction",8,adr(phnd%),adr(chnd%),DRUCK_Hoehe%,0,0) REM Print "Papierhöhe ";DRUCK_vert;" pixel" REM DRUCK_vert_FAK = DRUCK_vert/DRUCK_vert_mm REM Print "1 mm = ";DRUCK_vert/DRUCK_vert_mm REM REM **************************************************************************** REM A4 BLATT Außenrahmen drucken - Farbe -Hintergrund -Linienstärke einstellen REM **************************************************************************** REM cf% = 0 :REM Farbe Zeichnung REM cb% = -2 :REM transparentem Hintergrund REM n% = 11 :REM Linienstärke n% = 1 REM DRUCK_i% = dll_call6("PrinterFunction",6,adr(phnd%),adr(chnd%),cf%,cb%,n%) REM REM **************************************************************************** REM A4 BLATT Außenrahmen drucken - oberen linken Ecke des Rechtecks REM ****************************************************************************
n% = 0 :REM absoluter NULLPUNKT = 0
DRUCK_X% =DRUCK_horz_FAK *20 :REM Links HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK * 5 :REM OBERER RAND 5mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM **************************************************************************** REM A4 BLATT Außenrahmen drucken - Breite und Höhe des Rechtecks REM ****************************************************************************
REM p% = 0 :REM Zeichnen einer Linie = 0 p% = 1 :REM Zeichnen eines Rechteckes = 1 REM p% = 2 :REM Zeichnen einer Ellipse = 2
lg% = DRUCK_horz-DRUCK_X%-DRUCK_vert_FAK * 5 :REM DRUCKBARE BREITE - Rand links 5mm
ht% = DRUCK_vert-DRUCK_y%-DRUCK_y% :REM DRUCKBARE HÖHE
DRUCK_i% = dll_call6("PrinterFunction",2,adr(phnd%),adr(chnd%),p%,lg%,ht%)
REM **************************************************************************** REM A4 BLATT MIT RAHMEN DRUCKEN - ALLE DRUCKER - REM ****************************************************************************
cf% = 0 :REM Farbe Zeichnung
cb% = -2 :REM transparentem Hintergrund
n% = 10 :REM Linienstärke n% = 1
DRUCK_i% = dll_call6("PrinterFunction",6,adr(phnd%),adr(chnd%),cf%,cb%,n%)
REM **************************************************************************** REM 1.Querlinie unter Kopftext ************************************************* REM ****************************************************************************
n% = 0 :REM absoluter NULLPUNKT
DRUCK_X% =DRUCK_horz_FAK *20 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *23 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Zeichnen einer Linie = 0 REM Zeichnen eines Rechteckes = 1 REM Zeichnen einer Ellipse = 2
p% = 0 :REM Rechteck
lg% = DRUCK_horz-DRUCK_X%-DRUCK_vert_FAK * 5 :REM DRUCKBARE BREITE
ht% = 0 :REM DRUCKBARE HÖHE
DRUCK_i% = dll_call6("PrinterFunction",2,adr(phnd%),adr(chnd%),p%,lg%,ht%)
REM **************************************************************************** REM Position in der 1. Senkrechte linie ****************************************
n% = 0 :REM absoluter NULLPUNKT
DRUCK_X% =DRUCK_horz_FAK *60 :REM Links HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *5 :REM LÄNGE -OBERER RAND
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Zeichnen einer Linie = 0 REM Zeichnen eines Rechteckes = 1 REM Zeichnen einer Ellipse = 2
p% = 0 :REM Rechteck
lg% = 0: REM DRUCK_horz_FAK * 60 :REM DRUCKBARE BREITE
ht% = DRUCK_vert_FAK * 18 :REM DRUCKBARE HÖHE -Oberer Rand 5mm
DRUCK_i% = dll_call6("PrinterFunction",2,adr(phnd%),adr(chnd%),p%,lg%,ht%)
REM **************************************************************************** REM Position in der 2. Senkrechte linie ****************************************
n% = 0 :REM absoluter NULLPUNKT
DRUCK_X% =DRUCK_horz_FAK *160 :REM Links HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *5 :REM LÄNGE -OBERER RAND
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Zeichnen einer Linie = 0 REM Zeichnen eines Rechteckes = 1 REM Zeichnen einer Ellipse = 2
p% = 0 :REM Rechteck
lg% = 0: REM DRUCK_horz_FAK * 160 :REM DRUCKBARE BREITE
ht% = DRUCK_vert_FAK * 18 :REM DRUCKBARE HÖHE -Oberer Rand 5mm
DRUCK_i% = dll_call6("PrinterFunction",2,adr(phnd%),adr(chnd%),p%,lg%,ht%)
REM **************************************************************************** REM 2.Querlinie unter Kopftext ************************************************* REM ****************************************************************************
n% = 0 :REM absoluter NULLPUNKT
DRUCK_X% =DRUCK_horz_FAK *20 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *50 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Zeichnen einer Linie = 0 REM Zeichnen eines Rechteckes = 1 REM Zeichnen einer Ellipse = 2
p% = 0 :REM Rechteck
lg% = DRUCK_horz-DRUCK_X%-DRUCK_vert_FAK * 5 :REM DRUCKBARE BREITE
ht% = 0 :REM DRUCKBARE HÖHE
DRUCK_i% = dll_call6("PrinterFunction",2,adr(phnd%),adr(chnd%),p%,lg%,ht%)
REM **************************************************************************** REM 3.Querlinie unten Fußteil ************************************************** REM ****************************************************************************
n% = 0 :REM absoluter NULLPUNKT
DRUCK_X% =DRUCK_horz_FAK *20 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *275 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Zeichnen einer Linie = 0 REM Zeichnen eines Rechteckes = 1 REM Zeichnen einer Ellipse = 2
p% = 0 :REM Linie
lg% = DRUCK_horz-DRUCK_X%-DRUCK_vert_FAK * 5 :REM DRUCKBARE BREITE
ht% = 0 :REM Position vom OBERER RAND
DRUCK_i% = dll_call6("PrinterFunction",2,adr(phnd%),adr(chnd%),p%,lg%,ht%)
REM **************************************************************************** REM 1. Zeile - SCHRIFT für eigene Firma einstellen ***************************** REM Oberen linken Ecke des zu druckenden Textes ********************************
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *22 :REM BREITE - HEFTRAND 20mm + Abstand
DRUCK_y% =DRUCK_vert_FAK *7 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM **************************************************************************** REM 1. Zeile - SCHRIFT für eigene Firma einstellen ***************************** REM Schriftart einstellen ******************************************************
REM Arial REM Arial Größe 10 REM Arial Größe 10, fett= 256 REM Arial Größe 10, kursiv = 512 REM Arial Größe 10, fett und kursiv, Farbe REM Arial Größe 10, fett und kursiv, Farbe REM Arial Größe 10, fett und kursiv, Farbe = 0
s$ = "Courier" :REM Name der Schriftart s$ = "Arial"
n% = 10 + 256 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM **************************************************************************** REM 1. Zeile - SCHRIFT für eigene Firma einstellen ***************************** REM Drucken des Textes *********************************************************
n% = 1 :REM transparentem Hintergrund
s$ = "Ing.-Büro XXXXX" :REM TEXTAUSGABE
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
REM **************************************************************************** REM 2. Zeile - SCHRIFT für eigene Firma einstellen ***************************** REM Position in der oberen linken Ecke des zu druckenden Textes ****************
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *21 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *12 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
s$ = "Courier" :REM Name der Schriftart s$ = "Arial"
n% = 10 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM "Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM Drucken eines Textes mit transparentem Hintergrund
n% = 1 :REM transparentem Hintergrund
REM s$ = "02345678900234567890" :REM TEXTAUSGABE Courier 10 s$ = " xxxxxxxxxxxxxxxxxxx" :REM TEXTAUSGABE max. 20 Zeichen
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
REM SCHRIFT EINSTELLEN ********************************************************* REM Position in der oberen linken Ecke des zu druckenden Textes
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *22 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *17 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Arial Größe 24, fett und kursiv, Farbe
s$ = "Arial" :REM Name der Schriftart s$ = "Arial"
n% = 10 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM "Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM Drucken eines Textes mit transparentem Hintergrund
n% = 1 :REM transparentem Hintergrund
s$ = "XXXXXXXXXXXXXX" :REM TEXTAUSGABE
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
Print len(s$)
REM **************************************************************************** REM 1. Zeile - SCHRIFT für fremd Firma einstellen ****************************** REM Oberen linken Ecke des zu druckenden Textes ********************************
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *163 :REM BREITE - HEFTRAND 20mm + Abstand
DRUCK_y% =DRUCK_vert_FAK *7 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM **************************************************************************** REM 1. Zeile - SCHRIFT für fremd Firma einstellen ****************************** REM Schriftart einstellen ******************************************************
s$ = "Arial" :REM Name der Schriftart s$ = "Arial"
n% = 10 + 256 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM **************************************************************************** REM 1. Zeile - SCHRIFT für fremd Firma einstellen ****************************** REM Drucken des Textes *********************************************************
n% = 1 :REM transparentem Hintergrund
s$ = "ING -Büro XXXXX" :REM TEXTAUSGABE
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
REM ****************************************************************************
REM **************************************************************************** REM 2. Zeile - SCHRIFT für eigene Firma einstellen ***************************** REM Position in der oberen linken Ecke des zu druckenden Textes ****************
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *161 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *12 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Arial Größe 24, fett und kursiv, Farbe
s$ = "Courier" :REM Name der Schriftart s$ = "Arial"
n% = 10 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM "Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM Drucken eines Textes mit transparentem Hintergrund
n% = 1 :REM transparentem Hintergrund
REM s$ = "02345678900234567890" :REM TEXTAUSGABE Courier 10 s$ = " xxxxxxxxxxxxxxxxxxx" :REM TEXTAUSGABE max. 20 Zeichen
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
REM SCHRIFT EINSTELLEN ********************************************************* REM Position in der oberen linken Ecke des zu druckenden Textes
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *163 :REM BREITE - HEFTRAND 20mm
DRUCK_y% =DRUCK_vert_FAK *17 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM Arial Größe 24, fett und kursiv, Farbe
s$ = "Arial" :REM Name der Schriftart s$ = "Arial"
n% = 10 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM "Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM Drucken eines Textes mit transparentem Hintergrund
n% = 1 :REM transparentem Hintergrund
REM s$ = "02345678900234567890" :REM TEXTAUSGABE Courier 10 s$ = " xxxxxxxxxxxxxxxxx5 " :REM TEXTAUSGABE
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
Print len(s$)
REM **************************************************************************** REM 1. Zeile - Mittlere ÜBERSCHRIFT einstellen ***************************** REM Oberen linken Ecke des zu druckenden Textes ********************************
n% = 0 :REM absolute n% = 0
DRUCK_X% =DRUCK_horz_FAK *70 :REM BREITE - HEFTRAND 20mm + Abstand
DRUCK_y% =DRUCK_vert_FAK *8 :REM LÄNGE -OBERER RAND 5mm +18mm
DRUCK_i% = dll_call6("PrinterFunction",4,adr(phnd%),adr(chnd%),n%,DRUCK_X%,DRUCK_y%)
REM **************************************************************************** REM 1. Zeile - ÜBERSCHRIFT einstellen ***************************** REM Schriftart einstellen ******************************************************
REM Arial REM Arial Größe 10 REM Arial Größe 10, fett= 256 REM Arial Größe 10, kursiv = 512 REM Arial Größe 10, fett und kursiv, Farbe REM Arial Größe 10, fett und kursiv, Farbe REM Arial Größe 10, fett und kursiv, Farbe = 0
s$ = "Arial" :REM Name der Schriftart s$ = "Arial"
n% = 14 + 256 :REM Schriftgröße + fett + kursiv
cf% = 0 :REM Textfarbe cf% = 255
DRUCK_i% = dll_call6("PrinterFunction",5,adr(phnd%),adr(chnd%),adr(s$),cf%,n%)
REM **************************************************************************** REM 1. Zeile - ÜBERSCHRIFT einstellen ***************************** REM Drucken des Textes *********************************************************
n% = 1 :REM transparentem Hintergrund
s$ = "MULTIMOMENTSTUDIE " :REM TEXTAUSGABE
DRUCK_i% = dll_call6("PrinterFunction",1,adr(phnd%),adr(chform%),adr(s$),len(s$),n%)
REM **************************************************************************** REM DRUCKER BEENDEN - Print.dll AUSSCHALTEN
DRUCK_i% = dll_call4("PrinterManager",3,adr(phnd%),adr(chnd%),0)
message "Der Test ist fertig!"
dll_off
REM **************************************************************************** REM **************************************************************************** terminate end | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 20:52 | |
| Merci severin pour ton exemple : il fonctionne ! il ne me reste plus qu'a comprendre ce que tu as écris ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 21:31 | |
| Nardo si tu fais une version française du programme de Severin qui a l'air bien fait, je serais intéressé par le source traduis ... | |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 21:55 | |
| Vorschlag: Wir fragen Klaus. proposition: Nous demandons à Klaus. Hallo Klaus wenn es deine Zeit erlaubt, könntest du Nardo helfen ? Severin | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 21:59 | |
| - Citation :
- ' Druckertest ******************************************************************
ça ne doit pas être le même... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 23:06 | |
| @Nardo26: J'ai regardé ton programme. J'ai relevé un bug dans ma DLL que je dois corriger: c'est dans PrinterManager choix de l'orientation. Conseil: désactiver cela pour le moment. J'ai corrigé ton programme qui marche maintenant, et les modifs sont agrémentées de commentaires. Voici le source qui marche: - Code:
-
DLL_ON "Print.dll"
LABEL FinProg
DIM res% DIM imp_fct%,imp_hnd%,canv_hnd% DIM imp_font$:imp_font$="Courier New" DIM imp_text$:imp_text$="Essai d'impression" DIM nom$:nom$=string$(255," ")
DIM OPEN_JOB% : OPEN_JOB% = 1 DIM CLOSE_JOB% : CLOSE_JOB%= 3 DIM DEF_FONT% : DEF_FONT% = 5 DIM DEF_PAGE% : DEF_PAGE% = 4 DIM DEF_TITRE% : DEF_TITRE%= 6
DIM PRN_TEXT% : PRN_TEXT% = 1
dim s$, opt%, font%
' choisir une imprimante res% = DLL_call2("SelectWindowsPrinter",adr(nom$),len(nom$)) if res%=0 THEN GOTO FinProg nom$=trim$(nom$) message "Selection de l'imprimante "+nom$+" retour:"+str$(res%) ' je ne pige pas la valeur de retour de SelectWindowsPrinter
' spécifier le titre pour le queue manager de Windows s$ = "Test Impression KGF.DLL" res% = dll_call4("PrinterManager",6,adr(imp_hnd%),adr(s$),len(s$)) message "titre : "+str$(res%) if res%=0 THEN GOTO FinProg
' titre de la page ******** titre du job d'impression - à faire ici ! ********** res%=DLL_CALL4("PrinterManager",DEF_TITRE%,adr(imp_hnd%),adr(imp_text$),len(imp_text$)) if res%=0 THEN GOTO FinProg message " TITRE OK: "+str$(res%)
' ouverture job d'impression opt% = 0 res%=DLL_CALL4("PrinterManager",OPEN_JOB%,adr(imp_hnd%),adr(canv_hnd%),adr(opt%)) message "ouverture : "+str$(res%) if res%=0 THEN GOTO FinProg
' orientation de la page *************** il y a un BUG - à corriger *************** ' res%=DLL_CALL4("PrinterManager",DEF_PAGE%,adr(nul%),adr(canv_hnd%),0) : ' Orientation portrait ' message "orientation:"+str$(res%) ' if res%=0 THEN GOTO FinProg
' titre de la page ********* c'"est le titre du job - à faire AVANT début d'impression ' res%=DLL_CALL4("PrinterManager",DEF_TITRE%,adr(imp_hnd%),adr(imp_text$),len(imp_text$)) ' if res%=0 THEN GOTO FinProg ' message " TITRE OK: "+str$(res%)
' definition du texte en rouge (codage en RGB? ) , gras ' 5 = choisir police, taille et attributs ' opt1% = index de la police ' opt2% = couleur ' -1: inchange ' couleur RGB sinon ' opt3% = somme des options ' taille de la police ' 256 = gras ' 512 = italique ' 1024 = sousligné ' 2048 = barré font% = 256 + 36 : ' gras + taille 36 res% = DLL_call6("PrinterFunction",DEF_FONT%,adr(imp_hnd%),adr(canv_hnd%),ADR(imp_font$),255,font%) message "rouge : "+str$(res%)
' impression du texte res% = DLL_call6("PrinterFunction",PRN_TEXT%,adr(imp_hnd%),adr(canv_hnd%),ADR(imp_text$),len(imp_text$),1) message "impression : "+str$(res%)
' fermeture res% = DLL_call4("PrinterManager",CLOSE_JOB%,adr(imp_hnd%),adr(canv_hnd%),0) : ' ***** et non imp_handler% ***
DLL_OFF END
FinProg: DLL_OFF Message "FinProg" TERMINATE
| |
| | | Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 23:33 | |
| Hallo Klaus, ist der Fehler auch in meinem Programm ? Machst du eine neue "Druck.dll" ?
Severin | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Sam 19 Nov 2011 - 23:39 | |
| Merci à tous ! Par contre le codage RVB à l'air d'être inversé: HEX("0000FF") j’obtiens du rouge HEX("00FF00"), du vert (normal il est au milieu...) HEX("FF0000") j'obtiens du bleu.... Juste une dernière petite question (je suis vraiment une buse pour tout ce qui concerne l'impression) : Comment faire un retour à la ligne ? j'ai essayé le CRLF mais cela ne marche pas... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 0:17 | |
| Bon, je fais juste une toute petite intervention, d'abord pour remercier JL35 pour son humour Pour Severin, même si je n'ai pas tout compris Ensuite pour Klaus / DLL / travail de correction et programme de test (du gros boulot comme d'habitude de sa part. On voit pourquoi il nous manquait temps sur le forum ... ^^) Enfin Nardo pour sa vigileance | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 1:44 | |
| Bon j'ai trouvé en repositionnant en absolu mon texte... VIVE LPRINT !!! Je crois que je vais laisser tomber l'impression en couleur des mots clés...et que cela restera en noir et blanc... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 1:59 | |
| @Severin: Der Fehler ist nicht in Deinem Programm - Du verwendest nicht Portrait/Landscape Kommandos. Dein Programm ist eine interressante Demonstration.
@Nardo26: Oui, RGB est en évidence inversé, et c'est le codage Delphi. Et je constate - et je bats ma coulpe - que ce fait n'est pas documenté dans Autres_DLL.rtf ce qui est évidemment pas très cool. A corriger donc dans la doc, ou à changer dans la DLL - je vais réfléchir à la solution à retenir.
Puis, pour le positionnement, as-tu vu que tu peux faire un positionnement relatif aussi ? Cela permet de descendre plus facilement d'une "ligne", encore que dans la conception d'impression Delphi qui est à la base de mes fonctions d'impression, ne connaît pas du tout la notion de "ligne". Avec "début d'impression" et "nouvelle page", on crée en réalité un canvas vide dans lequel on dessine des éléments graphiques, à partir de la position active (en pixels en général), et qui est par défaut dans le coin en haut à gauche. Chaque opération de dessin (forme, image, text, ...) débute à la position active et laisse la position active là où l'opération s'est terminée. La fonction de positionnement absolu ou relatif permet de déplacer la position active pour le début d'une nouvelle opération. Mais toutes les positions se valent, il n'y a pas de divisions en lignes, colonnes, caractères etc. Essaie d'écrire en gris foncé à partir de la position (10,10), puis d'écrire le même texte en noir à partir de la position (7,13), par exemple. Cela te donnera une idée des effets qu'on peut obtenir, en jouant sur les couleurs et les positions absolues ou relatives.
| |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 2:37 | |
| Oui j'ai vu Klaus, Le positionnement relatif est bien pour descendre d'une ligne mais pas pour aller en début de ligne. car il me faut connaitre la longueur en pixels de la ligne que j'ai imprimé... Ou alors faire le deplacement vertical en relatif et l'horizontal en absolu : ca commence à faire beaucoup d'appel pour simuler un CRLF... En fait j'étais parti pour faire l'impression couleur, mais vu la facon dont j'ai traiter les lignes, il me faudrait re-décomposer les lignes de code en mot à mot pour insérer les cde de couleur/atributs... (en gros défaire tout ce que j'ai fais en aval (indentation + espace) cela risque au final de ramer...
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 2:46 | |
| Suggestion: imprimer d'abord tout ce qui est d'une seule couleur, d'une même police, d'une même taille et/ou de mêmes attributs. Mais, c'est vrai, on gagnerait & avoir une fonction ou une commande permettant de spécifier à la fois tout cela. C'est une piste intéressante et je vais y réfléchir. Ce n'est pas évident car le nombre de paramètres des DLL_callx() est limité... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 2:55 | |
| C'est peut être intéressant dans certains cas mais pas pour le mien Ma moulinette fait tout le boulot avant : Mise en forme majuscule/minuscule + indentation et au final je fais un gosub en fct de l'option de sortie choisie... donc au moment du traitement de l'impression, j'ai un MEMO qui contient déjà tout le source pré-formaté. Si j'ai bien compris : l'impression telle qu'elle est définie est de type graphique. Ce qui est également gênant c'est que les valeurs de retour des DLL sont de type entier et si je veut faire par la suite des calculs de conversions (inch/pixels/cm) pour la mise en page, il me faut utiliser la division ou multiplication avec des flottants : et là, ce n'est pas compatible... Par exemple je récupère bien les param de l'imprimante (PDF Creator pour mes essais) : 600 dpi ma page fait 1927 pixels il va bien falloir faire des calculs pour connaitre l'espace que je dois laisser entre chaque ligne... Si tu essaye de diviser par 2.54 tu te fais jeter... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 10:40 | |
| L'histoire des entiers, je n'y peux rien. C'est Panoramic pour le passage de paramètres, et Delphi pour la prise en compte des valeurs. En effet, il faut des entiers pour le positionnement dans la page - un demi-pixel n'a pas de sens. Il faut donc, d'une manière ou d'une autre, faire un arrondi.
Ma réflexion sur une routine d'impression plus souple avance - ce sera disponible bientôt.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DLL Print Dim 20 Nov 2011 - 20:09 | |
| Voilà TROIS nouvelles: 1. Il n'y a pas de bug avec la fonction PrinterManager pour déterminer l'orientation de la page. Le problème vient de l'ordre chronologique dans lequel les fonctions sont appelées: aussi bien la fonction "titre du job d'impression" que la fonction "orientation de la page" doivent être appelées AVANT la fonction "début d'impression", sinon il y a un plantage, et c'est normal. Les fonctions qui affectent globalement TOUTE l'édition qu'on est en train de faire, doivent être effectuées AVANT le début de l'édition. Dont acte. 2. Il y a une nouvelle fonction d'impression de texte. Elle est puissante et permet d'économiser plusieurs appels et cas d'impression de texte. C'est: - Citation :
res% = dll_call6('PrinterPrintText",adr(text$),adr(font$),adr(attributs$),couleur_et_taille%,adr(pos_hor%),adr(pos_ver%))
On passe à cette routine: l'adresse du texte à imprimer l'adresse du nom de la police l'adresse d'une chaîne contenant les attributs (B,I,U,S) couleur et taille de la police l'adresse de la position horizontale l'adresse de la position verticale Les adresses doivent être additionnées d'un marqueur 32768 pour adresse absolue ou 16384 pour adresse relative, séparément pour horizontal et vertical. Au retour, la routine retourne la position active APRES impression ! On peut, avec cela, imprimer une colonne en série, en gardant la même valeur horizontale en absolue, et en mettant la valeur de décalage vertical en relatif dans la position verticale. On peut imprimer des ombres, en décalant légèrement horizontalement et verticalement, pour des impressions successives, et en jouant sur les nuances de couleurs. 3. la fonction PrinterFunction a un nouveau code fonction: - Code:
-
9 = retourner des valeurs utiles opt1% = code de la valeur à retourner 1 abscisse (x) de la position active 2 ordonnée (Y) de la position active 3 couleur de la police 4 couleur du fond 5 couleur de dessin 6 taille de la police
| |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 10:36 | |
| Bonjour Klaus, Merci pour la nouvelle fonction, elle devrait simplifier pas mal de chose ! 1- Je n'arrive toujours pas à définir l'oritentation. 2- Avec "PrinterPrintText" je n'arrive pas à passer à la ligne en dessous regarde ma procédure: - Code:
-
PRT_Write: IF VARIABLE("PRT_Write_car$")=0 DIM PRT_Write_i,PRT_Write_car$ DIM PRT_Attr_bold,PRT_Write_attr$ DIM PRT_Attr_str,PRT_COLOR% END_IF IF PRT_NumLigne=0 PRT_Write_car$=" " PRT_Open_value%= DLL_call6("PrinterFunction",1,adr(PRT_Open_Hnd%),adr(PRT_Open_Canvas%),ADR(PRT_Write_car$),len(PRT_Write_car$),1) END_IF PRT_Attr_bold = 0 : PRT_Attr_str = 0 FOR PRT_Write_i=1 TO LEN(Beautify_newLigne$) PRT_Write_car$=MID$(Beautify_newLigne$,PRT_Write_i,1) ' BOLD_ON / BOLD_OFF IF PRT_Write_car$=CHR$(29) PRT_Attr_bold=BIN_XOR(PRT_Attr_bold,1) ELSE ' chgt colour pour les chaine de caractères IF PRT_Write_car$=chr$(34) THEN PRT_Attr_str = BIN_XOR(PRT_Attr_str,1) PRT_COLOR% = 0 : PRT_Write_attr$=" " IF PRT_Attr_bold = 1 THEN PRT_Write_attr$ = PRT_Write_attr$+"B" : PRT_COLOR% = PRT_COLKEYW% IF PRT_Attr_str=1 THEN PRT_COLOR% = PRT_COLSTR% PRT_Open_value%= (256 * PRT_COLOR%)+PRT_FONTSIZE% PRT_Open_value% = DLL_CALL6("PrinterPrintText",ADR(PRT_Write_car$),ADR(PRT_FONTNAME$),ADR(PRT_Write_attr$),PRT_Open_value%,ADR(PRT_POSH%),ADR(PRT_POSV%)) END_IF
NEXT PRT_Write_i PRT_POSH%=PRT_Marge% PRT_POSV%=PRT_POSV%+PRT_STEP if PRT_NumLigne>=60 THEN GOSUB PRT_SautPage RETURN Sur les 2 dernières lignes avant le return, je souhaite incrémenter la position... Peux-tu m'en dire plus sur : - Citation :
- Les adresses doivent être additionnées d'un marqueur 32768 pour adresse absolue ou 16384 pour adresse relative, séparément pour horizontal et vertical.
EDIT: J'avais oublié de mettre la procedure d'init... - Code:
-
PRT_Open: DLL_ON "Print.dll" IF VARIABLE("PRT_Open_value%")=0 DIM PRT_Open_Hnd%,PRT_Open_Canvas% DIM PRT_Open_nom$:PRT_Open_nom$=STRING$(255," ")
DIM PRT_Open_value% : ' retour de fct DLL DIM PRT_Open_Opt% DIM PRT_POSH%,PRT_POSV% DIM PRT_Marge%: PRT_Marge%=150 DIM PRT_Step DIM PRT_NumLigne END_IF PRT_Step = 100 : ' a adapter en fct de l'imprimante... PRT_POSH% = PRT_Marge% PRT_POSV% = 200 PRT_NumLigne=0 ' selection de l'imprimante PRT_Open_value% = DLL_CALL2("SelectWindowsPrinter",ADR(PRT_Open_nom$),LEN(PRT_Open_nom$)) IF PRT_Open_value% = 0 DLL_OFF : Sortie_option=0 : MARK_ON 61 : RETURN END_IF PRT_Open_nom$=TRIM$(PRT_Open_nom$) ' orientation paysage : l'appel est bien AVANT l'ouverture du job et pourtant cela cela fonctionne toujours pas... PRT_Open_Opt%=1 PRT_Open_value% = DLL_CALL4("PrinterManager",PRT_FORMAT%,ADR(PRT_Open_Hnd%),ADR(PRT_Open_Canvas%),ADR(PRT_Open_Opt%)) ' Titre de l'impression IF Entree_option = 0 THEN pBeautify_fileName$ = "Clipboard.bas" PRT_Open_value% = DLL_CALL4("PrinterManager",PRT_TITLE%,ADR(PRT_Open_Hnd%),ADR(pBeautify_fileName$),LEN(pBeautify_fileName$)) ' Ouverture du job d'impression PRT_Open_Opt% = 0 PRT_Open_value% = DLL_CALL4("PrinterManager",PRT_STARTJOB%,ADR(PRT_Open_Hnd%),ADR(PRT_Open_Canvas%),ADR(PRT_Open_Opt%)) RETURN
Les constantes : - Code:
-
DIM PRT_FONTSIZE% : PRT_FONTSIZE% = 6 DIM PRT_FONTNAME$ : PRT_FONTNAME$ = "Courier New" ' PrinterManager DIM PRT_STARTJOB% : PRT_STARTJOB% = 1 DIM PRT_FORMFEED% : PRT_FORMFEED% = 2 DIM PRT_ENDJOB% : PRT_ENDJOB% = 3 DIM PRT_FORMAT% : PRT_FORMAT% = 4 DIM PRT_TITLE% : PRT_TITLE% = 6 ' Couleur impression DIM PRT_COLKEYW% : PRT_COLKEYW% = HEX("0000FF") DIM PRT_COLSTR% : PRT_COLSTR% = HEX("FF0000") PS: La doc est fausse...
Dernière édition par Nardo26 le Lun 21 Nov 2011 - 11:25, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 11:13 | |
| oeil de Lynx a encore frappé, mais bon en même temps Klaus est en train de travailler dessus... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 11:21 | |
| Ben justement ! Si ça peut aider Klaus à mettre au point sa DLL... (on a déjà +/- travaillé comme cela avec les GLIST...) Et comme à première vue, pour l'instant, je suis le seul à être intéressé par cette DLL... C'est plus facile de battre le fer pendant qu'il est encore chaud que d'attendre 6 mois pour se rendre compte que quelque chose ne vas pas dans la doc ou le programme... La preuve : klaus a mis en place une nouvelle fonction PrinterPrintText qui, je pense, va rendre bien des services ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 11:23 | |
| Oui, moi j'admire, mais bon, je n'imprime pas.. Il y a déjà ma femme pour ça evec les enfants / recettes /... moi, j'évite (tout du moins à la maison parce qu'au boulot ça m'arrive de temps en temps quand même...) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 11:38 | |
| ??????????????????? Voici une version "augmentée" de ton premier exemple. J'ai mis l'impression en paysage, et j'ai rajouté trois lignes commençant à gauche avec la même marge, décalées verticalement de 100 pixels. J'ai appliqué exactement la doc. Pour moi, ça marche. Compare ce code avec celui que tu viens de mettre en ligne, et tu verras l'usage des marqueurs "absolu" et "relatif". - Code:
-
DLL_ON "Print.dll"
LABEL FinProg
DIM res% DIM imp_fct%,imp_hnd%,canv_hnd% DIM imp_font$:imp_font$="Courier New" DIM imp_text$:imp_text$="Essai d'impression" DIM nom$:nom$=string$(255," ")
DIM OPEN_JOB% : OPEN_JOB% = 1 DIM CLOSE_JOB% : CLOSE_JOB%= 3 DIM DEF_FONT% : DEF_FONT% = 5 DIM DEF_PAGE% : DEF_PAGE% = 4 DIM DEF_TITRE% : DEF_TITRE%= 6 DIM DEF_VAL% : DEF_VAL% = 9
DIM PRN_TEXT% : PRN_TEXT% = 1
dim s$, opt%, font%, font$, attrib$, p1%, i%, x_print%, y_print%
' choisir une imprimante res% = DLL_call2("SelectWindowsPrinter",adr(nom$),len(nom$)) if res%=0 THEN GOTO FinProg nom$=trim$(nom$) ' message "Selection de l'imprimante "+nom$+" retour:"+str$(res%) ' je ne pige pas la valeur de retour de SelectWindowsPrinter
' spécifier le titre pour le queue manager de Windows s$ = "Test Impression KGF.DLL" res% = dll_call4("PrinterManager",6,adr(imp_hnd%),adr(s$),len(s$)) ' message "titre : "+str$(res%) if res%=0 THEN GOTO FinProg
' titre de la page ******** titre du job d'impression - à faire ici ! ********** res%=DLL_CALL4("PrinterManager",DEF_TITRE%,adr(imp_hnd%),adr(imp_text$),len(imp_text$)) if res%=0 THEN GOTO FinProg ' message " TITRE OK: "+str$(res%)
' orientation de la page *************** DOIT ETRE PLACE AVANT L'OUVERTURE DU JOB ! *************** res%=DLL_CALL4("PrinterManager",DEF_PAGE%,adr(imp_hnd%),adr(canv_hnd%),1) : ' Orientation paysage ' message "orientation:"+str$(res%) if res%=0 THEN GOTO FinProg
' ouverture job d'impression opt% = 0 res%=DLL_CALL4("PrinterManager",OPEN_JOB%,adr(imp_hnd%),adr(canv_hnd%),adr(opt%)) ' message "ouverture : "+str$(res%) if res%=0 THEN GOTO FinProg
' orientation de la page *************** CE N'EST PAS LA BONNE PLACE ! *************** ' res%=DLL_CALL4("PrinterManager",DEF_PAGE%,adr(nul%),adr(canv_hnd%),0) : ' Orientation portrait ' message "orientation:"+str$(res%) ' if res%=0 THEN GOTO FinProg
' titre de la page ********* c'"est le titre du job - à faire AVANT début d'impression ' res%=DLL_CALL4("PrinterManager",DEF_TITRE%,adr(imp_hnd%),adr(imp_text$),len(imp_text$)) ' if res%=0 THEN GOTO FinProg ' message " TITRE OK: "+str$(res%)
' definition du texte en rouge (codage en RGB? ) , gras ' 5 = choisir police, taille et attributs ' opt1% = index de la police ' opt2% = couleur ' -1: inchange ' couleur RGB sinon ' opt3% = somme des options ' taille de la police ' 256 = gras ' 512 = italique ' 1024 = sousligné ' 2048 = barré font% = 256 + 36 : ' gras + taille 36 res% = DLL_call6("PrinterFunction",DEF_FONT%,adr(imp_hnd%),adr(canv_hnd%),ADR(imp_font$),255,font%) ' message "rouge : "+str$(res%)
' impression du texte res% = DLL_call6("PrinterFunction",PRN_TEXT%,adr(imp_hnd%),adr(canv_hnd%),ADR(imp_text$),len(imp_text$),1) ' message "impression : "+str$(res%)
' impression du texte 2 imp_text$ = "Klaus" font$ = "Arial Black" attrib$ = "IS" p1% = 255*256*256*256+36 x_print% = 32768+20 y_print% = 32768+30 res% = DLL_call6("PrinterPrintText",adr(imp_text$),adr(font$),adr(attrib$),p1%,adr(x_print%),adr(y_print%)) ' message "nouveau point actif = ("+str$(x_print%)+","+str$(y_print%)+")" ' message "impression 2: "+str$(res%)
' impression du texte 3 imp_text$ = "Klaus" font$ = "Arial Black" attrib$ = "IBU" p1% = 255*256+24 x_print% = 32768+400 y_print% = 16384+500 res% = DLL_call6("PrinterPrintText",adr(imp_text$),adr(font$),adr(attrib$),p1%,adr(x_print%),adr(y_print%)) ' message "nouveau point actif = ("+str$(x_print%)+","+str$(y_print%)+")" ' message "impression 3: "+str$(res%)
' impression du texte 4 imp_text$ = "Klaus" font$ = "Arial Black" attrib$ = "IBU" p1% = 255*256*256+16 x_print% = 16384+50 y_print% = 16384+50 res% = DLL_call6("PrinterPrintText",adr(imp_text$),adr(font$),adr(attrib$),p1%,adr(x_print%),adr(y_print%)) ' message "nouveau point actif = ("+str$(x_print%)+","+str$(y_print%)+")" ' message "impression 4: "+str$(res%)
' **************** ici, impression de 3 lignes commençant en (800,200), espacées verticalement de 100 for i%=1 to 3 imp_text$ = "Klaus ligne "+str$(i%) font$ = "Arial Black" attrib$ = "IB" p1% = (255*256+255)*256+12 : ' en jaune taille 12 x_print% = 32768 + 800 if i%=1 y_print% = 32769 + 800 else y_print% = 16384 + 100 end_if res% = DLL_call6("PrinterPrintText",adr(imp_text$),adr(font$),adr(attrib$),p1%,adr(x_print%),adr(y_print%)) next i%
' retourner les valeurs utiles ' 1: abscisse (x) de la position active ' 2: ordonnée (Y) de la position active ' 3: couleur de la police ' 4: couleur du fond ' 5: couleur de dessin ' 6: taille de la police list 10 : left 10,10 : top 10,10 : width 10,300 : height 10,300 res% = DLL_call6("PrinterFunction",DEF_VAL%,adr(imp_hnd%),adr(canv_hnd%),1,0,0) item_add 10,"Position horizontale = "+str$(res%) res% = DLL_call6("PrinterFunction",DEF_VAL%,adr(imp_hnd%),adr(canv_hnd%),2,0,0) item_add 10,"Position verticale = "+str$(res%) res% = DLL_call6("PrinterFunction",DEF_VAL%,adr(imp_hnd%),adr(canv_hnd%),3,0,0) item_add 10,"Couleur de la police = "+str$(res%) res% = DLL_call6("PrinterFunction",DEF_VAL%,adr(imp_hnd%),adr(canv_hnd%),4,0,0) item_add 10,"Couleur du fond = "+str$(res%) res% = DLL_call6("PrinterFunction",DEF_VAL%,adr(imp_hnd%),adr(canv_hnd%),5,0,0) item_add 10,"Couleur de dessin = "+str$(res%) res% = DLL_call6("PrinterFunction",DEF_VAL%,adr(imp_hnd%),adr(canv_hnd%),6,0,0) item_add 10,"Taille de la police = "+str$(res%)
' fermeture res% = DLL_call4("PrinterManager",CLOSE_JOB%,adr(imp_hnd%),adr(canv_hnd%),0) : ' ***** et non imp_handler% ***
DLL_OFF END
FinProg: DLL_OFF Message "FinProg" TERMINATE
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 15:14 | |
| Je n'interviens pas mais j'observe avec intérêt ! Juste une question: est-ce que la couleur ne serait pas au format BGR plutôt que RGB ??? -> impression du texte 2: p1% = (255*256*256)*256+36 j'obtiens du bleu taille 36 et non pas du rouge. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: DLL Print Lun 21 Nov 2011 - 15:25 | |
| Ah, JL35, tu suis de trop loin, regarde ce qu'à écris Nardo: Sam 19 Nov 2011 - 23:39 (bas de la page 1 de ce sujet) et la réponse de Klaus est juste en dessous | |
| | | Contenu sponsorisé
| Sujet: Re: DLL Print | |
| |
| | | | DLL Print | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |