Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Programm komplett in den Tray minimieren (https://www.delphipraxis.net/172848-programm-komplett-den-tray-minimieren.html)

af99 25. Jan 2013 10:32

Delphi-Version: 5

Programm komplett in den Tray minimieren
 
Hallo Zusammen,

ich habe ein Programm geschrieben welches ich in den Tray mit einem Hotkey minimieren möchte. Das Programm hat 2 Formulare. Wenn ich nun das Hauptformular und das 2. Formular geöffnet habe und den Hotkey betätige dann minimiert sich lediglich das Hauptformular nicht jedoch das 2. Formular. Dieses bleibt weiterhin sichtbar.
Ich benutze folgende Komponenten auf dem Hauptformular
- Trayicon
- applicationevents

Delphiversion XE

Delphi-Quellcode:
unit Unit11;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ExtCtrls, AppEvnts, Menus, StdCtrls, Buttons;

type
  TForm11 = class(TForm)
    TrayIcon1: TTrayIcon;
    ApplicationEvents1: TApplicationEvents;
    PopupMenu1: TPopupMenu;
    Anzeigen1: TMenuItem;
    ber1: TMenuItem;
    BitBtn1: TBitBtn;
    beenden1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure TrayIcon1DblClick(Sender: TObject);
    procedure ApplicationEvents1Minimize(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Anzeigen1Click(Sender: TObject);
    procedure beenden1Click(Sender: TObject);
    procedure ber1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    HotKeyID1: Integer;
    HotKeyID2: Integer;
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
    procedure anwendung_sichtbar;
  public
    { Public-Deklarationen }
  end;

var
  Form11: TForm11;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm11.anwendung_sichtbar;
begin
  { Hide the tray icon and show the window,
  setting its state property to wsNormal. }
  TrayIcon1.Visible := False;
  Show();
  WindowState := wsNormal;
  Application.BringToFront();
end;

procedure TForm11.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyID1 then
    anwendung_sichtbar;
  if Msg.HotKey = HotKeyID2 then
    ApplicationEvents1Minimize(Form11);
end;

procedure TForm11.Anzeigen1Click(Sender: TObject);
begin
  anwendung_sichtbar;
end;

procedure TForm11.ApplicationEvents1Minimize(Sender: TObject);
begin
  { Hide the window and set its state variable to wsMinimized. }
  Hide();
  //WindowState := wsMinimized;
  Application.Minimize;


  { Show the animated tray icon and also a hint balloon. }
  TrayIcon1.Visible := True;
  TrayIcon1.ShowBalloonHint;
end;

procedure TForm11.beenden1Click(Sender: TObject);
begin
  application.Terminate;
end;

procedure TForm11.ber1Click(Sender: TObject);
begin
  MessageDlg('Soennecken Server Dashboard' + CHR(10) + CHR(13) + 'Version 1.0', mtInformation, [mbOK], 0, mbOK);
end;

procedure TForm11.BitBtn1Click(Sender: TObject);
begin
  form1.show;
end;

procedure TForm11.FormCreate(Sender: TObject);
const
  VK_S = $53;
  VK_M = $4D;
begin
  HotKeyID1 := GlobalAddAtom(PChar(Application.Exename + '_Hotkey1'));
  RegisterHotKey(Handle, HotKeyID1, MOD_CONTROL + MOD_ALT, VK_S);

  HotKeyID2 := GlobalAddAtom(PChar(Application.Exename + '_Hotkey2'));
  RegisterHotKey(Handle, HotKeyID2, MOD_CONTROL + MOD_ALT, VK_M);


  TrayIcon1.Hint := 'SDash!';
  { Set up a hint balloon. }
  TrayIcon1.BalloonTitle := 'Bash reaktivieren';
  TrayIcon1.BalloonHint :=
    'Doppel click oder <Strg> + <Alt> + p = Anwendung sichtbar';
  TrayIcon1.BalloonFlags := bfInfo;
end;

procedure TForm11.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, HotKeyID1);
  GlobalDeleteAtom(HotKeyID1);

  UnRegisterHotKey(Handle, HotKeyID2);
  GlobalDeleteAtom(HotKeyID2);
end;

procedure TForm11.TrayIcon1DblClick(Sender: TObject);
begin
  anwendung_sichtbar;
end;

end.
Wie bekomme ich das hin???
Einer eine Idee???

Viele Grüße
Andreas

Popov 25. Jan 2013 11:15

AW: Programm komplett in den Tray minimieren
 
Ohne mir dein Code jetzt angeguckt zu haben, wie wäre es mit Messages an alle Fenster?

af99 25. Jan 2013 11:32

AW: Programm komplett in den Tray minimieren
 
Klar ich könnte alle Fenster auf Hide stellen. Dann müsste ich aber prüfen welche genau auf sind und diese nachher dann wieder sichtbar machen.
Ist aber doch umständlich.

Gibt es denn keinen globalen Befehl. Ich dachte eigentlich das das Application.Minimize; das übernimmt...macht es aber nicht.

Popov 25. Jan 2013 11:37

AW: Programm komplett in den Tray minimieren
 
Wieso, was stimmt da nicht?

af99 25. Jan 2013 11:50

AW: Programm komplett in den Tray minimieren
 
naja wie ich bereits sagte minimiert das Application.Minimize nur das Hauptformular was durch procedure TForm11.ApplicationEvents1Minimize(Sender: TObject); in den Tray verschwindet. Das 2. Formular (wenn es geöffnet ist) wird aber nicht in den Tray minimiert und bleibt weiterhin sichtbar. Ich dachte halt das Application.Minimize die gesammte Applikation incl. aller Formulare hier in diesem Fall in den Tray minimiert.

Popov 25. Jan 2013 12:02

AW: Programm komplett in den Tray minimieren
 
Also entweder mache ich etwas falsch oder es funktioniert. Zwar habe ich Application.Minimize selbst noch nie genutzt, zumindest nicht bewußt, aber der Test gerade verlief erfolgreich. Zwei Fenster, beide wurden minimiert, sowohl bei ShowModal, wie auch bei Show des zweiten Fensters.

Außerdem wird kein Fenster in den Tray minimiert. Wenn, dann werden die Fenster unsichtbar geschaltet.

Oder verwendest du eine spezielle Komponente dafür?

af99 25. Jan 2013 12:17

AW: Programm komplett in den Tray minimieren
 
jep Du hast recht.

das Hide(); in procedure TForm11.ApplicationEvents1Minimize(Sender: TObject); war der Übeltäter. nachdem ich das Hide() rausgenommen nahe minimiert er nun alle Fenster zum Tray.

Danke für Deine Holfe.

af99 28. Jan 2013 09:20

AW: Programm komplett in den Tray minimieren
 
mist ich hate was übersehen.

Nachdem ich das hide() herausgenommen habe werden zwar alle Fenster minimiert aber (natürlich) nicht mehr in der Taskleiste versteckt.

Hier dann nochmal wie kann ich alle geöffneten Fenster meiner Anwendung in den Tray minimieren ???

Danke für Eure Geduld
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz