Autor Beitrag
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 27.09.07 15:28 
Oft liest man in den unterschiedlichen Foren die Frage wie man seine Anwendung dazu bekommt sich beim Minimieren in den TNA Bereich zu verschieben. Unter anderem findet man hier in der Delphi Library einen ausführlicher Beitrag über dieses Thema: ...Icons in die TNA hinzufügen, ändern und löschen?

Das normale Minimieren einer Anwendung zur Taskbar wird von Windows visuell dargestellt. Man sieht also optisch das das Fenster der Anwendung zur Taskbar verschoben wird. Implementiert man nun aber die Funktion, dass die Anwendung nicht zur Taskbar sondern in den TNA Bereich verschoben wird, geht diese Effekt nach hinten los da es optisch aussieht als würde die Anwendung zur Taskbar verschoben wird.

Die folgende Funktion zeigt wie man diesen optischen "Minimieren-Effekt" nicht zur Taskbar sondern in den TNA Bereich programmiert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
type
  TTrayAnimationType = (tatMinimize, tatMaximize);

function TrayAnimation (AForm: TForm; AType: TTrayAnimationType): Boolean;
var
  HandleTray: HWND;
  RectForm,
  RectTray: TRect;
begin
  result := False;

  // TNA Handle erfragen
  HandleTray := FindWindowEx (FindWindow ('Shell_TrayWnd'nil), 0'TrayNotifyWnd'nil);
  if (HandleTray <> 0then
    // Positionen und Größen der Form ...
    if GetWindowRect (AForm.Handle, RectForm) then
      // ... und des TNA Bereichs erfragen
      if GetWindowRect (HandleTray, RectTray) then
        // Animation durchführen
        case AType of
          tatMinimize:
            if DrawAnimatedRects (AForm.Handle, IDANI_CAPTION, RectForm, RectTray) then
              result := True;
          tatMaximize:
            if DrawAnimatedRects (AForm.Handle, IDANI_CAPTION, RectTray, RectForm) then
              result := True;
          end;
end;


Wichtig dabei ist vor allem die Windows Funktion Suche im MSDN DRAWANIMATEDRECTS. Diese sorgt für den optischen Effekt.

Der Aufruf dieser Funktion ist simpel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
begin
  TrayAnimation (Self, tatMinimize);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TrayAnimation (Self, tatMaximize);
end;


Moderiert von user profile iconNarses: Beitrag geprüft und einsortiert am 21.04.2008

_________________
Ein Nutzer der Ecke ;-)