![]() |
Programm beim start als TNA icon ablegen
Hi
habe mal folgendes Problem ich möchte mein Programm beim Autostart direkt als TNA icon ablegen habe mich mal durch das forum gekämpft aber nichts richtiges gefunden. der code hier minimiert mir erst das Programm als TNA icon wenn ich unten auf der taskleite auf das feld mit meinem Programm drücke wie kann ich es aber direkt minimiert lassen
Delphi-Quellcode:
muss man da nur was ändern
unit Unit1; // Anmeldung
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ShellApi, Mask,XPMan, DB, DBTables, OleCtrls,DateUtils, SHDocVw,INIFiles, jpeg, AppEvnts; const WM_TASKBAREVENT = WM_USER + 1; type TForm1 = class(TForm) ApplicationEvents1: TApplicationEvents; procedure ApplicationEvents1Minimize(Sender: TObject); private procedure WMTaskbarEvent(var Message: TMessage); message WM_TASKBAREVENT; procedure TaskBarRemoveIcon; procedure TaskBarAddIcon; public end; var Form1: TForm1; implementation uses {$R *.dfm} procedure TForm1.ApplicationEvents1Minimize(Sender: TObject); begin TaskBarAddIcon; end; procedure TForm1.TaskBarAddIcon; var tnid: TNotifyIconData; Owner: HWnd; 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; PostMessage(Application.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0); end; StrCopy(tnid.szTip, 'Runterfahren'); Shell_NotifyIcon(NIM_ADD, @tnid); Owner:=GetWindow(Form1.Handle,GW_OWNER); If Owner<>0 then ShowWindow(Owner,SW_HIDE); end; procedure TForm1.TaskBarRemoveIcon; var tnid: TNotifyIconData; Owner: HWnd; begin tnid.cbSize := SizeOf(TNotifyIconData); tnid.Wnd := Form1.Handle; tnid.uID := 1; Shell_NotifyIcon(NIM_DELETE, @tnid); Owner:=GetWindow(Form1.Handle,GW_OWNER); If Owner<>0 then begin ShowWindow(Owner,SW_Show); ShowWindow(Owner,SW_Normal); end; end; procedure TForm1.WMTaskbarEvent(var Message: TMessage); var Point: TPoint; begin case Message.LParamLo of WM_LBUTTONDOWN: TaskBarRemoveIcon; WM_RBUTTONDOWN: begin SetForegroundWindow(Handle); GetCursorPos(point); end; end; end; end. |
Re: Programm beim start als TNA icon ablegen
Kannst du nicht einfach TaskbarAddIcon direkt aufrufen, z.B. im FormCreate-Event?
Übrigens, nur so nebenbei, bei ![]() |
Re: Programm beim start als TNA icon ablegen
Zitat:
|
Re: Programm beim start als TNA icon ablegen
Ich hätte da ein
![]() |
Re: Programm beim start als TNA icon ablegen
Liste der Anhänge anzeigen (Anzahl: 1)
hab mir die funltion mal angeguckt aber das ist auch nicht das was ich meine dein Programm Startet auch sofort. aber es soll ja minimirt unten rechts als icon starten und erst wenn ich drauf drücke aufs icon soll es gross werden.
Es funtzt soweit bei mir auch ganz gut nur mein Programm startet Groß und nicht minimiert als icon |
Re: Programm beim start als TNA icon ablegen
Und wenn du dein Hauptformular halt minimiert startest?
|
Re: Programm beim start als TNA icon ablegen
hab ich auch hiermit versucht
Delphi-Quellcode:
wie geschrieben hab das ganze forum auf den kopf gestelltApplication.Minimize; |
Re: Programm beim start als TNA icon ablegen
Ich dachte mehr daran, den WindowState im Objektinspektor auf wsMinimized zu stellen (oder wie das in Delphi eben hieß), geht das nicht?
|
Re: Programm beim start als TNA icon ablegen
ich habe das mal vor einiger Zeit so gemacht, dass ich mir ein Form als kleines Startfenster gemacht habe, dort wurde dann das Hauptform erzeugt und in die TNA gepackt. Dann wurde das Startform geschlossen. Das war praktisch wie ein kleiner Splashscreen mit ner Startmitteilung.
Bei Klick auf das TNA-Icon gabs dann ein Popupmenu mit Öffnen, Beenden etc. Müsste allerdings den Code erstmal suchen.... |
Re: Programm beim start als TNA icon ablegen
Was spricht eigentlich dagegen TCoolTrayIcon zu verwenden?
|
Re: Programm beim start als TNA icon ablegen
[bitte löschen]
|
Re: Programm beim start als TNA icon ablegen
Liste der Anhänge anzeigen (Anzahl: 1)
so, hier ist ne kleine Testapp im Anhang. Vielleicht hilfts ja ;)
|
Re: Programm beim start als TNA icon ablegen
Zitat:
Delphi-Quellcode:
Siehe letzte beiden Anweisungen
Procedure Tfrm_MainForm.DoCreate;
Begin fTaskBarNewReg := RegisterWindowMessage('TaskbarCreated'); fTaskBarPopupMenuMsg := RegisterWindowMessage('TaskBarPopupMenu'); // remove for multiple instances fInstanceMsg := RegisterWindowMessage('TaskBarIconExampleApp'); Inherited DoCreate; // remove for multiple instances SendMessage(HWND_BROADCAST, fInstanceMsg, Handle, 0); // >>>> folgendes neu hinzu TaskBarAddIcon; Application.ShowMainForm := false; // <<<< bis hier End; |
Re: Programm beim start als TNA icon ablegen
Danke euch nochmal für die Antorten habe es jetzt aber mal anders gelöst
Falls es jemanden Interessiert oder es mal brauch der Code ist auch ziemlich einfach zu verstehen
Delphi-Quellcode:
Somit wird das Programm gleich beim Start als TNA Icon angezeigt
unit Unit1;
interface uses ShellApi; const WM_TASKBAREVENT = WM_USER + 1; type TForm1 = class(TForm) TNATimer2: TTimer; TNAPopup1: TPopupMenu; TNAImage2: TImage; Runterfahren1: TMenuItem; Beenden1: TMenuItem; procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TNATimer2Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure oeffnen1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Timer3Timer(Sender: TObject); private procedure TaskBarRemoveIcon; procedure TaskBarAddIcon; protected procedure WMTaskbarEvent(var Message: TMessage); message WM_TASKBAREVENT; end; var Form1: TForm1; implementation uses var count :Integer; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin TaskBarAddIcon; // Icon setzen end; procedure TForm1.FormShow(Sender: TObject); begin ShowWindow(GetWindow(handle,GW_OWNER),SW_HIDE); // Taskbareintrag löschen end; //=========Bei Formstart Iconsetzen============================================= procedure TForm1.TNATimer2Timer(Sender: TObject); begin Inc(count); if count = 3 then begin Self.Hide; TNATimer2.Enabled:= False; end; end; //==================Icon setzen================================================= procedure TForm1.TaskBarAddIcon; var tnid: TNotifyIconData; begin tnid.cbSize := SizeOf(TNotifyIconData); tnid.Wnd := Form1.Handle; tnid.uID := 1; tnid.UFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP; tnid.uCallbackMessage:= WM_TASKBAREVENT; tnid.hIcon:= Form1.TNAImage2.Picture.Icon.Handle; strcopy(tnid.szTip,'Rechner Runterfahren'); Shell_NotifyIcon(NIM_Add, @tnid) end; //===============Beim öffnen des Icon( Popup)=================================== procedure TForm1.oeffnen1Click(Sender: TObject); begin Form1.Show; Timer3.Enabled:= True; end; //===========Nach erneuten öfnnen des Programms wieder schließen================ procedure TForm1.Timer3Timer(Sender: TObject); begin Self.Hide; Timer3.Enabled:= False; end; //===============Beim schließen des Icon( Popup)================================ procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; //=====Beim Form schließen Icon wieder aufräumen================================ procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin TaskBarRemoveIcon; end; //==================Icon weg==================================================== procedure TForm1.TaskBarRemoveIcon; var tnid: TNotifyIconData; begin tnid.cbSize := SizeOf(TNotifyIconData); tnid.Wnd := Form1.Handle; tnid.uID := 1; Shell_NotifyIcon(NIM_DELETE, @tnid) end; //=================Icon Rechts/Links klick ===================================== procedure TForm1.WMTaskbarEvent(var Message: TMessage); var Point: TPoint; begin case Message.LParamLo of WM_LBUTTONDOWN: // bei Linksklick begin Form1.Show; Timer3.Enabled:= True; end; WM_RBUTTONDOWN: // bei Rechtsklick begin GetCursorPos(point); TNAPopup1.Popup(point.X,point.Y); end; end; end; end. Wenn man das programm mit rechtsklick auf das icon wieder Öffnet wird es mit hilfe der Eingestellten zeit des Timer3 wieder geschloßen. Gruß sascha :thumb: |
Re: Programm beim start als TNA icon ablegen
Wie kannst du einen Timer3 programmieren (gleiches für Timer1 & Timer2), wenn diese nicht mal auf der Form liegen (und auch nicht deklariert sind)?
Vor allem ist eine Timerlösung wie mit Kanonen auf Spatzen schiessen. An meinem Beispiel kannst du ja sehen, dass es mit 2 zusätzlichen Zeilen (welche du bei dir genauso anwenden kannst) gleiches bewirkt. |
Re: Programm beim start als TNA icon ablegen
Habe es jetzt nochmal oben Editiert und die zwei zuvielen timer heraus genommen
Ich zweifle ja nicht deine lösung würde ich mir nie bei meinem Programmierstand heraus nehmen ich fande nur das es mir so am einfachsten erschien da ich beim Programmieren ja nicht gerade die leuchte bin im gegensatz zu anderen hier :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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