AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm komplett in den Tray minimieren

Ein Thema von af99 · begonnen am 25. Jan 2013 · letzter Beitrag vom 28. Jan 2013
Antwort Antwort
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#1

Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 10:32
Delphi-Version: 5
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

Geändert von af99 (25. Jan 2013 um 10:37 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 11:15
Ohne mir dein Code jetzt angeguckt zu haben, wie wäre es mit Messages an alle Fenster?
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#3

AW: Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 11:32
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 11:37
Wieso, was stimmt da nicht?
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#5

AW: Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 11:50
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 12:02
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?
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#7

AW: Programm komplett in den Tray minimieren

  Alt 25. Jan 2013, 12:17
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.
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#8

AW: Programm komplett in den Tray minimieren

  Alt 28. Jan 2013, 09:20
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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