FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Détection connexion internet
par JL35 Aujourd'hui à 18:39

» Le parcours du cavalier sur un échiquier 8 x 8
par pascal10000 Hier à 13:26

» Casse-tête : Echanger les positions des cavaliers
par papydall Sam 22 Juil 2017 - 19:42

» Compilateur FBPano
par jean_debord Sam 22 Juil 2017 - 10:54

» demande pour recuperer un text speciale
par pascal10000 Ven 21 Juil 2017 - 22:04

» KGF_dll - nouvelles versions
par Klaus Ven 21 Juil 2017 - 14:29

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
CalendrierCalendrier

Partagez | 
 

 DLL Print

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2, 3, 4, 5, 6, 7, 8  Suivant
AuteurMessage
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: DLL Print   Sam 19 Nov 2011 - 16: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 ? scratch

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...
scratch scratch
Pourtant j'ai fais des tests en large, en long et en travers... Wink

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Sam 19 Nov 2011 - 18:09

Je lance un appel :
Quelqu'un a déjà réussi à faire fonctionner cette DLL ?.... Question
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: DLL Print   Sam 19 Nov 2011 - 19: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Sam 19 Nov 2011 - 22:52

Merci severin pour ton exemple : il fonctionne !
il ne me reste plus qu'a comprendre ce que tu as écris ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: DLL Print   Sam 19 Nov 2011 - 23: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 ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: DLL Print   Sam 19 Nov 2011 - 23:55

Vorschlag:
Wir fragen Klaus.

proposition:
Nous demandons à Klaus.



Hallo Klaus wenn es deine Zeit erlaubt, könntest du Nardo helfen ? Embarassed
Severin
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5894
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: DLL Print   Sam 19 Nov 2011 - 23:59

Citation :
' Druckertest ******************************************************************
ça ne doit pas être le même...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 1: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 1:33

Hallo Klaus,
ist der Fehler auch in meinem Programm ?
Machst du eine neue "Druck.dll" ?

Severin
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 1:39

Merci à tous ! Very Happy


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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 2:17

Bon, je fais juste une toute petite intervention, d'abord pour remercier JL35 pour son humour Smile
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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 3:44

Bon j'ai trouvé en repositionnant en absolu mon texte...

VIVE LPRINT !!! Wink

Je crois que je vais laisser tomber l'impression en couleur des mots clés...et que cela restera en noir et blanc...




Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 3: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 4: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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 4: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é...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 4:55

C'est peut être intéressant dans certains cas mais pas pour le mien Wink

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é.
scratch

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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 12: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: DLL Print   Dim 20 Nov 2011 - 22: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 12: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... Wink


Dernière édition par Nardo26 le Lun 21 Nov 2011 - 13:25, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 13:13

oeil de Lynx a encore frappé, mais bon en même temps Klaus est en train de travailler dessus...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 13:21

Ben justement !

Si ça peut aider Klaus à mettre au point sa DLL... Wink (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 ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 13: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...)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 13: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5894
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 17: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: DLL Print   Lun 21 Nov 2011 - 17: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: DLL Print   

Revenir en haut Aller en bas
 
DLL Print
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 8Aller à la page : 1, 2, 3, 4, 5, 6, 7, 8  Suivant
 Sujets similaires
-
» PRINT dans un Picture: interligne trop petit
» carbon foot print - making of
» Taille des polices pour Print dans un Picture
» [résolu]Google Cloud Print
» Comment changer la couleur du texte....voir print screen

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: