![]() |
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:
Wie bekomme ich das hin???
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. Einer eine Idee??? Viele Grüße Andreas |
AW: Programm komplett in den Tray minimieren
Ohne mir dein Code jetzt angeguckt zu haben, wie wäre es mit Messages an alle Fenster?
|
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. |
AW: Programm komplett in den Tray minimieren
Wieso, was stimmt da nicht?
|
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.
|
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? |
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. |
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 11:11 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