![]() |
Screenshot
Hi Delphianer
Ich befasse mich gerade mit den Screenshots
Delphi-Quellcode:
Dies funktioniert auch aber mir ist aufgefallen das es den Taskbar nicht mit shootet.
procedure Screenshot(shot: string);
var dibH : hBitmap; bits : pointer; info : TBITMAPINFO; width,height : integer; screenDC,dibDC : hDC; f : file of byte; FileHeader : TBITMAPFILEHEADER; begin screenDC := getDC(getDeskTopWindow); dibDC := createCompatibleDC(screenDC); width := getDeviceCaps(screenDC,HORZRES); height := getDeviceCaps(screenDC,VERTRES); info.bmiHeader.biXPelsPerMeter := round(getDeviceCaps(screenDC,LOGPIXELSX)*39.37); info.bmiHeader.biYPelsPerMeter := round(getDeviceCaps(screenDC,LOGPIXELSY)*39.37); zeromemory(@info,sizeOf(info)); with info.bmiHeader do begin biSize := sizeOf(TBITMAPINFOHEADER); biWidth := screen.width; biheight := screen.height; biplanes := 1; biBitCount := 24; biCompression := BI_RGB; end; dibH := createDIBSection(dibDC,info,DIB_RGB_COLORS,bits,0,0); selectObject(dibDC,dibH); bitblt( dibDC, 0,0,width,height, screenDC, 0,0, SRCCOPY); releaseDC(getDeskTopWindow,screenDC); assignFile(f,shot); reWrite(f); if width and 3 <> 0 then width := 4*((width div 4)+1); with fileHeader do begin bfType := ord('B')+(ord('M')shl 8); bfSize := sizeOf(TBITMAPFILEHEADER)+sizeOf(TBITMAPINFOHEADER)+width*height*3; bfOffBits := sizeOf(TBITMAPINFOHEADER); end; blockWrite(f,fileHeader,sizeOf(TBITMAPFILEHEADER)); blockWrite(f,info.bmiHeader,sizeOf(TBITMAPINFOHEADER)); blockWrite(f,bits^,width*height*3); closeFile(f); deleteObject(dibH); deleteDC(dibDC); end; procedure TForm1.BitBtn1Click(Sender: TObject); var shot:string; begin shot:='shot.jpg'; screenshot(shot); end; Weis wer warum? Update: Die Bildschirm Skallierung war auf 125% wenn ich sie auf 100% setze dann shottet es richtig und der Taskbar ist korrekt. Gibt es dafür ne Lösung wie man herausfinden kann welche skallierung gesetzt ist und es dann irgendwie berechen kann mit der screen.width und screen.height? Grüsse Zodi |
AW: Screenshot
Wie wäre es denn hier mit
Delphi-Quellcode:
Damit wird der gesamte Desktop in einem Bitmap gespeichert.
uses
Graphics; // Capture the entire screen // Screenshot des gesamten Bildschirms procedure ScreenShot(Bild: TBitMap); var c: TCanvas; r: TRect; begin c := TCanvas.Create; c.Handle := GetWindowDC(GetDesktopWindow); try r := Rect(0, 0, Screen.Width, Screen.Height); Bild.Width := Screen.Width; Bild.Height := Screen.Height; Bild.Canvas.CopyRect(r, c, r); finally ReleaseDC(0, c.Handle); c.Free; end; end; |
AW: Screenshot
Screen.DesktopRect ... als Quelle niemals 0..Width (das Selbe bei Height)
Zieh mal den rechten Monitor nach links, dann bleibt der MainMonitor (Index 0) fast immer auf Pixel 0, aber Monitor 2 hat eine negative Position (Left) und somit beginnt auch der Desktop (alle Monitore zusammen) weiter links. |
AW: Screenshot
Bei nur einem Monitor (den ich auch nur habe) geht es.
|
AW: Screenshot
Danke für die Antworten.
Habe es jetzt mit einem Manifest gelöst. Grüsse Zodi |
AW: Screenshot
Zitat:
Bei einem Monitor geht auch Form.Position = DesktopCenter, bei zwei Monitoren liegt das Bild dann in der Mitte, halb auf beiden Monitoren. -> ScreenCenter Geil ist auch, wenn man bei Entwickeln das Fenster auf dem zweiten Monitor hatte (vor allem damals, als die DesignForm noch frei umher flog) und dann auf PCs mit nur einem Monitor, einem kleineren Monitor oder keinem Monitor an dieser Stelle, dann ist das Fenster "weg". :lol: |
AW: Screenshot
Zitat:
|
AW: Screenshot
Zitat:
Sherlock |
AW: Screenshot
Zitat:
![]() |
AW: Screenshot
Passt alles nicht.
Hier muß ja nichts zusätzlich implementiert werden, sondern es braucht nur die eine Ausgangsposition genutzt werden, welche immer passt. Es ist sogar einfacher übersichtlicher das fertige Rect zu verwenden, anstatt selbst Eines zu bauen. :wink: Aber klar, wenn man es jetzt nicht braucht, dann könnte man auch "einfach" nur 0 verwenden (KISS) und dann später erstmal den Fehler zu suchen, wenn man das Programm doch weitergegeben oder sich einen zweiten Monitor gekauft hat. :angle: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz