Drucken eines Listviewgadgets

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Drucken eines Listviewgadgets

Beitrag 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
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

@Karl .. Das kann man doch eh schon alles ??

Die Abfrage der Druckerwerte könnte aber brauchbar sein..
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Danke für die Hilfe. Werde es übers Wochenende ausprobieren.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag 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.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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()
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Ok, jetzt kann ich das richtig durchdenken.
Antworten