![]() |
TTaskbar: Neues Icon zuweisen?
Hallo, weiß jemand, ob es möglich ist, dem Taskbar-Button der eigenen Applikation zur Laufzeit ein neues Icon zuzuweisen - evtl. mit Hilfe von TTaskbar?
|
AW: TTaskbar: Neues Icon zuweisen?
![]() bzw. das Icon der Form, welche dort ihren TaskButton hat, da ![]() ![]() |
AW: TTaskbar: Neues Icon zuweisen?
Danke, du hast mich auf die Lösung gebracht:
Delphi-Quellcode:
Und schon hat mein Taskbar-Button ein neues Icon! :-))
Application.Icon.LoadFromFile('C:\DELPHI\Icons\mein.ico');
|
AW: TTaskbar: Neues Icon zuweisen?
Leider ist es mir nicht gelungen, das Icon aus einer Projekt-Resource zu laden:
Delphi-Quellcode:
procedure TForm1.LoadTaskbarIcon(const AResName: string);
var NewIcon: Vcl.Graphics.TIcon; begin NewIcon := Vcl.Graphics.TIcon.Create; try NewIcon.LoadFromResourceName(HInstance, AResName); Application.Icon.Assign(NewIcon); finally NewIcon.Free; end; end; |
AW: TTaskbar: Neues Icon zuweisen?
Das heißt, laden aus der Resource funktioniert schon, da ich es im CodeSite Live Viewer anzeigen kann:
Delphi-Quellcode:
Nur die Zuweisung an Application.Icon funktioniert nicht.
Application.Icon.LoadFromResourceName(HInstance, AResName);
CodeSite.Send('TForm1.LoadTaskbarIcon: NewIcon', NewIcon); Application.Icon.Assign(NewIcon); |
AW: TTaskbar: Neues Icon zuweisen?
Der Form ist aber kein Icon zugewiesen?
Wenn doch, dann überdeckt sie ja das Application.Icon. Mal versuchen das Icon in die Form der laden? Der Code liegt aber nicht in einem Package oder DLL? ![]() ![]() Delphi selbst lädt so das Icon ins Application, beim Programmstart (TApplication.Create).
Delphi-Quellcode:
Application.Icon.Handle := LoadIcon(MainInstance, 'MAINICON');
Und falls bei Abfrage in Application und Form kein Icon-Handle vorhanden ist, dann wird dort via
Delphi-Quellcode:
versucht Eines zu laden, aber das dürfte vom Ergebnis her dem Ersten entsprechen.
LoadIcon(0, IDI_APPLICATION)
Versuch es mal so
Delphi-Quellcode:
aber ich hätte jetzt keinen Unterschied erwartet, egal ob es über das Handle oder direkt in die VCL-Komponente geladen oder über ein zusätzliches TIcon übergeben wird. :gruebel:
NewIcon.LoadFromResourceName(HInstance, AResName);
Application.Icon := NewIcon; // macht aber intern eigentlich auch nur ein Assign NewIcon.Free; // oder Application.Icon.LoadFromResourceName(HInstance, AResName); // oder var Stream := TResourceStream.Create(HInstance, AResName, RT_ICON); Application.Icon.LoadFromStream(Stream); Stream.Free; |
AW: TTaskbar: Neues Icon zuweisen?
Du hast recht: Das Form Icon überdeckt das Application.Icon. Da das Form Icon zur Design-Zeit immer noch zugewiesen war, funktionierte die Zuweisung an das Application.Icon zur Laufzeit nicht. Nach dem Löschen des Form Icons zur Design-Zeit funktioniert nun die Zuweisung an das Application.Icon zur Laufzeit perfekt.
|
AW: TTaskbar: Neues Icon zuweisen?
Selbst wenn man das Icon zur Design-Zeit in den Projekt-Optionen (Application->Icons) zuweist, kann das Taskbar-Icon zur Laufzeit immer noch über Application.Icon zugewiesen werden, da die Zuweisung in den Projekt-Optionen ja an das Application.Icon erfolgt.
Daraus folgt: Eine Zuweisung an das Form-Icon ist nur dann sinnvoll, wenn man damit das kleine 16x16 Icon in der linken oberen Ecke des Form-Fensters anzeigen möchte. Was das Taskbar-Icon betrifft, ist die Zuordnung über Application.Icon sinnvoller, da wie gesagt das Form-Icon das Application-Icon im Taskbar überschreibt. |
AW: TTaskbar: Neues Icon zuweisen?
Zitat:
Früher war das unsichtbare Application-MesageOnlyForm in der Taskleiste (z.B. damals im Delphi 7) und dort wurde dann auch immer Application.Icon genommen, aber dafür funktionierte dann natürlich das Aero-Preview und Anderes nicht, da die "Vorschaufunktion" ja Application anzeigte und nicht die MainForm. Jetzt wird stattdessen die MainForm in der Taskleiste angezeigt, also sieht man in der Vorschau (der Hint) und auch in der Taskliste (die Übersichtsliste aller Fenster) das Bild der MainForm und nicht das leere Application. Natürlich hat dort dann auch das Form.Icon Vorrang, bzw. nur wenn das leer ist, wird alternativ das Application.Icon genommen ist auch das leer, wird das Icon aus den Ressourcen verwendet, gibt es dort kein Default-Icon, dann wird das Standard-Icon für .EXE in der Windows-Registry gesucht, und gibt es dass auch nicht, dann das Default-Icon, welches in einer System-DLL vom Windows liegt. PS: Man kann auch weitere Fenster in der Taskleiste anzeigen. Früher mußte man noch bissl fummeln, aber seit D12 gibt es in der Form ein Property dafür. (bei ShowModal lohnt es sich nicht, aber für "wichtige" freie Fenster ist das super) |
AW: TTaskbar: Neues Icon zuweisen?
"aber seit D12 gibt es in der Form ein Property dafür"
Welche Property meinst du? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 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