![]() |
Re: Farbtiefe bei Tray-Icon anpassen
Hi Daniel,
klingt echt gut, dein Vorschlag. Ich habe damit jetzt folgenden Code produziert:
Delphi-Quellcode:
Allerdings liefert LoadIcon immer NULL zurück, weshalb auch kein Icon dargestellt wird. :wall:
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); 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? |
Re: Farbtiefe bei Tray-Icon anpassen
Zitat:
Bastel dir mal eine Ressourcen - Datei (*.rc) mit folgendem Eintrag
Code:
Die jagst du durch den Ressourcen - Compiler (brcc32.exe) um deine *.res zu bekommen.
100 ICON DISCARDABLE "online.ico"
Die bindest du dann in dein Programm ein und änderst die Zeile so um:
Delphi-Quellcode:
Dann sollte es klappen...
hIcon := LoadIcon(HInstance, MakeIntResource(100);
|
Re: Farbtiefe bei Tray-Icon anpassen
Zitat:
![]() |
Re: Farbtiefe bei Tray-Icon anpassen
Oder einfach Luckie's Programm verwenden. :wink:
![]() @OregonGhost: Hey, ein Kieler. :mrgreen: |
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:
|
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:
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:
|
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? |
Re: Farbtiefe bei Tray-Icon anpassen
So, ich habe jetzt noch einige Tests durchgeführt, und folgendes herausgefunden:
Zitat:
Dies mal etwas weiter gedacht:
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 ![]() 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:
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.
Image1.Picture.Icon.Handle := LoadIcon(hInstance, MakeIntResource(100));
Also bleibt die Frage: Wie bekomme ich überhaupt ein Handle auf ein 16x16 Icon? |
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 20:49 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