Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Farbtiefe bei Tray-Icon anpassen (https://www.delphipraxis.net/75527-farbtiefe-bei-tray-icon-anpassen.html)

c.wuensch 22. Aug 2006 15:20

Re: Farbtiefe bei Tray-Icon anpassen
 
Hi Daniel,

klingt echt gut, dein Vorschlag. Ich habe damit jetzt folgenden Code produziert:
Delphi-Quellcode:
  With TrayIconData Do Begin
    cbSize := SizeOf(TrayIconData);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    uCallbackMessage := WM_USER+1;
    hIcon := LoadIcon(0, 'c:\online.ico');
    StrPCopy(szTip, Application.Title);
  End;
  Shell_NotifyIcon(NIM_ADD, @TrayIconData);
Allerdings liefert LoadIcon immer NULL zurück, weshalb auch kein Icon dargestellt wird. :wall:

Die angegebene Icon-Datei existiert, und beinhaltet 2 Icons mit jeweils 16x16 Pixel in den Farbtiefen 16 Farben und 256 Farben (bei Bedarf kann ich es auch gerne anhängen, falls es am Icon liegen sollte).

Kann irgendjemand dieses Problem nachvollziehen, und vielleicht einen Lösungsvorschlag machen?

Cu, Chris

Edit: Ich habe mal GetLastError aufgerufen, und als Ergebnis '1813' erhalten. Was heißt das jetzt und wie könnte ich den Fehler vielleicht beheben?

Daniel G 22. Aug 2006 15:29

Re: Farbtiefe bei Tray-Icon anpassen
 
Zitat:

Zitat von c.wuensch
Kann irgendjemand dieses Problem nachvollziehen

Jabb, ich. Das Problem liegt bei dir, weil du nicht lesen kannst. :mrgreen:

Bastel dir mal eine Ressourcen - Datei (*.rc) mit folgendem Eintrag

Code:
100                     ICON   DISCARDABLE    "online.ico"
Die jagst du durch den Ressourcen - Compiler (brcc32.exe) um deine *.res zu bekommen.

Die bindest du dann in dein Programm ein und änderst die Zeile so um:

Delphi-Quellcode:
hIcon := LoadIcon(HInstance, MakeIntResource(100);
Dann sollte es klappen...

OregonGhost 22. Aug 2006 15:32

Re: Farbtiefe bei Tray-Icon anpassen
 
Zitat:

Ich habe mal GetLastError aufgerufen, und als Ergebnis '1813' erhalten. Was heißt das jetzt und wie könnte ich den Fehler vielleicht beheben?
Ich kann dir zwar jetzt nicht bei deinem Problem helfen, aber für deinen nächsten GetLastError-Aufruf System Error Codes im MSDN empfehlen :)

Daniel G 22. Aug 2006 15:34

Re: Farbtiefe bei Tray-Icon anpassen
 
Oder einfach Luckie's Programm verwenden. :wink:

http://michael-puff.de/Developer/Del...rrorMsg1_1.zip

@OregonGhost: Hey, ein Kieler. :mrgreen:

c.wuensch 22. Aug 2006 15:38

Re: Farbtiefe bei Tray-Icon anpassen
 
:wall: Ja, das Programm kompiliert und zeigt ein Icon an - allerdings wieder das herunterskalierte 256-Farb-Icon :gruebel: :wall:

Edit: Und das auch dann, wenn im System alle Icons auf 16 Farben eingestellt sind!!!

Edit2: Und das obwohl im MSDN steht:
Zitat:

The function searches the icon resource for the icon most appropriate for the current display.

OregonGhost 22. Aug 2006 15:46

Re: Farbtiefe bei Tray-Icon anpassen
 
Ich fürchte, die TNA ist sowieso hoffnungslos veraltet, zumindest vor Windows XP und selbst da ist sie sehr unzulänglich (oder warum kann man keine PNGs da reinpacken?^^). Insofern könntest du sie auch von Hand als Legacy-Dings unterstützen und unter Windows bis NT5.0 nur ein 16-Farb-Icon laden und ab NT5.1 ein 256-Farb-Icon, wie wäre das?

Zitat:

Note This function hase been superseded by the LoadImage function. [...] The function searches the icon resource for the icon most appropriate for the current display.
Wenn ich das richtig interpretiere, lädt LoadIcon das Icon, das der Bildschirmauflösung entspricht, wenn möglich - also das 256-Farb-Icon. Hast du mal geguckt, was das Ding macht, wenn du die Systemfarben auf 16 setzt? Wobei, das geht bestimmt nicht ^^
Jedenfalls, da steht nichts davon, dass es sich an deine Einstellungen hält, nur, dass es das für die Anzeige günstigste Icon lädt :mrgreen:

Zitat:

Zitat von Daniel G.
@OregonGhost: Hey, ein Kieler.

Moin ;)

c.wuensch 22. Aug 2006 15:54

Re: Farbtiefe bei Tray-Icon anpassen
 
Es gibt übrigens noch immer einen Fehler beim Laden des Icons! Und zwar Error 6 - Das Handle ist ungültig.
Woran kann das denn schon wieder liegen?

c.wuensch 22. Aug 2006 21:48

Re: Farbtiefe bei Tray-Icon anpassen
 
So, ich habe jetzt noch einige Tests durchgeführt, und folgendes herausgefunden:

Zitat:

Zitat von OregonGhost
Wenn ich das richtig interpretiere, lädt LoadIcon das Icon, das der Bildschirmauflösung entspricht, wenn möglich - also das 256-Farb-Icon. Hast du mal geguckt, was das Ding macht, wenn du die Systemfarben auf 16 setzt? [...]
Jedenfalls, da steht nichts davon, dass es sich an deine Einstellungen hält, nur, dass es das für die Anzeige günstigste Icon lädt :mrgreen:

Das stimmt tatsächlich :roll: - wenn ich die Farbtiefe auf 256 Farben reduziere, erscheint auf einmal mein 16-Farb-Icon!
Dies mal etwas weiter gedacht:
  • Welche Icon-Größe lädt denn Loadimage überhaupt?
  • Liefert LoadImage bei einer Bildschirmauflösung von 1024 x 768 x 16bit vielleicht immer ein 32 x 32 x 8bit Icon?
  • Und was passiert, wenn in der Icon-Datei nur ein 16x16 Icon enthalten ist -> wird dieses dann entsprechend hochskaliert?

Wie kann ich denn die Antworten auf diese Fragen herausfinden? Wisst ihr vielleicht eine Quelle, wo man sowas nachlesen könnte (der MSDN-Artikel ist ja mehr als dürfig...)? Oder kennt ihr eine Möglichkeit, das zu testen?

---------------------------------------

Und nochwas:
Auf http://www.hhhh.org/cloister/csharp/icons/ habe ich gelesen, dass Windows für die Tray-Icons doch tatsächlich das 32x32 Icon nehmen und entsprechend auf 16x16 herunterskalieren soll. :gruebel:

Dafür spricht die Tatsache, dass das im Tray angezeigte Icon nicht wirklich mit dem 16x16 Icon übereinstimmt. Also scheint wirklich eine Hoch- und wieder Herunterskalierung zu erfolgen...

Die Frage ist aber jetzt: Passiert die Hochskalierung schon in LoadIcon (s.o.), so dass Windows also gar nichts anderes übrig bleibt, als das Icon wieder herunterzuskalieren, oder macht das tatsächlich Windows alleine (denn dann wäre es ja günstiger, ihm gleich ein 32x32 Icon vorzusetzen)?

Und noch eine Frage: Gibt es denn überhaupt eine Möglichkeit, beim Laden eines Icons festzulegen, welches "Unter-Icon" genommen werden soll, und welche Auflösung und Farbtiefe das zurückgelieferte Icon haben soll?

Bitte helft mir, sonst werde ich noch irgendwann an diesem ganzen Icon-Mist verzweifeln... :cry:

-----------------------------------------

Edit: Habe es mit folgendem Code testen können:
Delphi-Quellcode:
Image1.Picture.Icon.Handle := LoadIcon(hInstance, MakeIntResource(100));
Ergebnis: LoadIcon skaliert tatsächlich auf 32 x 32 x 8bit hoch, wenn nur ein 16 x 16 x 4bit Icon in der Datei enthalten ist.
Also bleibt die Frage: Wie bekomme ich überhaupt ein Handle auf ein 16x16 Icon?

c.wuensch 24. Aug 2006 21:38

Re: Farbtiefe bei Tray-Icon anpassen
 
Leider hänge ich noch immer an dem Problem fest :cry:
Hat denn da niemand eine Idee?

Cu, Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Seite 2 von 2     12   

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