Drucken, Bildschirm drucken

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Drucken, Bildschirm drucken

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Drucken, Bildschirm drucken

Beitrag 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
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Drucken, Bildschirm drucken

Beitrag 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) 
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Drucken, Bildschirm drucken

Beitrag 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
PureBasic 5.00 (Windows - x86)
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Drucken, Bildschirm drucken

Beitrag 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.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Drucken, Bildschirm drucken

Beitrag 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
PureBasic 5.00 (Windows - x86)
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: Drucken, Bildschirm drucken

Beitrag 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:
Gruß aus Solingen, PB 6.0 Win 10 Pro
Antworten