Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Problem mit Cooltray
Nicor - Do 08.09.05 11:38
Titel: Problem mit Cooltray
Hallo ich bin gerade dabei mir ein Programm zu schreiben welches ein Symbol in die Systray legt und ansonsten nicht weiter sichtbar ist. Wenn man auf das Icon in der Systray klickt soll ein Screenshot vom aktuellen Fenster gemacht werden und der dann gespeichert werden. (Sinn von dem Programm ist es Screenshots von Fehlermeldungen zu machen).
Ich habe mir die wichtigen Sachen hier im Forum zusammengesucht und zusammenkopiert.
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.CoolTrayIcon1Startup(Sender: TObject; var ShowMainForm: Boolean); begin ShowMainForm := false; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure ScreenShotActiveWindow(Bild: TBitMap); var c : TCanvas; r, t : TRect; h : THandle; begin c := TCanvas.Create; c.Handle := GetWindowDC(GetDesktopWindow); h := GetForeGroundWindow; if h<>0 then GetWindowRect(h, t); try r := Rect(0,0,t.Right-t.left, t.Bottom-t.Top); Bild.Width := t.Right-t.left; Bild.Height := t.Bottom-t.Top; Bild.Canvas.CopyRect(r, c, t); finally ReleaseDC(0, c.handle); c.Free; end; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.CoolTrayIcon1Click(Sender: TObject); var pic : TBitMap begin
ScreenShotActiveWindow(pic); pic.SaveToFile('c:\test.bmp');
end;
end. |
Wie es aussieht habe ich beim Aufruf irgendwas verafft, da ich jedesmal wenn ich auf das Icon klicke einen Fehler bekomme.
Ich danke schonmal für die Hilfe
Mfg
s-off - Do 08.09.05 11:51
vielleicht solltest du dein problem etwas spezifizieren ^^
es macht sich sicherlich niemand die mühe, deinen code durchzulesen, geschweige denn in delphi einzubauen, wenn er nicht weiss, was für eine fehlermeldung du bekommst - oder vielleicht doch?!
laserflor - Do 08.09.05 11:53
Hallo Nicor
kleiner Tipp: Hinweise einschalten ;-)
pic ist nicht initialisiert
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.CoolTrayIcon1Click(Sender: TObject); var pic : TBitMap; begin pic:= TBitmap.Create; ScreenShotActiveWindow(pic); pic.SaveToFile('c:\test.bmp');
end; |
So sollte es funktionieren (bei mir tut's) :D
Gruß Rolf
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
GSE - Fr 09.09.05 14:12
Dann solltest du es nach dem Speichern aber auch wieder mit pic.Free freigeben.
Sonst frisst dein Programm ein riesiges Loch in den Speicher.
mfg
GSE
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!