Seite 1 von 2

Drucken geht nicht

Verfasst: 08.07.2006 12:48
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

Verfasst: 08.07.2006 15:44
von mk-soft
äh :?:

Fehlt nicht was zwischen

Code: Alles auswählen

StartPrinting("Jahreskalender")
  ???
StopPrinting()
FF :wink:

Verfasst: 08.07.2006 21:01
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()
...

Verfasst: 08.07.2006 21:13
von PB42
Ist schon richtig, da fehlt was, aber mittlerweile bin ich selber klar gekommen, wie schön.

Verfasst: 08.07.2006 21:14
von Alves
Haha, ich bin schneller als Kaeru oder sonst wer.

Könntest du deine Lösung mit den anderen teilen?

Verfasst: 08.07.2006 21:19
von Kaeru Gaman
:lol:

Verfasst: 08.07.2006 21:34
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

Verfasst: 08.07.2006 21:51
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.

Verfasst: 08.07.2006 22:18
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

Verfasst: 08.07.2006 22:23
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.