Hi,
Hat jemand eine kurze Anleitung oder einen entsprechenden Code, der das aktuelle Fenster auf dem Standard-Drucker ausgibt (Hardcopy)?
Wieder einmal habe ich eine übersichtliche Eingabeseite programmiert, die die Programmeinstellungen übernimmt und abspeichert. Läuft in einem eigenen Fenster und funktioniert einwandfrei.
Nun möchte ich dem Anwender die Möglichkeit bieten, auf Knopfdruck (Button) eine Hardcopy auf dem Standarddrucker auszugeben. Ich möchte mir einfach die Arbeit sparen, jetzt auch auch noch eine Druckerausgabe zu programmieren, die dann vielleicht einmal in 5 Jahren genutzt wird. Für den Zweck spielt es keine Rolle, dass da auch ein paar Buttons mitgedruckt werden.
Danke für alle Hinweise, Tipps und Hilfen.
Viele Grüße
Christof
Einfach eine Hardcopy auf den Standarddrucker?
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
versuche es hiermit mal:
ansonsten mal die PrintScreen Class von Joe Carrick ansehen.
gruss by OHR
Jimmy
versuche es hiermit mal:
Code: Alles auswählen
#include "dll.ch"
#define KEYEVENTF_KEYUP 0x02
#define VK_MENU 0x12
#define VK_SNAPSHOT 0x2C
PROC main
LOCAL nWindow := 1
// 0 is entire screen, 1 is active window
wait "Press any key to copy the"+STR(nWindow)+" screen"
keybd_event(VK_SNAPSHOT, nWindow, 0, 0)
wait "Press any key to copy the focused window"
keybd_event(VK_MENU, 0, 0, 0)
keybd_event(VK_SNAPSHOT, 0, 0, 0)
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
wait
RETURN
DLLFUNCTION keybd_event(mvkey, nscan, flags, xtra) USING STDCALL FROM USER32.DLL
gruss by OHR
Jimmy
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Hi Jimmy,
danke für den Hinweis. Ich hab's ausprobiert. Wird damit nur der Tastendruck "Druck" bzw. "ALT+Druck" weitergeleitet?
Ich habe auch ein Hardcopy-Programm laufen. Wenn ich jetzt Deine Proc im Programm anstoße, wird das Hardcopy-Programm aufgerufen und das aktuelle Fenster zum Druck angeboten. Soweit i.O.
Schalte ich das Hardcopy-Programm aus (Programm heißt 'PrintKey'), passiert nix! Ist der Bildschirm dann in der Zwischenablage (hab' ich noch nicht ausprobiert)?
Gruß
Christof
danke für den Hinweis. Ich hab's ausprobiert. Wird damit nur der Tastendruck "Druck" bzw. "ALT+Druck" weitergeleitet?
Ich habe auch ein Hardcopy-Programm laufen. Wenn ich jetzt Deine Proc im Programm anstoße, wird das Hardcopy-Programm aufgerufen und das aktuelle Fenster zum Druck angeboten. Soweit i.O.
Schalte ich das Hardcopy-Programm aus (Programm heißt 'PrintKey'), passiert nix! Ist der Bildschirm dann in der Zwischenablage (hab' ich noch nicht ausprobiert)?
Gruß
Christof
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
"Keys" als beim "drucken"
Hier nun die Antwort (rundimentär) auf deine "Druck" Frage.
gruss by OHR
Jimmy
Nein, ich hab da wohl nicht ganz richtig gelesen und war mehr bei denbrandelh hat geschrieben: bedeuted das, dass Windows in der USER32.DLL eine Hardcopy Funktion eingebaut hat ?
"Keys" als beim "drucken"
Ja, wie ich schon sagte war ich mehr bei den "Keys" als beim "Druck".Christof hat geschrieben: Wird damit nur der Tastendruck "Druck" bzw. "ALT+Druck" weitergeleitet?
Hier nun die Antwort (rundimentär) auf deine "Druck" Frage.
gruss by OHR
Jimmy
Code: Alles auswählen
PROCEDURE PrtClip
LOCAL oClipboard := XbpClipboard():new():create()
...
oClipBoard:open()
aFormats := oClipBoard:queryFormats()
IF AScan( aFormats, XBPCLPBRD_BITMAP ) > 0
oBitmap := oClipBoard:getBuffer( XBPCLPBRD_BITMAP )
PrtClipB(oBitmap)
...
RETURN
FUNCTION PrtClipB(oBitMap)
LOCAL oPrinterPS, oSourcePS
LOCAL aPaperSize
LOCAL oBmp
LOCAL aRect := {0,0,oBitmap:xsize,oBitmap:ySize}
LOCAL lRet := .F.
oSourcePS := SetAppWindow():lockPS()
// use your PrinterPS()
oPrinterPS := PrinterPS()
IF oPrinterPS<>NIL
// PaperSize vs. Bitmap aRect
aPaperSize := oPrinterPS:device():paperSize()
oPrinterPS:device():startdoc()
oBitmap:draw(oPrinterPS,aRect)
oPrinterPS:device():enddoc()
lRet := .T.
oPrinterPS:destroy()
ENDIF
RETURN lRet