![]() |
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 01:19 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