![]() |
Systray Icon verschwindet
Hallo Zusammen,
ich nutzte
Delphi-Quellcode:
um ein ICON im Systray hinzuzufügen und
...
Shell_NotifyIcon(NIM_MODIFY,@NID);
Delphi-Quellcode:
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.
procedure MainForm.FormShow(Sender: TObject);
var TaskBar : HWnd; begin TaskBar := GetWindow(Handle,GW_Owner); ShowWindow(TaskBar,SW_Hide); end; Hat jemand eine Ahnung, woran das liegt und wie ich das möglicherweise umgehen könnte? gruß, Evian |
Re: Systray Icon verschwindet
Nicht direkt, dazu müsste man ein wenig mehr Sourcecode sehen was du mit dem TrayIcon anstellst. :stupid:
|
Re: Systray Icon verschwindet
Schau dir doch mal in der Code-Libary den Eintrag zu TNA an.
![]() Kannst dir ja was davon abguckn ^^ Viele Grüße Klaus |
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:
Wenn man das Programm startet ist die Mainform noch nicht sichtbar, weil "Application.ShowMainForm := false".
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; ... 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? |
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 |
Re: Systray Icon verschwindet
TNOTIFYICONDATA muss global sein, sonst arbeitest du ja immer mit einer anderen TNOTIFYICONDATA Struktur.
|
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.
|
Re: Systray Icon verschwindet
Man sollte die Hilfe lesen und auch die Hinweise beachten:
Zitat:
|
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 02:56 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-2025 by Thomas Breitkreuz