AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Farbtiefe bei Tray-Icon anpassen

Offene Frage von "c.wuensch"
Ein Thema von c.wuensch · begonnen am 21. Aug 2006 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Seite 2 von 2     12
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#11

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:20
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.

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?
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#12

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:29
Zitat von c.wuensch:
Kann irgendjemand dieses Problem nachvollziehen
Jabb, ich. Das Problem liegt bei dir, weil du nicht lesen kannst.

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:

hIcon := LoadIcon(HInstance, MakeIntResource(100); Dann sollte es klappen...
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#13

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:32
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
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#14

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:34
Oder einfach Luckie's Programm verwenden.

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

@OregonGhost: Hey, ein Kieler.
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#15

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:38
Ja, das Programm kompiliert und zeigt ein Icon an - allerdings wieder das herunterskalierte 256-Farb-Icon

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.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#16

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:46
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

Zitat von Daniel G.:
@OregonGhost: Hey, ein Kieler.
Moin
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#17

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 15:54
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?
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#18

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 22. Aug 2006, 21:48
So, ich habe jetzt noch einige Tests durchgeführt, und folgendes herausgefunden:

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
Das stimmt tatsächlich - 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.

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...

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

Edit: Habe es mit folgendem Code testen können:
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?
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#19

Re: Farbtiefe bei Tray-Icon anpassen

  Alt 24. Aug 2006, 21:38
Leider hänge ich noch immer an dem Problem fest
Hat denn da niemand eine Idee?

Cu, Chris
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:40 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