Seite 1 von 1
Drucken eines Listviewgadgets
Verfasst: 05.05.2006 12:36
von dysti
Hallo,
in VB setze ich diesen Befehl ein:
Printer.PaintPicture flexgrid.Picture, 0, 0
um ein Listviewgadget mit aktivierten Linien komplett auszudrucken.
Genau das möchte ich auch in PB realisieren, um eine Schüleranwesendheitsliste mit dem Liniengrid in Querformat auszudrucken.
Im Forum wird hingewiesen, man könnte erst in ein Image schreiben und das Image ausdrucken. Der Vorteil wäre bei dieser Methode, man hätte hiermit auch eine Druckvorschau gestaltet. Nun gut.
Ich bekomme es hin, das Listviewgadget zellenweise auszulesen, aber da habe ich nur die Werte und von Zeilenbreite, -höhe und Linien keine Spur.
Gibt es ein Beispiel?
Dysti
Verfasst: 05.05.2006 13:14
von bobobo
Du brauchst dafür kein Image zu bemühen.
Du "malst " quasi direkt auf dem Drucker. Ein Image
kann unter Umständen Größen annehmen die unbe-
haglich werden.
Vorher ein startprinting()
Drucker auswählen.
Danach "malst" Du die Texte und danach die Linien drum
rum (oder andersrum).
als Abschluß ein stopprinting()
Die Größe der Buchstaben ermittelst Du über die Blattgröße
des Druckers.
Hab da 'ne Prozedur mal zum Drucken mit drawtext()
benutzt, in der die FontHöhe auf Grund der Seitenhöhe
gesetzt wird. Kann man sicher noch schöner machen,
aber dafür hatte es gereicht.
Code: Alles auswählen
;PB3.94
Procedure Do_Print(name.s,t.s,FontID)
If PrintRequester()
If StartPrinting(name.s)
fontheight.f=0.30 * (PrinterPageHeight()/29.7)
Font=LoadFont(#FontPrint,"courier new",fontheight,#PB_Font_HighQuality|#PB_Font_Bold )
If StartDrawing(PrinterOutput())
DrawingFont(Font)
For i=1 To CountString(t.s, #CRLF$)
out.s=StringField(t.s,i,#CRLF$)
out.s=RemoveString(out,#CRLF$)
out.s=RemoveString(out,#LF$)
out.s=RemoveString(out,#CR$)
DrawText(out.s)
Locate(0,i*Fontheight/7*10)
Next i
StopDrawing()
EndIf
StopPrinting()
Bearbeitet=1
Else
Bearbeitet=0
EndIf
Else
Bearbeitet=0
EndIf
EndProcedure
Ansonsten wühl mal im
CodeArchiv such in Abteilung Printer.
Verfasst: 05.05.2006 14:20
von Karl
Fraiser hat mal eine UserLib geschrieben, die das Drucken ungemein vereinfacht:
http://www.purebasic.fr/german/viewtopic.php?t=7283
Damit kann man z. B. sehr elegant Tabellen schmieden, wobei Zahlen oder anderes unabhängig vom Font schön bündig untereinander stehen können.
Gruß Karl
Verfasst: 05.05.2006 16:16
von bobobo
@Karl .. Das kann man doch eh schon alles ??
Die Abfrage der Druckerwerte könnte aber brauchbar sein..
Verfasst: 06.05.2006 10:58
von dysti
Danke für die Hilfe. Werde es übers Wochenende ausprobieren.
Verfasst: 08.05.2006 08:25
von dysti
bobobo: Procedure Do_Print(name.s,t.s,FontID)
Mit dem Parameter t.s komme ich nicht zurecht. in welchen Format muß er sein? Muß ich die Tabellen werte auslesen und zusammen basteln un in deiner Procedure wird sie wieder auseinander gepuhlt?
Bist du so lieb und erklärst das bitte. Danke.
Verfasst: 08.05.2006 14:58
von bobobo
klar .. das t.s beinhaltete einen Text komplett mit Zeilenumbruch und so.
Das wurde dann auch komplett mit Zeilenumbruch mit dieser
Prozedur ausgedruckt. Da mein DruckFont auf Courier (Monospace)
hatte ich dann auch 'n gut ausgeglichenes Druckbild. Ich hatte allerdings
keine Tabelleninhalte sondern eher ne Art RechnungsText ausdrucken müssen.
Für Deinen Zweck musst Du aber wahrscheinlich pro auszudruckenden
Wert die Position berechnen (hier die Abhängigkeit der Fontgröße zur
Blattgröße beachten) und dann per locate() bzw in PB4 drawtext() den
Text positionieren.
Wenn Deine Wert-Ausgabe und Linienmalerei durch ein Startprinting()-
-Stopprinting() "umzingelt" wird, ist auch das druckbar. Der Ausdruck
wird ja erst erstellt nach dem StopPrinting()
Verfasst: 08.05.2006 17:37
von dysti
Ok, jetzt kann ich das richtig durchdenken.