|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 10.02.2019, 21:08 Titel: Drucken mit oder durch Freebasic? |
|
|
Welche Möglichkeiten habe ich, durch ein selbstgeschriebenes Programm den Drucker anzusteuern bzw. zu drucken? Das Beispiel was es im Internet auf Freebasic-Portal.de gibt, funktioniert bei mir nicht. Den Drucker muss man durch ein Fenster auswählen können! Entweder soll eine Datei (.txt, .doc, .xls, ...) ausgedruckt werden, oder der Inhalt einer bzw. mehreren Variablen. Viel habe ich bisher nicht gefunden.
Bei dem Beispiel aus dem Internet, druckt der gar nichts. Es kommt immer nur ein leeres Blatt Papier raus.
Bedanke mich im Voraus für die Hilfe!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 28.03.2020, 04:50 Titel: |
|
|
Ich hole das Thema noch einmal hoch, da ich es jetzt geschafft habe, etwas zu drucken! Habe mich heute nochmal mit dem Thema drucken befasst. Das hat mich einfach keine Ruhe gelassen. Mit dem untenstehenden Beispiel, kann ich drucken und es kann vorher auch ein Drucker ausgewählt werden. So weit so gut! Aber das ist jetzt nur eine Zeile. Wie drucke ich jetzt da mehrere Zeilen nacheinander? Quasi als Schleife von 1 bis xx???
Stelle mir das so vor:
Ich habe ein oder zwei Strings mit mehreren Inhalten.
Zum Beispiel: Zahl(i) oder Geld(i)
i geht von 1 bis 20.
Ich wähle den Drucker aus anschließend druckt der Zeile für Zeile, alle Inhalte der Variable Zahl von 1 bis 20. Immer schön untereinander.
Habe noch keine Idee, wie ich das mit dem geposteten Quellcode hinkriege?
Code: | 'Dieses Beispielprogramm soll die Verwendung des Print-Dialogs zeigen und
'ein Beispiel für das Schreiben in einen Drucker-DC sein.
'Der Autor, Dominik Schäffner, übernimmt keine Haftung für irgendwelche
'Schäden, die durch den Gebrauch des Programmes entstanden sind.
'Dieses Beispielprogramm darf ohne jegliche Einschränkungen
'meinerseits frei verwendet werden.
'Modifikation durch Michael Frey 16.06.2006
'(Entfernung der Fenster)
'(PrintMyText)
' DefInt A-Z
' Option Explicit
' Option Private
SCREENRES 640, 320, 32
#define WIN_INCLUDEALL
#include once "windows.bi"
Declare Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Declare Function PrintMyText(text AS zstring ptr, lang as uinteger,gross as uinteger) As BOOL
Dim SHARED PrintStatus As String
Dim Shared hWnd As HWND
Dim SHARED ps As PAINTSTRUCT
Dim SHARED hDC As HDC
Dim SHARED AS STRING text
dim SHARED AS UINTEGER gross
'Hier bitte Programmieren ;-)
' input Text
' input gross
text = "Dies ist ein Test!"
gross = 160
SLEEP
IF PrintMyText(strptr(Text),len(Text),gross) = FALSE Then
PRINT "Ausdrucken fehlgeschlagen."
Else
PRINT "Daten an Drucker geschickt."
End IF
'/
SLEEP
END
Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Dim pd As PRINTDLG
With pd
.lStructSize = SizeOf(PRINTDLG)
.hwndOwner = hWnd
.Flags = PD_ALLPAGES Or PD_COLLATE Or PD_RETURNDC Or PD_NOSELECTION
End With
PrintDlg(@pd)
Return pd
End Function
Function PrintMyText(text AS zstring ptr, lang as uinteger,gross as uinteger) As BOOL
Dim Printer As PRINTDLG
Dim di As DOCINFO
Dim hfMyFont As HFONT = CreateFont(gross, 0, 0, 0, 0, 0, 0, 0,_
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,_
DEFAULT_PITCH, "Times New Roman")
'Printer-Dialog anzeigen
Printer = GetPrinterFromUser(hWnd)
With di
.cbSize = SizeOf(DOCINFO)
.lpszDocName = StrPtr("DruckerTest")
End With
'Ausdrucken
If StartDoc(Printer.hDC, @di) <= 0 Then Return FALSE
If StartPage(Printer.hDC) <= 0 Then Return FALSE
SetMapMode(Printer.hDC, MM_TEXT)
SetBkMode(Printer.hDC, TRANSPARENT)
SelectObject(Printer.hDC, hfMyFont)
SetTextColor(Printer.hDC, Rgb(0, 0, 0))
TextOut(Printer.hDC, 30, 40, text, lang)
If EndPage(Printer.hDC) <= 0 Then Return FALSE
If EndDoc(Printer.hDC) <= 0 Then Return FALSE
'Aufräumen
DeleteDC(Printer.hDC)
DeleteObject(hfMyFont)
Return TRUE
End FUNCTION |
_________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 28.03.2020, 18:55 Titel: |
|
|
Hallo ALWIM
Ich schlage vor, den Text als Array zu übergeben: Code: | 'Dieses Beispielprogramm soll die Verwendung des Print-Dialogs zeigen und
'ein Beispiel für das Schreiben in einen Drucker-DC sein.
'Der Autor, Dominik Schäffner, übernimmt keine Haftung für irgendwelche
'Schäden, die durch den Gebrauch des Programmes entstanden sind.
'Dieses Beispielprogramm darf ohne jegliche Einschränkungen
'meinerseits frei verwendet werden.
'Modifikation durch Michael Frey 16.06.2006
'(Entfernung der Fenster)
'(PrintMyText)
' DefInt A-Z
' Option Explicit
' Option Private
ScreenRes 640, 320, 32
#define WIN_INCLUDEALL
#Include Once "windows.bi"
Declare Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Declare Function PrintMyText(text() As String, gross As UInteger) As BOOL
Dim Shared PrintStatus As String
Dim Shared hWnd As HWND
Dim Shared ps As PAINTSTRUCT
Dim Shared hDC As HDC
ReDim As String text(Any)
Dim Shared As UInteger gross
'Hier bitte Programmieren ;-)
' input Text
' input gross
'text = "Dies ist ein Test!"
ReDim text(4)
text(0) = "Dies ist Zeile 1"
text(1) = "Dies ist Zeile 2"
text(2) = "Dies ist Zeile 3"
text(3) = "Dies ist Zeile 4"
gross = 160
SLEEP
If PrintMyText(Text(),gross) = FALSE Then
Print "Ausdrucken fehlgeschlagen."
Else
Print "Daten an Drucker geschickt."
End If
'/
Sleep
End
Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Dim pd As PRINTDLG
With pd
.lStructSize = SizeOf(PRINTDLG)
.hwndOwner = hWnd
.Flags = PD_ALLPAGES Or PD_COLLATE Or PD_RETURNDC Or PD_NOSELECTION
End With
PrintDlg(@pd)
Return pd
End Function
Function PrintMyText(txt() As String, gross As UInteger) As BOOL
Dim Printer As PRINTDLG
Dim di As DOCINFO
Dim hfMyFont As HFONT = CreateFont(gross, 0, 0, 0, 0, 0, 0, 0,_
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,_
DEFAULT_PITCH, "Times New Roman")
'Printer-Dialog anzeigen
Printer = GetPrinterFromUser(hWnd)
With di
.cbSize = SizeOf(DOCINFO)
.lpszDocName = StrPtr("DruckerTest")
End With
'Ausdrucken
If StartDoc(Printer.hDC, @di) <= 0 Then Return FALSE
If StartPage(Printer.hDC) <= 0 Then Return FALSE
SetMapMode(Printer.hDC, MM_TEXT)
SetBkMode(Printer.hDC, TRANSPARENT)
SelectObject(Printer.hDC, hfMyFont)
SetTextColor(Printer.hDC, RGB(0, 0, 0))
For x As Integer = 0 To UBound(txt)
TextOut(Printer.hDC, 30, gross * x + 40, StrPtr(txt(x)), Len(txt(x)))
Next
If EndPage(Printer.hDC) <= 0 Then Return FALSE
If EndDoc(Printer.hDC) <= 0 Then Return FALSE
'Aufräumen
DeleteDC(Printer.hDC)
DeleteObject(hfMyFont)
Return TRUE
End Function |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 28.03.2020, 19:20 Titel: |
|
|
Genau das will ich tun. Den Text als Array übergeben! Habe es nur noch nicht hinbekommen. Bin die ganze Zeit schon am testen. Bekomme immer Fehlermeldungen. Erkennt der automatisch das Ende eines Papiers? Wenn ich jetzt 500 Zeilen drucken will und dann eine Zeile nicht mehr ganz auf dem Papier drauf ist? Sicherlich kann man auch mehrere Arrays in einer Zeile drucken oder? Auch das versuche ich die ganze Zeit schon zu realisieren! Das "+" zwischen den Arrays schluckt der irgendwie nicht?
Code: | i + " " + Diridari(i) |
Irgendwas muss ich übersehen haben. Werde gleich nochmals testen...
Wenn das Beispiel von grindstone funktioniert, ist das nicht schlecht. Immerhin ein Anfang. Vielen herzlichen Dank für die Hilfe!
Edit: Kennt einer von euch auch die Befehle für die Druckvorschau? Ist aber jetzt keine Bedingung bzw. muss.
Edit2: Das Beispiel von grindstone funktioniert nicht! Der Drucker druckt wieder nichts. Es kommt immer die Meldung "Ausdrucken fehlgeschlagen." _________________ SHELL SHUTDOWN -s -t 05
Zuletzt bearbeitet von ALWIM am 28.03.2020, 21:05, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 28.03.2020, 21:02 Titel: |
|
|
Ich fürchte, du hast da etwas falsch verstanden. Du mußt Text (und nur Text) an den Drucker schicken. Dein Code: | i + " " + Diridari(i) | müsste korrekt lauten: Code: | text(0) = Str(i) + " " + Str(Diridari(i)) |
Und das wird dann an den in TextOut angegebenen Koordinaten aufs Papier gebracht, wobei TextOut bei jedem Aufruf nur eine Zeile druckt, bei den entsprechenden Koordinaten auch überlappend. Um das korrekte Seitenlayout mußt du dich also selber kümmern.
Was beim Überschreiten der Papiergrenzen passiert, dürfte vom Drucker abhängen. Sowohl mein Deskjet 690 (Tinte) als auch mein QMS 860 (Laser) schneiden die überstehenden Teile einfach ab (sowohl vertikal als auch horizontal).
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 28.03.2020, 21:16 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Ich fürchte, du hast da etwas falsch verstanden. Du mußt Text (und nur Text) an den Drucker schicken. Dein Code: | i + " " + Diridari(i) | müsste korrekt lauten: Code: | text(0) = Str(i) + " " + Str(Diridari(i)) |
Und das wird dann an den in TextOut angegebenen Koordinaten aufs Papier gebracht, wobei TextOut bei jedem Aufruf nur eine Zeile druckt, bei den entsprechenden Koordinaten auch überlappend. Um das korrekte Seitenlayout mußt du dich also selber kümmern.
Was beim Überschreiten der Papiergrenzen passiert, dürfte vom Drucker abhängen. Sowohl mein Deskjet 690 (Tinte) als auch mein QMS 860 (Laser) schneiden die überstehenden Teile einfach ab (sowohl vertikal als auch horizontal).
Gruß
grindstone |
Bei deinem Beispiel wird nichts gedruckt! Zumindest bei mir. Es kommt immer die Meldung "Ausdrucken fehlgeschlagen." _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 28.03.2020, 22:34 Titel: |
|
|
Also das ganze nochmal komplett:
Code: | 'Dieses Beispielprogramm soll die Verwendung des Print-Dialogs zeigen und
'ein Beispiel für das Schreiben in einen Drucker-DC sein.
'Der Autor, Dominik Schäffner, übernimmt keine Haftung für irgendwelche
'Schäden, die durch den Gebrauch des Programmes entstanden sind.
'Dieses Beispielprogramm darf ohne jegliche Einschränkungen
'meinerseits frei verwendet werden.
'Modifikation durch Michael Frey 16.06.2006
'(Entfernung der Fenster)
'(PrintMyText)
' DefInt A-Z
' Option Explicit
' Option Private
ScreenRes 640, 320, 32
#define WIN_INCLUDEALL
#Include Once "windows.bi"
Declare Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Declare Function PrintMyText(text() As String, gross As UInteger) As BOOL
Dim Shared PrintStatus As String
Dim Shared hWnd As HWND
Dim Shared ps As PAINTSTRUCT
Dim Shared hDC As HDC
ReDim As String text(Any)
Dim Shared As UInteger gross
'Hier bitte Programmieren ;-)
' input Text
' input gross
Dim As Integer diridari(5)
diridari(1) = 100
diridari(2) = 200
diridari(3) = 300
diridari(4) = 400
diridari(5) = 500
Dim As Integer i
ReDim text(0)
i = 3
text(0) = Str(i) + " " + Str(Diridari(i))
gross = 160
SLEEP
If PrintMyText(Text(),gross) = FALSE Then
Print "Ausdrucken fehlgeschlagen."
Else
Print "Daten an Drucker geschickt."
End If
'/
Sleep
End
Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Dim pd As PRINTDLG
With pd
.lStructSize = SizeOf(PRINTDLG)
.hwndOwner = hWnd
.Flags = PD_ALLPAGES Or PD_COLLATE Or PD_RETURNDC Or PD_NOSELECTION
End With
PrintDlg(@pd)
Return pd
End Function
Function PrintMyText(txt() As String, gross As UInteger) As BOOL
Dim Printer As PRINTDLG
Dim di As DOCINFO
Dim hfMyFont As HFONT = CreateFont(gross, 0, 0, 0, 0, 0, 0, 0,_
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,_
DEFAULT_PITCH, "Times New Roman")
'Printer-Dialog anzeigen
Printer = GetPrinterFromUser(hWnd)
With di
.cbSize = SizeOf(DOCINFO)
.lpszDocName = StrPtr("DruckerTest")
End With
'Ausdrucken
If StartDoc(Printer.hDC, @di) <= 0 Then Return FALSE
If StartPage(Printer.hDC) <= 0 Then Return FALSE
SetMapMode(Printer.hDC, MM_TEXT)
SetBkMode(Printer.hDC, TRANSPARENT)
SelectObject(Printer.hDC, hfMyFont)
SetTextColor(Printer.hDC, RGB(0, 0, 0))
For x As Integer = 0 To UBound(txt)
TextOut(Printer.hDC, 30, gross * x + 40, StrPtr(txt(x)), Len(txt(x)))
Next
If EndPage(Printer.hDC) <= 0 Then Return FALSE
If EndDoc(Printer.hDC) <= 0 Then Return FALSE
'Aufräumen
DeleteDC(Printer.hDC)
DeleteObject(hfMyFont)
Return TRUE
End Function
|
Es müsste
ausdrucken. Bei mir funktioniert es.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 29.03.2020, 04:21 Titel: |
|
|
Bei mir funktioniert es nicht! Egal was ich versuche. Keine Ahnung warum? Ich brauche zu 100% was funktionsfähiges, sonst kann ich das ganze vergessen...
Sollte auch zur Not 2 oder gar 3 Seiten drucken, wenn eine Seite nicht ausreicht. Ich dachte echt, ich hatte es. Stehe eigentlich kurz davor. So nah und doch so weit entfernt! _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 29.03.2020, 18:21 Titel: |
|
|
Jetzt muss ich mich nochmals mit neuen Infos melden!
Also:
Es geht doch! Kann etwas ausdrucken. Allerding momentan nicht auf dem Rechner, den ich fürs Internet und alles andere benutze! Auf einem Uralt-Laptop mit Win XP habe ich nun meinen Drucker-Treiber installiert und konnte somit etwas ausdrucken. Auch so wie ich es haben will! Siehe Quellcode...
Code: | 'Dieses Beispielprogramm soll die Verwendung des Print-Dialogs zeigen und
'ein Beispiel für das Schreiben in einen Drucker-DC sein.
'Der Autor, Dominik Schäffner, übernimmt keine Haftung für irgendwelche
'Schäden, die durch den Gebrauch des Programmes entstanden sind.
'Dieses Beispielprogramm darf ohne jegliche Einschränkungen
'meinerseits frei verwendet werden.
'Modifikation durch Michael Frey 16.06.2006
'(Entfernung der Fenster)
'(PrintMyText)
' DefInt A-Z
' Option Explicit
' Option Private
SCREENRES 640, 320, 32
#define WIN_INCLUDEALL
#include once "windows.bi"
Declare Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Declare Function PrintMyText() As BOOL
Dim SHARED PrintStatus As String
Dim Shared hWnd As HWND
Dim SHARED ps As PAINTSTRUCT
Dim SHARED hDC As HDC
Dim SHARED AS STRING text, Namen(20)
dim SHARED AS UINTEGER gross
'Hier bitte Programmieren ;-)
' input Text
' input gross
text = "Dies ist ein Test!"
gross = 160
Namen(1) = "Bauer Mark"
Namen(2) = "Schneider Jochen"
Namen(3) = "Schuster Erwin"
Namen(4) = "Becker Bernd"
Namen(5) = "Lummer Karl"
Namen(6) = "Seifert Hans"
Namen(7) = "Kolb Andreas"
Namen(8) = "Merz Franz"
Namen(9) = "Schneider Winfried"
Namen(10) = "Holzer Richard"
Namen(11) = "Kaufmann Sandra"
Namen(12) = "Denk Doris"
Namen(13) = "Bauer Markus"
Namen(14) = "Werner Werner"
Namen(15) = "Rindfleisch Dietmar"
Namen(16) = "Winter Karina"
Namen(17) = "Stadler Nepomuk"
Namen(18) = "Krauße Anton"
Namen(19) = "Fink Hubert"
Namen(20) = "Zimmermann Ralf"
SLEEP
IF PrintMyText() = FALSE Then
PRINT "Ausdrucken fehlgeschlagen."
Else
PRINT "Daten an Drucker geschickt."
End IF
'/
SLEEP
END
Function GetPrinterFromUser(hWnd As HWND) As PRINTDLG
Dim pd As PRINTDLG
With pd
.lStructSize = SizeOf(PRINTDLG)
.hwndOwner = hWnd
.Flags = PD_ALLPAGES Or PD_COLLATE Or PD_RETURNDC Or PD_NOSELECTION
End With
PrintDlg(@pd)
Return pd
End Function
Function PrintMyText() As BOOL
Dim Printer As PRINTDLG
Dim di As DOCINFO
Dim hfMyFont As HFONT = CreateFont(gross, 0, 0, 0, 0, 0, 0, 0,_
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,_
DEFAULT_PITCH, "Times New Roman")
'Printer-Dialog anzeigen
Printer = GetPrinterFromUser(hWnd)
With di
.cbSize = SizeOf(DOCINFO)
.lpszDocName = StrPtr("DruckerTest")
End WITH
'Ausdrucken
If StartDoc(Printer.hDC, @di) <= 0 Then Return FALSE
If StartPage(Printer.hDC) <= 0 Then Return FALSE
SetMapMode(Printer.hDC, MM_TEXT)
SetBkMode(Printer.hDC, TRANSPARENT)
SelectObject(Printer.hDC, hfMyFont)
SetTextColor(Printer.hDC, Rgb(0, 0, 0))
FOR x AS INTEGER = 1 TO 20
' Text = STR(x) + " " + Namen(x)
TextOut(Printer.hDC, 30, 160 * x + 40, STR(x) + " " + Namen(x), LEN(Namen(x)))
NEXT
If EndPage(Printer.hDC) <= 0 Then Return FALSE
If EndDoc(Printer.hDC) <= 0 Then Return FALSE
'Aufräumen
DeleteDC(Printer.hDC)
DeleteObject(hfMyFont)
Return TRUE
End FUNCTION | Nun zu einem anderen Problem. Eigentlich nur eine Verständnisfrage: Beim Ausdruck, werden die Namen nicht ganz ausgedruckt! Es fehlen bei jedem Namen, ein paar Buchstaben. Was habe ich übersehen? Meine Vermutung ist, dass ich die Länge nicht beachtet habe? Der Verdacht liegt sehr nahe! Muss ich nochmal testen. Glaube, dass ich richtig liege. Wenn ich jetzt 100 Namen ausdrucken will, ist ja irgendwann das Blatt Papier zu ende. Wie bestimme ich, oder weiß mein Programm wann ein neues Blatt Papier anfängt? Ich muss meinem Programm irgendwie mitteilen, dass jetzt ein neues Papier anfängt. Ich werde auf meinem Rechner meinen Drucker-Treiber nochmal neu installieren. Vielleicht funktioniert mein Drucker dann wieder. Am Layout vom ausgedruckten muss ich auch noch etwas feilen. Sicherlich kann man da auch Linien zwischen den Namen mit einbauen, die dann mit ausgedruckt werden oder? Sonst aber funktioniert das ganze schon mal! _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 29.03.2020, 20:20 Titel: |
|
|
Die Buchstaben werden verschluckt, weil du eine falsche Zeilenlänge angibst. Ein Seitenwechsel erfolgt mit EndPage, wann die Seite voll ist, mußt du allerdings selber berechnen.
Mit diesen Modifikationen druckt dein Programm die kompletten Zelen und beginnt alle 8 Zeilen eine neue Seite: Code: | ...
SelectObject(Printer.hDC, hfMyFont)
SetTextColor(Printer.hDC, RGB(0, 0, 0))
Dim As String g
Dim As Integer y
For x As Integer = 1 To UBound(Namen)
g = Str(x) + " " + Namen(x) 'zu druckende zeile
y += gross + 40 'vertikale position der zeile
TextOut(Printer.hDC, 30, y, StrPtr(g), Len(g))
If x Mod 8 = 0 Then 'seitenwechsel alle 8 zeilen
If EndPage(Printer.hDC) <= 0 Then Return FALSE 'seitenwechsel
y = 0 'positionszähler zurücksetzen
EndIf
Next
If EndPage(Printer.hDC) <= 0 Then Return FALSE
If EndDoc(Printer.hDC) <= 0 Then Return FALSE
'Aufräumen
DeleteDC(Printer.hDC)
... |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 29.03.2020, 21:12 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Die Buchstaben werden verschluckt, weil du eine falsche Zeilenlänge angibst. Ein Seitenwechsel erfolgt mit EndPage, wann die Seite voll ist, mußt du allerdings selber berechnen.
Mit diesen Modifikationen druckt dein Programm die kompletten Zelen und beginnt alle 8 Zeilen eine neue Seite: Code: | ...
SelectObject(Printer.hDC, hfMyFont)
SetTextColor(Printer.hDC, RGB(0, 0, 0))
Dim As String g
Dim As Integer y
For x As Integer = 1 To UBound(Namen)
g = Str(x) + " " + Namen(x) 'zu druckende zeile
y += gross + 40 'vertikale position der zeile
TextOut(Printer.hDC, 30, y, StrPtr(g), Len(g))
If x Mod 8 = 0 Then 'seitenwechsel alle 8 zeilen
If EndPage(Printer.hDC) <= 0 Then Return FALSE 'seitenwechsel
y = 0 'positionszähler zurücksetzen
EndIf
Next
If EndPage(Printer.hDC) <= 0 Then Return FALSE
If EndDoc(Printer.hDC) <= 0 Then Return FALSE
'Aufräumen
DeleteDC(Printer.hDC)
... |
Gruß
grindstone |
Das mit der Länge habe ich mir schon gedacht! War auch meine Vermutung zu Beginn. Kaum geändert und schon sind alle Buchstaben da.
Code: | Ein Seitenwechsel erfolgt mit EndPage, wann die Seite voll ist, mußt du allerdings selber berechnen. | Jetzt wäre eine Druckvorschau nicht schlecht! Sonst muss ich jedes Mal etwas ausdrucken. Mal schauen, wie ich das löse?
Ich danke vielmals für die Hilfe! Habe es aber zum großen Teil selber hinbekommen. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1041 Wohnort: Niederbayern
|
Verfasst am: 31.03.2020, 19:52 Titel: Re: PDF-Drucker zum Testen der Druckausgabe |
|
|
Sebastian hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | Jetzt wäre eine Druckvorschau nicht schlecht! Sonst muss ich jedes Mal etwas ausdrucken. |
Du könntest für Tests auch einfach einen PDF-Drucker wie z. B. PDFCreator nutzen. | Nicht nötig, da ich beim Drucker einfach die Druckvorschau aktivieren kann! Funktioniert. Somit wird vor dem Drucken eine Vorschau auf dem Bildschirm angezeigt. Ich brauche dann lediglich auf abbrechen klicken. Jetzt muss ich nur noch am Design etwas machen. Aber ich muss auf meinem Rechner irgendwie (durch mein Programm) den Drucker abgeschossen haben? Kann seit Samstag nichts mehr drucken. Drucker schon mehrfach neu installiert. Treiber ist installiert, aber es kann kein Druckauftrag gestartet werden. Am Freitag habe ich noch durch einen Test etwas drucken können. Seitdem ging nichts mehr. Immer wenn ich auf drucken klicke, kommt die Meldung: Der Druckvorgang konnte nicht gestartet werden. Drucker wird ordnungsgemäß erkannt. Auch die Füllstände werden korrekt angezeigt. Auch im Gerätemanager wird der Drucker (korrekt) angezeigt. Schon seltsam? Schon mal einer ein solches Problem gehabt? Will den Rechner jetzt nicht unbedingt neu installieren.
Wie gut, dass ich einen zweiten Rechner habe! Man sollte Altertümer nicht gleich entsorgen. Sind immer für irgendwas gut. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|