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 Systray Icon verschwindet (https://www.delphipraxis.net/67476-systray-icon-verschwindet.html)

Evian 15. Apr 2006 02:10


Systray Icon verschwindet
 
Hallo Zusammen,

ich nutzte

Delphi-Quellcode:
...
Shell_NotifyIcon(NIM_MODIFY,@NID);
um ein ICON im Systray hinzuzufügen und

Delphi-Quellcode:
procedure MainForm.FormShow(Sender: TObject);
var
  TaskBar : HWnd;
begin
  TaskBar := GetWindow(Handle,GW_Owner);
  ShowWindow(TaskBar,SW_Hide);
end;
damitt die Mainform nicht in der Taskbar angezeigt wird. Der BorderStyle dieser Form ist bsNone und der FormStyle normalerweise "fsStayOnTop". Wenn ich nun aber wärend der Laufzeit den FormStyle auf fsNormal ändere und dann mit der Maus über das Anwendungs-Icon im Systray fahre, dann verschwindet es, als wäre die Anwendung beendet. Ist sie aber natürlich nicht.

Hat jemand eine Ahnung, woran das liegt und wie ich das möglicherweise umgehen könnte?

gruß,

Evian

turboPASCAL 15. Apr 2006 07:27

Re: Systray Icon verschwindet
 
Nicht direkt, dazu müsste man ein wenig mehr Sourcecode sehen was du mit dem TrayIcon anstellst. :stupid:

klaus.meyer 15. Apr 2006 08:40

Re: Systray Icon verschwindet
 
Schau dir doch mal in der Code-Libary den Eintrag zu TNA an.

http://www.delphipraxis.net/internal...&highlight=tna

Kannst dir ja was davon abguckn ^^


Viele Grüße

Klaus

Evian 15. Apr 2006 12:55

Re: Systray Icon verschwindet
 
also ich nutze eigendlich standartcode um das Icon zu erzäugen.:


Delphi-Quellcode:
 program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'ADAM';
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Unit1.Form1.Starter;
  Application.ShowMainForm := false;
  Application.Run;
end.
Delphi-Quellcode:
unit Unit1;

interface

uses
  ...

const WM_TASKBAREVENT = WM_USER + 1;

type
  TForm1 = class(TForm)
    ...
    procedure TaskBarAddIcon(add:boolean);
    procedure TaskBarRemoveIcon;
    procedure FormShow(Sender: TObject);
    ...
  private
    procedure WMTASKBAREVENT(var message: TMessage);
    message WM_TASKBAREVENT;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

uses Unit2;

{$R *.dfm}

procedure Tform1.Starter;
BEGIN
  ...
  TaskBarAddIcon(true);
  ...
END;

//-------- Button im Contextmenü des Formulars um
// die Form entweder fsNormal, oder fsStayOnTop festzulegen -----------------

procedure TForm1.On1Click(Sender: TObject);
begin
  if form1.On1.Checked then
  BEGIN
    form1.FormStyle := fsNormal;
    form1.On1.Checked := false;
  END else
  BEGIN
    form1.FormStyle := fsStayOnTop;
    form1.On1.Checked := true;
  END;
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  TaskBarRemoveIcon;
  Application.Terminate;
end;


//----------Für Taskicon----------

procedure TForm1.WMTASKBAREVENT(var message: TMessage);
VAR
MousePos: TPOINT;
begin
  case message.LParamLo of
  WM_LBUTTONDOWN : BEGIN
  end;
  WM_RBUTTONDOWN : begin
  IconPop.Popup(MousePos.x, MousePos.y);
  end;
  WM_LBUTTONDBLCLK : begin
 
  end;
  end;
end;

procedure Tform1.TaskBarAddIcon(add:boolean);
var
tnid: TNOTIFYICONDATA;
begin
  with tnid do
  begin
    cbSize := sizeof(TNOTIFYICONDATA);
    Wnd := Form1.handle;
    uID := 1;
    uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
    uCallbackMessage := WM_TASKBAREVENT;
    hIcon := application.icon.handle;
  end;
  strcopy(tnid.szTip,'ADAM');
  if add then
  Shell_NotifyIcon(NIM_ADD, @tnid) else
  Shell_NotifyIcon(NIM_MODIFY, @tnid)
end;

procedure TForm1.TaskBarRemoveIcon;
var
tnid: TNOTIFYICONDATA ;
begin
  tnid.cbSize := sizeof(TNOTIFYICONDATA);
  tnid.Wnd := Form1.handle;
  tnid.uID := 1;
  Shell_NotifyIcon(NIM_DELETE, @tnid);
end;

procedure TForm1.FormShow(Sender: TObject);
var
  Owner: HWnd;
begin
  Owner := GetWindow(Form1.Handle,GW_OWNER);
  If Owner<>0 Then
  ShowWindow(Owner,SW_HIDE);
end;

//-------- Button im Contextmenü des TrayIcons -----------------
procedure TForm1.OnlineCheck1Click(Sender: TObject);
begin
  Application.ShowMainForm := true;
  Form1.Show;
end;

...
Wenn man das Programm startet ist die Mainform noch nicht sichtbar, weil "Application.ShowMainForm := false".
Wärend der Laufzeit wechselt öfter das Tray-Icon.. indem ich pplication.Icon ein neues Icon zuweise und dann TaskBarAddIcon(false); aufrufe. Keine Ahung, aber vielleicht liegt es daran?

ManuMF 15. Apr 2006 15:06

Re: Systray Icon verschwindet
 
Hallo,

ich hatte damit ab und zu Probleme, die ich gelöst habe, in dem ich TNotifyIconData global (aber wohl besser: Private) deklariert habe und in der Lösch-Prozedur alles bis auf Wnd und uID (und natürlich den Shell_...-Aufruf) weggelassen habe.

Edit: So steht es ja auch in der CodeLib.

Gruß,
ManuMF

Luckie 15. Apr 2006 18:14

Re: Systray Icon verschwindet
 
TNOTIFYICONDATA muss global sein, sonst arbeitest du ja immer mit einer anderen TNOTIFYICONDATA Struktur.

Evian 19. Apr 2006 13:38

Re: Systray Icon verschwindet
 
tnid: TNOTIFYICONDATA; ist jetzt Global, trotzdem verschwindet das Icon, wenn ich den FormStyle auf fsNormal stelle. kA. warum, aber ich habe jetzt erstmal die Option den Formstyle zu ändern rausgenommen.

Luckie 19. Apr 2006 13:41

Re: Systray Icon verschwindet
 
Man sollte die Hilfe lesen und auch die Hinweise beachten:
Zitat:

Hinweis

Der Wert von FormStyle sollte nicht zur Laufzeit geändert werden.
Beim Ändern des FormStyles wird das Fenster neu erzeugt und bekommt somit ein neues Handle. Es stimmt somit nicht mehr mit dem Handle überein, welches du zuvor beim Erstellen des TNA Icons angegeben hast.

Evian 19. Apr 2006 13:59

Re: Systray Icon verschwindet
 
Ok Entschuldigung, werd mir beim nächsten Mal sofort die Hilfe zu Gemüte führen...
auch wenn die nicht ganz so freundlich ist, wie die DP-Community :D


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