AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTaskbar: Neues Icon zuweisen?

Ein Thema von PeterPanino · begonnen am 19. Sep 2024 · letzter Beitrag vom 20. Sep 2024
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

TTaskbar: Neues Icon zuweisen?

  Alt 19. Sep 2024, 23:34
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?
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TTaskbar: Neues Icon zuweisen?

  Alt 19. Sep 2024, 23:56
Delphi-Referenz durchsuchenApplication.Icon ?

bzw. das Icon der Form, welche dort ihren TaskButton hat, da Delphi-Referenz durchsuchenApplication.MainFormOnTaskBar (weil das FormIcon oft leer ist, wird halt Application.Icon genutzt)
Delphi-Referenz durchsuchenTForm.Icon
$2B or not $2B

Geändert von himitsu (20. Sep 2024 um 00:05 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 00:46
Danke, du hast mich auf die Lösung gebracht:

Application.Icon.LoadFromFile('C:\DELPHI\Icons\mein.ico'); Und schon hat mein Taskbar-Button ein neues Icon! )
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 01:02
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;
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 01:46
Das heißt, laden aus der Resource funktioniert schon, da ich es im CodeSite Live Viewer anzeigen kann:

Delphi-Quellcode:
Application.Icon.LoadFromResourceName(HInstance, AResName);
CodeSite.Send('TForm1.LoadTaskbarIcon: NewIcon', NewIcon);
Application.Icon.Assign(NewIcon);
Nur die Zuweisung an Application.Icon funktioniert nicht.
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 03:55
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-Referenz durchsuchenHInstance ist das Handle des Moduls (EXE/DLL/BPL), in welchem der Code liegt.
Delphi-Referenz durchsuchenMainInstance ist immer das der EXE, aber auch 0 entspricht der EXE.

Delphi selbst lädt so das Icon ins Application, beim Programmstart (TApplication.Create).
Application.Icon.Handle := LoadIcon(MainInstance, 'MAINICON');

Und falls bei Abfrage in Application und Form kein Icon-Handle vorhanden ist, dann wird dort via LoadIcon(0, IDI_APPLICATION) versucht Eines zu laden, aber das dürfte vom Ergebnis her dem Ersten entsprechen.


Versuch es mal so
Delphi-Quellcode:
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;
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.
$2B or not $2B

Geändert von himitsu (20. Sep 2024 um 04:04 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 10:45
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.
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 11:21
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.
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 12:02
da wie gesagt das Form-Icon das Application-Icon im Taskbar überschreibt.
Njain.

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)
$2B or not $2B

Geändert von himitsu (20. Sep 2024 um 12:07 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TTaskbar: Neues Icon zuweisen?

  Alt 20. Sep 2024, 13:25
"aber seit D12 gibt es in der Form ein Property dafür"

Welche Property meinst du?
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz