Seite 1 von 1
Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 27.09.2013 22:03
von HemSA
Hallole,
ich habe ein Problem was das Ausdrucken angeht.
Früher gab es die Befehle
100 LOCATE 18, 1: PRINT "Benennung : "; : PRINT USING "####.#"; wertderbenennung(i)
um die Bildschirmausgaben zu machen.
was den Ausdruck am Drucker angeht konnte das man mit dem:
LPRINT und dem LOCATE Befehl machen wo was in welcher Spalte und Zeile gedruckt wird.
Wie bekomme ich das nun mit Purebasic hin?
Ich will im Prinzip wissen wie ich verschiedene Variablen an verschiedenen Stellen ausdrucken kann (A4 Fornat)
Die Hilfe ist da sehr bescheiden was das Thema abgeht.
Danke für jede Hilfe.
Michael
Re: Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 27.09.2013 22:12
von ts-soft
Die 2DDrawing-Befehle werden hier genutzt. Lediglich statt StartDrawing() kommt StartPrinting() usw.
Naja, ganz so einfach ist es nicht, aber das kann man nicht in 3-4 Sätzen erklären.
Re: Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 28.09.2013 06:27
von edel
Es kommt StartPrinting und danach StartDrawing zum Einsatz. StartPrinting um den Druckvorgang ueberhaupt zu beginnen, und StartDrawing um etwas auf das Papier zu bringen. Man fragt vor dem Drucken den Drucker mit DefaultPrinter ab, oder waehlt einen ueber PrintRequester.
Code: Alles auswählen
If DefaultPrinter()
Font = LoadFont(#PB_Any, "Arial", 35)
StartPrinting("Jobnameoderso")
StartDrawing(PrinterOutput())
DrawingFont(FontID(Font))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10, 10, "Hallo Papier!", 0)
StopDrawing()
StopPrinting()
FreeFont(Font)
EndIf
Zum testen habe ich mir einen virtuellen Drucker installiert (PDF24), hilft Papier zu sparen

Re: Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 28.09.2013 13:51
von HemSA
Danke edel,
genauso habe ich es mir vorgestellt.
Auch der Tip mit PDF24 war gut.
Tschüssle
Michael
Re: Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 28.09.2013 16:58
von Lothar Schirm
Zum Thema "drucken" habe ich mir mal eine Prozedur geschrieben, mit der man Text oder auch Tabellen ausdrucken kann, mit automatischem Zeilenvorschub und Seitenumbruch:
Code: Alles auswählen
;==============================================================================
; Prozedur zum Drucken von Text
; Drucker.pbi
; Erstellt am 29.04.2013
; Letzte Bearbeitung am 28.09.13
;==============================================================================
EnableExplicit
Global Randoben = 200, Printer_y
Procedure PrintText(Text.s, FontName.s = "Courier New", Hoehe = 10, Stil = 0, Farbe = #Black)
; Eine Textzeile mit Zeilenvorschub drucken. Parameter:
; - Text = zu druckender String
; - FontName = Zeichensatz
; - Hoehe = Schrifthoehe in Punkten
; - Stil = Flags in LoadFont()
; - Farbe = Textfarbe
; Courier New hat eine feste Zeichenbreite, so dass mit RSet oder LSet für die Teilstrings
; auch Tabellen gedruckt werden können.
; Die Prozedur muss muss nach StartPrinting() und vor StopPrinting() aufgerufen werden.
; Vor dem ersten Aufruf muss Printer_y = Randoben gesetzt werden.
Protected x = 200, Randunten = 200, FontNr, TextHeight
; Font laden, Höhe an Druckerauflösung anpassen:
FontNr = LoadFont(#PB_Any, FontName, PrinterPageHeight() * Hoehe / 1024, Stil)
; Drucken:
If StartDrawing(PrinterOutput())
DrawingFont(FontID(FontNr))
DrawingMode(#PB_2DDrawing_Transparent)
TextHeight = TextHeight(Space(1))
DrawText(x, Printer_y, Text, Farbe)
DrawingMode(#PB_2DDrawing_Default)
If Printer_y > PrinterPageHeight() - TextHeight - Randunten
NewPrinterPage()
Printer_y = Randoben
Else
Printer_y = Printer_y + TextHeight
EndIf
StopDrawing()
EndIf
; Font wieder freigeben:
FreeFont(FontNr)
EndProcedure
Und hier ein Testprogramm:
Code: Alles auswählen
;==============================================================================
; DruckerTest.pb
; Erstellt am 29.04.2013
; Letzte Bearbeitung am 22.09.2013
;==============================================================================
EnableExplicit
IncludeFile "Drucker.pbi"
Define.s s
Define i
Define.d x, y, z
PrintRequester()
If StartPrinting("PBTestDruck")
Printer_y = Randoben
For i = 1 To 100
PrintText(Str(i) + " abcdefghijklmnopqrstuvwxyz ABCDEFGHUJKLMNOPQRSTUVWXYZ 01234567890")
Next
PrintText("")
PrintText("Jetzt kommt eine Tabelle:", "Arial", 12, #PB_Font_Bold, #Red)
PrintText("")
PrintText(RSet("x", 5) + RSet("Sqr(x)", 10) + RSet("Pow(x, 2)", 10))
PrintText("-------------------------")
For i = 0 To 10
x = i
y = Sqr(x)
z = Pow(x, 2)
PrintText(RSet(StrD(x), 5) + RSet(StrD(y, 5), 10) + RSet(StrD(z), 10))
Next
StopPrinting()
EndIf
End
Vielleicht hilft's.
Nachtrag:
Ich wurde hierzu inspiriert von
http://forums.purebasic.com/german/view ... 83052349f4. Ehre wem Ehre gebührt!
Re: Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 28.09.2013 17:32
von ts-soft
@Lothar Schirm
Du solltest in der Procedure, den mit #PB_Any geladenen Font auch wieder freigeben, sonsten wird für jede
Zeile ein neues Fontobjekt geladen, was den Speicher dann doch irgendwann mal belasten sollte
Oder FontNr static deklarieren und nur bei 0 (also beim ersten Aufruf) Font laden.
Re: Ausdrucken von Ergebnissen an bestimmten Stellen
Verfasst: 28.09.2013 17:55
von Lothar Schirm
ts-soft, vielen Dank für den Hinweis! Ich habe es oben in den Code eingefügt.