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! :allright:
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. :allright: :allright: :allright: