Drucken geht nicht

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Drucken geht nicht

Beitrag von PB42 »

Hallo,

ich habe einen Jahreskalender programmiert, sodaß auf dem Fenster der fertige Jahreskalender erscheint. Diesen auszudrucken, klappt nicht, weil nur leere Seiten aus dem Drucker kommen. Mein bisheriger Versuch sieht so aus:

Code: Alles auswählen

Select eventID
Case #PB_Event_Gadget
  If EventGadgetID() = 13;Print  
  
  DefaultPrinter()
  PrintRequester()
  
  PageWidth.l = PrinterPageWidth() 
  PageHeight.l = PrinterPageHeight()     
   
  StartDrawing(PrinterOutput())

  StartPrinting("Jahreskalender")
  StopPrinting()

  StopDrawing()
  EndIf
EndSelect  
Danke für Hilfe.
PB42
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

äh :?:

Fehlt nicht was zwischen

Code: Alles auswählen

StartPrinting("Jahreskalender")
  ???
StopPrinting()
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

hab noch nie mit PB gedruck, aber im PB-example printer.pb sind die StartPrinting() und StartDrawing() -blöcke genau andersherum geschachtelt. ausserdem:
mk-soft hat geschrieben:...

Code: Alles auswählen

StartPrinting("Jahreskalender")
  ???
StopPrinting()
...
my pb stuff..
Bild..jedenfalls war das mal so.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Ist schon richtig, da fehlt was, aber mittlerweile bin ich selber klar gekommen, wie schön.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Haha, ich bin schneller als Kaeru oder sonst wer.

Könntest du deine Lösung mit den anderen teilen?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:lol:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

@Alves

Die Lösung sieht so aus:

Code: Alles auswählen

Select eventID
Case #PB_Event_Gadget
 If EventGadgetID() = 13;Print  
  
  hBmp.l       = CreateImage(0,5000,5000)
  hdcWnd.l     = GetDC_(hWnd)  
  hdcDesktop.l = GetDC_(hdcDesktop)
  hdcBmp.l     = CreateCompatibleDC_(hdcWnd)
 
  SelectObject_(hdcBmp,hBmp)
  StretchBlt_(hdcBmp,0,0,ImageWidth() ,ImageHeight() ,hdcDesktop,0,0,800,600,#SRCCOPY)
  
  DefaultPrinter()
  PrintRequester()
   
  StartPrinting("")
    StartDrawing(PrinterOutput())
    
    DrawImage(ImageID(),0,900)    
    
    StopDrawing()
  StopPrinting()
 EndIf
EndSelect 


Hab da einfach etwas aus den Print-Beispielen abgeschrieben und dann etwas modifizert. Auf XP läuft das jedenfalls. Nachteil: Man sieht auf dem Ausdruck nicht nur den Jahreskalender, sondern auch links daneben die Buttons wie StringGadget und OK usw., eben genauso, wie auf dem Bildschirm, wenn das Programm läuft.

Gruß PB42
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> ich habe einen Jahreskalender programmiert

nimm also das handle von dem bereich, wo du das kalenderblatt darstellst.
wenn das ein extra-image ist, brauchst du nur dieses an den drucker senden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Hallo Kaeru,

Danke für den Tipp, aber ich hab bisher einfach keine Ahnung von Handles. Und das Kalenderblatt besteht komplett aus TextGadgets. Ich probier mal morgen weiter und melde mich vielleicht nochmal.

PB42
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> das Kalenderblatt besteht komplett aus TextGadgets

hmm... gibt es ne möglichkeit, ein image von nem fansterbereich zu grabben?

*Help nachschlag*

hm.. grab image klappt nur von fertigen images...

wenn du bisher das komplette fenster in dein druck-image bekommen hast, könntest du den druckbereich aus diesem image in ein zweites grabben...

eine andere möglichkeit wäre, dein programm komplett umzustellen,
dass du dein kalenderblatt komplett in ein Image plottest von anfang an,
und dieses auf deinem fenster darstellst und eben auch ausdruckst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten