![]() |
Screenshot immer nur weiß
Hallo,
mein Programm ist minimiert im Systray und soll einen Screenshot machen, aber das Bild ist immer nur weiß. Ich benutze folgende Prozedur:
Delphi-Quellcode:
Wenn ich eine "normale" Anwendung habe, welche nicht im Systray ist, geht alles einwandfrei. :gruebel:
procedure MakeScreenShot(const ATarget: TBitmap);
var DesktopDC: HDC; begin DesktopDC := CreateDC('DISPLAY', nil, nil, nil); // habe auch schon GetWindowDC(0) versucht try ATarget.PixelFormat := pfDevice; ATarget.Width := Form1.Width; ATarget.Height := Form1.Height; BitBlt(ATarget.Canvas.Handle, Form1.Left, Form1.Top, Form1.Width, Form1.Height, DesktopDC, 0, 0, SRCCOPY); finally DeleteDC(DesktopDC); end; end; |
Re: Screenshot immer nur weiß
Versuchs mal so.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Canvas: TCanvas; Bitmap: TBitmap; begin Canvas := TCanvas.Create; try Canvas.Handle := GetWindowDC(0); try Bitmap := TBitmap.Create; try Bitmap.Height := Screen.Height; Bitmap.Width := Screen.Width; BitBlt(Bitmap.Canvas.Handle,0,0, Screen.Width, Screen.Height, Canvas.Handle, 0, 0, Bitmap.Canvas.CopyMode); Bitmap.SaveToFile('C:\Hallo.bmp'); finally Bitmap.Free; end; finally ReleaseDC(0, Canvas.Handle); end; finally Canvas.Free; end; end; |
Re: Screenshot immer nur weiß
Delphi-Quellcode:
so geht das :???:
var a:hdc;
begin a := GetWindowDC(GetDesktopWindow); BitBlt(Canvas.Handle,0,0,width,height,a,0,0,SRCCOPY); end; |
Re: Screenshot immer nur weiß
@sniper: das ist derselbe Code wie meiner und der funktioniert nicht.
@gerrit89: Danke! Dein Code funktioniert, nur habe ich nun ein Problem mit Snipers Code ( ![]() Ich bekomme hier einen Fehler (Zugriffsverletzung in der ntdll.dll):
Delphi-Quellcode:
Gruß
Tree := AddNode(Tree,Bitmap2.Canvas.Pixels[x,y]);
Sascha |
Re: Screenshot immer nur weiß
Zitat:
|
Re: Screenshot immer nur weiß
Hast du beachtet, dass mein Programm minimiert im SysTray ist?
Wenn es maximiert ist, dann funnktioniert der Code, aber wenn das Programm im Hintergrund läuft, dann geht es nicht. |
Re: Screenshot immer nur weiß
Aber ich glaube wenn du in deinen code nach bitblt einfach Folgendes einfügst :
Delphi-Quellcode:
Dann müsste der genau so funktionieren oder :gruebel:
ATarget.SaveToFile('C:\Hallo.bmp');
|
Re: Screenshot immer nur weiß
Zitat:
|
Re: Screenshot immer nur weiß
ja tut er ja auch, wie gesagt, nur funktioniert das ganze mit dem code von sniper nicht mehr, aber beides muss harmonieren, sonst bekomme ich ja nicht die am häufigsten auftretende farbe.
|
Re: Screenshot immer nur weiß
Das Code funct. nur leide beim ersten Durchlauf, d.h. man kann es nur einmal feststellen im laufe des "Programlebens" welche farbe ist die am häufigsten vorgekommene....
Das liege daran das Tree variable und alle Child Links gelöscht werden müssen, und zum ersten Mal sind sie auch "leer"(nil). Ich versuche "TREE" noch immer zu löschen... :wall: :firejump: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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