Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Minimierungsprobleme (https://www.delphipraxis.net/51309-minimierungsprobleme.html)

emteg 10. Aug 2005 00:17


Minimierungsprobleme
 
(Sorry, mir ist kein titel eingefallen, der mein problem besser beschreiben könnte)

Mein Programm besteht aus mehreren Forms, die alle unabhängig von einander minimiert werden können und die außerdem einen eigenen taskbar eintragen haben. Außerdem verwendet mein programm ein tray icon.

Mein Ziel ist es, dass sobald mindestens ein form minimiert ist, ein tray icon angezeigt werden soll. Wenn keine form minimiert ist, soll das tray icon wieder verschwinden. Für alle forms soll ein und das selbe tray icon benutzt werden.

Ich benutze Jvcl und das dazugehörende Tray Icon. Ich könnte aber eventl auf das cooltray icon umsteigen, wenn das besser ist.

Und meine frage ist es jetzt, wie ich das erreichen kann. Ich weiß bereits, wie man die verschiedenen forms dazu bringt, einen eigenen taskbar eintrag anzugeigen UND nicht mit dem hauptform minimiert zu werden:

Delphi-Quellcode:
procedure TChannels.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle:=Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent:=GetDesktopWindow;
end;
Mein problem ist halt, dass ich die anderen forms nicht in das selbe tray icon zwingen kann, bzw. einfach den taskbar eintrag ausblenden kann.

Ich hoffe, dass ich mich einigermaßen verständlich ausgedrückt habe :wall:

r2c2 10. Aug 2005 07:43

Re: Minimierungsprobleme
 
Das sollte doch nicht so schwer sein:
- Du legst dir ne Public-Variable(Integer) in der MainForm an oder du bastelst dir gleich ne Klasse dafür
- Bei OnMinimize wird diese Variable erhöht
- Bei OnRestore(heißt das so? :gruebel: ) verringert
- Wenn die Variable > 0 Icon zeigen else Icon verstecken
- In deinem Fall würde ich auf die JVCL-Komponente verzichten, da die ja automatisch beim Minimieren das Icon anzeigt(oder?); das dürfte auch bei den anderen Komponenten so sein.
- Such dir also n paar Codeschnipsel, wie man das Icon selbst erzeugt(das findet sich sehr schnell, einfach suchen)
- Wenn du das richtig machen willst steck das in die anfangs erwähnte Klasse und mach dir ne eigene Komponente draus

mfg

Christian

emteg 10. Aug 2005 12:19

Re: Minimierungsprobleme
 
Das mit dem tray icon ist jetzt mal zunächst nicht soo wichtig. Mein hauptanliegen ist es, dass ich das "haupt form" minimieren kann, OHNE dass die anderen forms auch minmiert werden.
Wie mach ich das?

leddl 10. Aug 2005 12:26

Re: Minimierungsprobleme
 
Zitat:

Zitat von emteg
Und meine frage ist es jetzt, wie ich das erreichen kann. Ich weiß bereits, wie man die verschiedenen forms dazu bringt, einen eigenen taskbar eintrag anzugeigen UND nicht mit dem hauptform minimiert zu werden

Zitat:

Zitat von emteg
Das mit dem tray icon ist jetzt mal zunächst nicht soo wichtig. Mein hauptanliegen ist es, dass ich das "haupt form" minimieren kann, OHNE dass die anderen forms auch minmiert werden.
Wie mach ich das?

:gruebel: Wie jetzt? Oben meinste, du hast das mit dem Minimieren schon raus, und es geht um das Tray Icon, und jetzt sagste, das Tray Icon is nebensächlich und es geht ums Minimieren. Entscheid dich mal.

emteg 10. Aug 2005 12:46

Re: Minimierungsprobleme
 
Sorry, ich bin grade irgendwie nicht ganz beieinander, zuviel :roteyes:

Hast recht, das mit dem hauptform hab ich schon raus. Tatsächlich möchte ich wissen, wie ich in einem form das minimize event abfangen kann und das form dann quasi inkl. taskbar eintrag verstecken kann. Weil mit applicationevents geht das ja nur programmweit.

Ob ich jetzt auch das geschrieben hab was ich auch meine? :gruebel:

turboPASCAL 10. Aug 2005 14:30

Re: Minimierungsprobleme
 
Form Restore / welches Ereignis, Message

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, ... ;

type
  TFormX = class(TForm)
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;

  ...

implementation

...

procedure TFormX.WMSysCommand(var Msg: TWMSysCommand);
begin
  case (Msg.CmdType and $FFF0) of
     SC_MINIMIZE: begin
                    TrayIcon.Active := True; // Trayicon Anzeigen
                    FormX.Hide;             // Form verstecken
                  end;
     // SC_RESTORE : ;
     // SC_MAXIMIZE: ;
     // SC_CLOSE:   ;
     else
       inherited;
  end;
end;

emteg 10. Aug 2005 17:05

Re: Minimierungsprobleme
 
Hm...ich krieg da bei dem .hide eine zugriffsverletzung :gruebel:

turboPASCAL 10. Aug 2005 17:51

Re: Minimierungsprobleme
 
Fehler ? Wo, Was ? Sourcecode bitte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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