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 user profile iconTino: 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