Zitat:
Was für Funktionen werden da genau von euch benötigt? Habt ihr Beispielcodes, wie man es ungefähr macht?
Sollen Texte oder Dateien an den Drucker-Treiber geschickt werden? Mit oder ohne PrintDlg_()?
Ich bin hier am Basteln. Das ist mein Grundgerüst. Komme aber aus Zeitmangel und Prioritäten zur Zeit nicht weiter.
Soll für die IDE sein. Also nur für Text ohne ein Editor zu mißbrauchen.
Code:
;******************************************************************************
;* *
;* (c) SDL *
;* *
;******************************************************************************
;* *
;* Project: Seitendruck für IDE *
;* [x]Win [ ]DOS [ ]DLL *
;* *
;* Version: 1.0.0.0 *
;* *
;******************************************************************************
;{
; Breite des Ausgabebereichs = 203 mm
; Höhe des Ausgabebereichs = 289 mm
; Drucker Horizontal Auflösung = 600 dpi
; Drucker Vertical Auflösung = 600 dpi
; Horizontale Pixel je mm = 24 Pixel
; Vertikale Pixel je mm = 24 Pixel
; linker Punkt(x) = 3 mm ; nicht bedruckbar
; oberer Punkt(y) = 2 mm ; nicht bedruckbar
; phys. Blattbreite: = 206 mm
; phys. Blatthoehe: = 292 mm
; -------------------------------------------------------------
; rechte Randbreite = 0 mm ; nicht bedruckbar
; untere Randbreite = 1 mm ; nicht bedruckbar
; Texthöhe 3.4395828247
; 81
; 80 Zeichen je Zeile
; Texthöhe 3.4395828247
; Canon iP7200
;
; Breite des Ausgabebereichs = 210 mm
; Höhe des Ausgabebereichs = 297 mm
; Horizontale Pixel je mm = 24 Pixel
; Vertikale Pixel je mm = 24 Pixel
; linker Punkt(x) = 0 mm ; nicht bedruckbar
; oberer Punkt(y) = 0 mm ; nicht bedruckbar
; phys. Blattbreite: = 206
; phys. Blatthoehe: = 292
; -------------------------------------------------------------
; rechter Rand der nicht bedruckbar ist = -4 mm
; unterer Rand der nicht bedruckbar ist = -5 mm
; Texthöhe 3.4395828247
; 81
; 80
; Texthöhe 3.4395828247
; 7-PDF Drucker
;******************************************************************************
;}
; GetTextExtentPoint
; GetTextExtentPoint32
; GetTextExtentPoint32W function
;******************************************************************************
;* Variablendefinition *
;******************************************************************************
EnableExplicit
; #True = 1 / #False = 0
;{ Declaration der Proceduren
Declare Seiten_parameter()
Declare Ausdruck_parameter ()
Declare Pixel_pro_Inch_x (prt_)
Declare Pixel_pro_Inch_y (prt_)
Declare Physikalisch_OffSet_x(prt_)
Declare Physikalisch_OffSet_y(prt_)
Declare Physikalisch_Seitenbreite (prt_)
Declare Physikalisch_Seitenhoehe (prt_)
Declare Standartdrucker()
;}
;{ Struktur der Programmparameter
Structure Printpage
l_Rand.u
r_Rand.u
o_Rand.u
u_Rand.u
o_Line.b
u_line.b
Schrift.s
Schriftg.b
Format.s
Ausrichtung.b
Druckername.s
EndStructure
;}
;{ Globale Variablen
Prototype.s GetDefaultPrinter(Printer.s, *buffer)
Global Dim PageInfo.Printpage(1)
Global x$,x1$,Text$ ; Testvariablen
Global x ; Anzahl der Zeichen je zeile
Global x_Zeile ; Zeilenlänge in mm
Global Horizontale_Pixel_je_mm
Global Vertikale_Pixel_je_mm
Global Vector_width_mm ; Breite des Vektorzeichnen-Ausgabebereichs / !! #PB_Unit_Millimeter !!
Global Vector_height_mm ; Höhe des Vektorzeichnen-Ausgabebereichs
Global xL_Rand_mm.l ; Abstand vom linken Rand der physischen Seite an den linken Rand des Druckbereichs (mm)
Global yO_Rand_mm.l ; den Abstand von der Oberkante der physischen Seite an der oberen Kante des druckbaren Bereichs (mm)
Global xR_Rand_mm.l
Global yU_Rand_mm.l
Global Blattbreite_mm.l ; Die Breite des physikalischen Bildschirms/Blattes in Millimeter
Global Blattlaenge_mm.l ; Die Höhe des physikalischen Bildschirms/Blattes in Millimetern.
Global phPrinter.l ; PrinterHandle als long
Global StdPrinter$ ; Standarddrucker
Global Printer ; Drucker Voreinstellung
;
;}
Ausdruck_parameter () ; auf Standard stellen
;{ Konstante
;}
;{ Lokale Variablen
;
; Define
;
;}
;******************************************************************************
DefaultPrinter() ; Wählt den Standard-Drucker als aktuellen Drucker für die Druckoperation
LoadFont(0, "Lucida Console",10) ;Versucht den angegebenen Zeichensatz zu öffnen.
;LoadFont(0, "Courier New",12)
;******************************************************************************
;******************************************************************************
;* *
;* Programm *
;* *
;******************************************************************************
If PrintRequester() ; öffnet den Printerrequester
If StartPrinting("PB-druck") ;Initialisiert den Drucker und startet die Druck-Operation
Printer = PrinterVectorOutput(#PB_Unit_Millimeter)
If StartVectorDrawing(Printer)
Seiten_parameter() ; Seitenparameter erfragen
Text$ = "Every drawing output has a default unit of measurement. The default unit is pixels " +
"for screen or raster image outputs and points for printer or vector image outputs. " +
"It is however possible to select a different unit of measurement for the output when " +
"creating it with the ImageVectorOutput(), PrinterVectorOutput() or similar function."
VectorFont(FontID(0))
MovePathCursor(105,14)
DrawVectorText("1")
MovePathCursor(20,18) : AddPathLine(200,18)
StrokePath(0.2, #PB_Path_DiagonalCorner)
MovePathCursor(20,277) : AddPathLine(200,277)
StrokePath(0.2, #PB_Path_DiagonalCorner)
; Debug "Texthöhe " + VectorTextHeight("B")
MovePathCursor(30, 20)
DrawVectorText(x$)
MovePathCursor(30,20+VectorTextHeight("Aj"))
DrawVectorText(x1$)
MovePathCursor(30, 20 + 2*VectorTextHeight("Aj"))
DrawVectorParagraph(Text$, 170, 200)
StopVectorDrawing()
EndIf
; Dem Drucker sagen, dass eine neue Seite begonnen wird
;NewPrinterPage()
StopPrinting()
EndIf
EndIf
End
;******************************************************************************
;******************************************************************************
;* *
;* Prozeduren *
;* *
;******************************************************************************
;
;******************************************************************************
Procedure Seiten_parameter()
If Printer
VectorFont(FontID(0))
;Druckbarer Bereich in mm
Vector_width_mm = VectorOutputWidth() ;Gibt die Breite des Vektorzeichnen-Ausgabebereichs in mm zurück
Vector_height_mm = VectorOutputHeight() ;Gibt die Höhe des Vektorzeichnen-Ausgabebereichs in mm zurück
; Debug "Breite des Ausgabebereichs = " + VectorOutputWidth() + " mm"
; Debug " Höhe des Ausgabebereichs = " + VectorOutputHeight() + " mm"
Horizontale_Pixel_je_mm = Pixel_pro_Inch_x (Printer)
Vertikale_Pixel_je_mm = Pixel_pro_Inch_y (Printer)
; Debug "Horizontale Pixel je mm " + Horizontale_Pixel_je_mm
; Debug " Vertikale Pixel je mm " + Vertikale_Pixel_je_mm
xL_Rand_mm = Physikalisch_OffSet_x(Printer)
yO_Rand_mm = Physikalisch_OffSet_y(Printer)
; Debug "linker Punkt(x) " + xL_Rand_mm + " mm"
; Debug "oberer Punkt(y) " + yO_Rand_mm + " mm"
Blattbreite_mm = Physikalisch_Seitenbreite(Printer)
Blattlaenge_mm = Physikalisch_Seitenhoehe(Printer)
; Debug "phys. Blattbreite: " + Blattbreite_mm
; Debug "phys. Blatthoehe: " + Blattlaenge_mm
xR_Rand_mm = Blattbreite_mm - Vector_width_mm - xL_Rand_mm ; rechter Rand der nicht bedruckbar ist
yU_Rand_mm = Blattlaenge_mm - Vector_height_mm - yO_Rand_mm ; unterer Rand der nicht bedruckbar ist
Debug "------"
; Debug "rechter Rand der nicht bedruckbar ist " + xR_Rand_mm + " mm "
; Debug "unterer Rand der nicht bedruckbar ist" + yU_Rand_mm + " mm"
EndIf
;Debug VectorTextWidth("1234567890")
; Debug "Texthöhe " + VectorTextHeight("B")
x_Zeile = Blattbreite_mm - PageInfo.Printpage(1)\l_Rand - PageInfo.Printpage(1)\r_Rand
x=0
x$=""
Repeat
x +1
x$=x$+"B"
Until VectorTextWidth(x$)>= x_Zeile ; Zeilenlänge in mm
Debug x
If VectorTextWidth(x$)>x_Zeile
x-1
x1$ = Mid(x$,1,x)
EndIf
Debug x
EndProcedure
;******************************************************************************
Procedure Ausdruck_parameter () ; Werte auf Standard setzen
Protected.b x
For x=0 To 1
With PageInfo (x)
\l_Rand = 30
\r_Rand = 10
\o_Rand = 20
\u_Rand = 20
\o_Line = 1 ; 1= obere Linie Zeichnen / 0= keine
\u_line = 1 ; 1= untere Linie Zeichnen / 0= keine
\Schrift = "Lucida Console"
\Schriftg = 10
\Ausrichtung = 1 ; 1= Hochformat / 0 = Querformat
\Druckername = ""
EndWith
Next x
EndProcedure
;******************************************************************************
Procedure Pixel_pro_Inch_x (prt_)
Protected mm = 25.4 ;1 Inch = 25,4 mm
;API Die Funktion GetDeviceCaps ermittelt gerätespezifische Informationen über einen angegebenen Gerät.
;#LOGPIXELSX -Die Anzahl an Pixel pro Inch entlang der Bildschirm-/Blatt- breite.
ProcedureReturn GetDeviceCaps_(prt_,#LOGPIXELSX) / mm
EndProcedure
;******************************************************************************
Procedure Pixel_pro_Inch_y (prt_)
Protected mm = 25.4 ;1 Inch = 25,4 mm
;API Die Funktion GetDeviceCaps ermittelt gerätespezifische Informationen über einen angegebenen Gerät.
;#LOGPIXELSY -Die Anzahl an Pixel pro Inch entlang der Bildschirm-/Blatt- höhe.
ProcedureReturn GetDeviceCaps_(prt_,#LOGPIXELSY) / mm
EndProcedure
;******************************************************************************
Procedure Physikalisch_OffSet_x(prt_)
;API Die Funktion GetDeviceCaps ermittelt gerätespezifische Informationen über einen angegebenen Gerät.
;#PHYSICALOFFSETX -Das Offset in x-Richtung, linke obere Ecke vom Blattrand zum druckbaren Bereich, in Pixel
ProcedureReturn GetDeviceCaps_(prt_,#PHYSICALOFFSETX) / Pixel_pro_Inch_x(prt_) ; Linker Rand der nicht bedruckbar ist
EndProcedure
;******************************************************************************
Procedure Physikalisch_OffSet_y(prt_)
;API Die Funktion GetDeviceCaps ermittelt gerätespezifische Informationen über einen angegebenen Gerät.
;#PHYSICALOFFSETY -Das Offset in y-Richtung von der oberen linken Ecke, in Pixel.
ProcedureReturn GetDeviceCaps_(prt_,#PHYSICALOFFSETY) / Pixel_pro_Inch_y(prt_) ; Oberer Rand der nicht bedruckbar ist
EndProcedure
;******************************************************************************
Procedure Physikalisch_Seitenbreite (prt_)
;API Die Funktion GetDeviceCaps ermittelt gerätespezifische Informationen über einen angegebenen Gerät
;#PHYSICALWIDTH -Für Druckgeräte: Die Breite der physischen Seite, in Pixel.
ProcedureReturn GetDeviceCaps_(prt_,#PHYSICALWIDTH) / Pixel_pro_Inch_x (prt_)
EndProcedure
;******************************************************************************
Procedure Physikalisch_Seitenhoehe (prt_)
;API Die Funktion GetDeviceCaps ermittelt gerätespezifische Informationen über einen angegebenen Gerät
;#PHYSICALHEIGHT -Für Druckgeräte: die Höhe der physischen Seite, in Pixel.
ProcedureReturn GetDeviceCaps_(prt_,#PHYSICALHEIGHT) / Pixel_pro_Inch_y(prt_)
EndProcedure
;******************************************************************************
Procedure Standartdrucker()
; DWORD GetPrivateProfileString(
;
; LPCTSTR lpAppName, // points To section name
; LPCTSTR lpKeyName, // points To key name
; LPCTSTR lpDefault, // points To Default string
; LPTSTR lpReturnedString, // points To destination buffer
; DWORD nSize, // size of destination buffer
; LPCTSTR lpFileName // points To initialization filename
; );
;Standardrucker-Namen ermitteln
StdPrinter$ = Space(260)
GetPrivateProfileString_("WINDOWS","DEVICE","", @StdPrinter$, 260, "Win.Ini")
StdPrinter$ = StringField(StdPrinter$, 1,",")
Debug StdPrinter$
phPrinter.l = 0
OpenPrinter_(StdPrinter$,@phPrinter.l,0)
Debug phPrinter
ClosePrinter_(phPrinter)
EndProcedure