Seite 1 von 1

Nochmal Problem mit Drucken

Verfasst: 10.07.2006 14:25
von PB42
Hallo,

wenn ich bei meinem Programm den Druck-Vorgang starte, läuft der Druck beim ersten Anlauf einwandfrei, beim zweiten kommt nur eine schwarze Seite raus und beim dritten wieder der gewünschte Ausdruck usw.

Durch eine weitere Verzweigung (siehe Code) habe ich festgestellt, daß ich für jeden zweiten erfolgreichen Ausdruck zuvor immer erst zweimal den Button "Print" (ButtonGadget 13) klicken muß, bevor ich den eigentlichen Druck dann über "Drucken" am Standarddrucker starte. Woran mag das liegen?

Edit: Ich muß noch dazu schreiben, daß ich die Anleitung, wie man den Druckteil ins Programm schreibt, einfach aus PureArea.net rauskopiert habe. Dort steht

Code: Alles auswählen

hWnd.l = OpenWindow(0, 100, 120, #WindowWidth, #WindowHeight, #PB_Window_MinimizeGadget, "PureBasic - Gadget Demonstration")
So kommt die Variable hWnd zustande. Wenn ich das aber in meinem Programm genauso mache, nämlich

Code: Alles auswählen

hWnd.l = OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"Jahreskalender")
kommen immer nur schwarze Seiten aus dem Drucker, also habe ich das mit dem hWnd.l vor OpenWindow weg gelassen. Wahrscheinlich liegt es daran, aber dann müßte in dem Code unten etwas verändert werden. Fragt sich nur, wie's gemacht wird.

Code: Alles auswählen

Select eventID
Case #PB_Event_Gadget
 If EventGadgetID() = 13;Print
 ActivateGadget(9)
  
  hBmp.l       = CreateImage(0,2000,2000)  
  hdcWnd.l     = GetDC_(hWnd) 
  hdcDesktop.l = GetDC_(hdcDesktop)
  hdcBmp.l     = CreateCompatibleDC_(hWnd)
 
  SelectObject_(hdcBmp,hBmp)
  StretchBlt_(hdcBmp,0,0,ImageWidth() ,ImageHeight() ,hdcDesktop,75,22,705,550,#SRCCOPY)
  
  DefaultPrinter()
  PrintRequester()
  
    Zl = Zl+1
    Zahl.f = Zl/2
    If Zahl.f - Int(Zahl.f) = 0
    Goto weiter
    EndIf
      StartPrinting("")
      StartDrawing(PrinterOutput()) 
      DrawImage(ImageID(),0,900,5000,5000)  
      StopDrawing()
      StopPrinting()
    weiter:   
   
 EndIf
EndSelect 

PB42

Verfasst: 10.07.2006 15:56
von Tafkadasom2k5
Mh, kenne mich auf dem Gebiet nicht so sonderlich aus, aber als Erstes nimm mal den Goto da raus.
Das ist unsauber und unsicher und einfach schrecklich für jeden, der am Ende alles noch nachvollziehen soll..

(Siehe auch "ComeFrom"-Befehl in Wikipedia ;) )


Gr33tz
Tafkadasom2k5

Problem erledigt!

Verfasst: 10.07.2006 16:00
von PB42
In meinem Code fehlte eine Zeile, welche allerdings im Beispiel-Code von PureArea.net falsch drin steht und somit erst nach der Korrektur in meinem Code wirken konnte. Und zwar richtig. Müßte ich mal melden.

PB 42

Edit: Das GOTO ist raus, denn das brauche ich jetzt ja nicht mehr. :)

Verfasst: 10.07.2006 18:21
von Kaeru Gaman
ich hoffe, ich kann mehr zur klärung beitragen, als die verwirrung vergrößern...

wenn du
a) alles schwarz bekommst und
b) ein image ausdruckst
dann ist das image frei von inhalt.

*verwirrt*

hattest du nicht ein brauchbares ergebnis erzeugen können?
(letzter thread)

ich mein, wir haben doch rausgearbeitet, dass du den druckbereich gleich im übertragungsbefehl beschneiden kannst.

wenn du dann jedes zweite mal ein BLACK bekommst, das weist doch darauf hin, dass da ein REFRESH für den bereich fehlt, den du drucken willst.

(und diese aussage ist komplett systemunabhängig, diese schlussfolgerung ist logisch auf UNIX, auf WINDOWS und auf allen anderen systemen auch)

Verfasst: 11.07.2006 13:02
von PB42
"wenn du
a) alles schwarz bekommst und
b) ein image ausdruckst
dann ist das image frei von inhalt".

Das war mir klar mit meinem bescheidenen IQ. Auch, daß da der Refresh fehlte. Nur war die Frage, wie das kommt. Das Ergebnis war ja schon insofern brauchbar, als der Ausdruck genau so funktionierte, wie ich den haben wollte, allerdings immer nur jedes zweite Mal. Da fehlte einfach noch eine Zeile im Code, nämlich

Code: Alles auswählen

hdcDesktop.l = GetDesktopWindow_()
Das erklärt in dem Fall alles. Hat das einer bemerkt?

PB42

Verfasst: 11.07.2006 13:38
von Kaeru Gaman
> Das war mir klar mit meinem bescheidenen IQ.

höi... so war das nich gemeint... ich wollte dir nich aufn schlips treten...

Verfasst: 11.07.2006 14:54
von PB42
Weiß ich doch. :)