Seite 2 von 2
Re: Drucken, Bildschirm drucken
Verfasst: 11.02.2013 23:11
von ts-soft
Kallewirsch hat geschrieben:sag mir mal einer warum in gewünschter größe abgespeichert wird
und der Ausdruck in anderer Größe ist?
Der Bildschirm und Dein Drucker verwenden eine unterschiedliche Dichte der Pixel (DPI , Dotch per Inch).
Windows hat bei Standardeinstellung 96 DPI, während beim Drucken meist 600 DPI genutzt werden, so
das ein Bild ~6x kleiner gedruckt wird, wenn man das nicht anpasst.
Weitere Infos:
http://de.wikipedia.org/wiki/Punktdichte
Gruß
Thomas
Re: Drucken, Bildschirm drucken
Verfasst: 13.02.2013 14:43
von dysti
Hier ein Ansatz:
Achtung: vorher manuell den Drucker auf Querdruck stellen
Code: Alles auswählen
EnableExplicit
ExamineDesktops()
Define Width.l, Height.l, Depth.l, ImageID.l, Bitmap.l,TargetDC.l,SourceDC.l,verh.i,neux.i,neuy.i
Width= DesktopWidth(0)
Height= DesktopHeight(0)
Depth= DesktopDepth(0)
ImageID= CreateImage(#PB_Any,Width.l,Height.l,Depth.l)
Bitmap= ImageID(ImageID.l)
TargetDC= StartDrawing(ImageOutput(ImageID.l))
If IsImage(ImageID.l) And TargetDC.l
SourceDC.l = GetDC_(GetDesktopWindow_())
BitBlt_(TargetDC.l,0,0,Width.l,Height.l,SourceDC.l,0,0,#SRCCOPY)
ReleaseDC_(GetDesktopWindow_(),SourceDC.l)
StopDrawing()
;vorher manuell den Drucker auf Querdruck stellen
If PrintRequester()
verh=(PrinterPageWidth() / DesktopWidth(0))
neux=ImageWidth(ImageID)*verh
neuy=ImageHeight(ImageID)*verh
ResizeImage(ImageID,neux,neuy)
If StartPrinting("ScreenshotPrint")
If StartDrawing(PrinterOutput())
DrawImage(ImageID(ImageID), 0, 0)
StopDrawing()
EndIf
StopPrinting()
EndIf
EndIf
EndIf
Re: Drucken, Bildschirm drucken
Verfasst: 14.02.2013 09:58
von dysti
Hier ein anderes Beispiel, was ich gefunden habe.
Das sollte erstmal an Beispielen langen.
Auch hier den Drucker vorher manuell auf Querdruck stellen:
Code: Alles auswählen
#offsetX = 0
#offsetY = 0
#percentX = 1
#percentY = #percentX
Procedure PrintScreenEx(offsetX.f, offsetY.f, widthPercent.f, heightPercent.f)
hDcDesktop = GetDC_(GetDesktopWindow_())
w = GetSystemMetrics_(#SM_CXSCREEN)
h = GetSystemMetrics_(#SM_CYSCREEN)
CreateImage(0, w, h)
hDC = StartDrawing(ImageOutput(0))
BitBlt_(hDC, 0, 0, w, h, hDcDesktop, 0, 0, #SRCCOPY)
StopDrawing()
ReleaseDC_(GetDesktopWindow_(), hDcDesktop)
GrabImage(0, 1, offsetX * w, offsetY * h, widthPercent * w, heightPercent * h)
FreeImage(0)
DefaultPrinter()
If 1.0 * ImageWidth(1) / PrinterPageWidth() >= 1.0 * ImageHeight(1) / PrinterPageHeight()
pw = PrinterPageWidth()
ph = ImageHeight(1) * PrinterPageWidth() / ImageWidth(1)
Else
ph = PrinterPageHeight()
pw = ImageWidth(1) * PrinterPageHeight() / ImageHeight(1)
EndIf
If StartPrinting("Print_Screen")
If StartDrawing(PrinterOutput())
DrawImage(ImageID(1), (PrinterPageWidth() - pw)/2, (PrinterPageHeight() - ph)/2, pw, ph)
StopDrawing()
EndIf
StopPrinting()
EndIf
EndProcedure
PrintScreenEx(#offsetX, #offsetY, #percentX, #percentY)
Re: Drucken, Bildschirm drucken
Verfasst: 16.02.2013 13:14
von Kallewirsch
Hi dysti,
vielen DANK für deine Beispiele!
Hier ein anderes Beispiel, was ich gefunden habe.
Sag mal.....wo findet man solche Beispiele?
Viele Grüße
Kallewirsch
Re: Drucken, Bildschirm drucken
Verfasst: 16.02.2013 13:45
von dysti
Habe meine Festplatten durchforstet.
Auf jeden Fall müßten Teile davon evtl. noch im Codearchiv vorhanden sein.
Siehe nur die Links oben rechts hier im Forum.
Re: Drucken, Bildschirm drucken
Verfasst: 18.02.2013 21:27
von Kallewirsch
so...Thema erledigt
Vielen Dank an dysti,....der mir die tollen Beispiele geliefert hat, ohne die ich nicht weiter gekommen wäre.
(Die nächstenFragen kommen bestimmt!)
Gruß
Kallewirsch
Re: Drucken, Bildschirm drucken
Verfasst: 20.03.2013 20:56
von dibro
@dysti
Danke für die Beispiele, hilft mir in einem ähnlichen Fall schnell weiter.
Ich habe ein Fenster mit mehreren Panels, auf denen Einstellungen und Rechenergebnisse sind, die will ich nacheinander als Doku ausgeben
und als pdf speichern.
Kann ich alles prima gebrauchen.
