Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Anwendung aus Symbolleiste entfernen
schlumsch - Di 29.12.09 00:32
Titel: Anwendung aus Symbolleiste entfernen
Hallo allerseits,
ich habe ein Programm geschrieben und minimiere dieses erfolgreich in die
Tray mit Icon. Nun habe ich allerdings das Problem, dass mir zusätzlich zu meuinem Icon in der Tray immernoch das Programm in der Symbolleiste angezeigt wird, eben so also ob ich es "normal" minimiert hätte. Komischerweise funktioniert mein Code in einem anderen meiner Programme wunderbar, (wie) kann ich explizit den Eintrag in der Symbolleiste entfernen??
Hier mein Code für die TApplication.minimize:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ApplicationEvents1Minimize(Sender: TObject); begin Form1.Hide; with NIM do begin cbSize := SizeOf (nIM); Wnd := Handle; uID := 0; uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; uCallbackMessage := IC_CLICK; hIcon := Application.Icon.Handle; szTip := 'wpcstf'; end; Shell_NotifyIcon(NIM_ADD, @NIM); end; |
Moderiert von
Narses: Code- durch Delphi-Tags ersetztModeriert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 03.01.2010 um 13:39
MaPsTaR - Sa 02.01.10 18:39
Nimm mal diesen Code:
http://www.delphi-treff.de/tipps/system/wiki/Beim%20Minimieren%20den%20Task%20aus%20der%20Taskleiste%20entfernen/
Bei mir funktioniert das so.
edit:
Oder du entfernst die Schaltfläche damit.
Delphi-Quelltext
1: 2: 3: 4: 5:
| ShowWindow(Application.Handle, SW_HIDE); SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); ShowWindow(Application.Handle, SW_SHOW); |
Unter welchem Windows läuft denn das Programm. Hab jetzt mal gelesen, dass diese Funktion unter Win7 nicht funktioniert.
jaenicke - Sa 02.01.10 18:59
Der Code mit Application.Handle funktioniert allerdings nur bis Delphi 2006. Mit Delphi 2007 wurde der Designfehler behoben, seitdem liegt in der Taskleiste nicht mehr das versteckte Application-Fenster sondern es liegen dort die Formulare selbst.
Der Grund für diese Umstellung war unter anderem, dass sonst die Vorschaufunktion in der Taskleiste ab Windows Vista nicht funktioniert.
Das heißt aber, dass ab Delphi 2007 der Code auf die Fenster selbst angewendet werden muss.
Gausi - Mi 17.02.10 21:35
Falls jemand diesen Thread findet, weil das mit dem Taskleisten-Eintrag ausblenden doch nicht funktioniert:
Ich hatte hier grade den Fall, dass ein älteres (in D7 entwickeltes) Programm bisher mit
Delphi-Quelltext
1: 2: 3: 4: 5:
| ShowWindow(Application.Handle, SW_HIDE); SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); ShowWindow(Application.Handle, SW_SHOW); |
auch unter D2009 eigentlich so funktioniert hat, was unter Windows 7 zu gewissen Problemen geführt hat, wie jaenicke weiter oben erwähnt hat
Ein Umstellen auf
Delphi-Quelltext
1: 2: 3: 4: 5:
| ShowWindow(MainForm.Handle, SW_HIDE); SetWindowLong(MainForm.Handle, GWL_EXSTYLE, GetWindowLong(MainForm.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); ShowWindow(MainForm.Handle, SW_SHOW); |
hat aber nicht funktioniert (auch ohne die letzte Zeile ;-)).
Und zwar weil: In der Project.dpr muss man in so einem Fall (altes Projekt in neuer IDE weiterentwickeln) eine Zeile hinzufügen:
Delphi-Quelltext
1: 2:
| Application.Initialize; Application.MainFormOnTaskBar := True; |
Denn erst damit liegt in der Taskleiste das MainForm.Handle. Erstellt man ein neues Projekt in der neuen IDE, wird diese Zeile automatisch hinzugefügt.
Danke, weitergehen. :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!