Nochmal Problem mit Drucken

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

Nochmal Problem mit Drucken

Beitrag 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
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Problem erledigt!

Beitrag 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. :)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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)
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 »

"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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
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 »

Weiß ich doch. :)
Zuletzt geändert von PB42 am 11.07.2006 18:51, insgesamt 2-mal geändert.
Antworten