XP Icons
-
Hallo, ich habe die folgende grundsätzliche Frage:
In meinem Projekt nutze ich Windows XP Icons, die ich als Ressource hinzufüge.
Ich importiere dabei aber wirklich nur die Windows XP-Version des Icons, die 256-Farben-Versionen lasse ich außen vor.Was passiert, wenn mein Programm auf einen anderen Rechner ausgeführt wird, beispielsweise Windows NT bzw. Windows 2000 (habe leider keine Möglichkeit das zu testen)?
Werden die Icons dann trotzdem korrekt dargestellt und automatisch in eine 256-Farben-Version umgewandelt?Wenn das nicht der Fall ist, wie muss ich da vorgehen? Ist es sinnvoll auch eine 256-Farben-Version für die anderen Betriebssysteme zu importieren und muss ich dann eine entsprechende Betriebssystemabfrage durchführen und je nach Version dann das entsprechende Icon laden, oder existiert dafür ein Automatismus der automatisch das geeignete Icon wählt?
-
Ich denke wenn du es als Resource einbindest sollte es überall richtig dargestellt sein, du verlinkst die Grafiken ja nicht oder?? Wenn du willst kann ich dir das Testen unter 2000Prof.
Wie die Grafiken dargestellt werden wenn nur 256Farben darstellbar sind kannste ja in nem Grafikprogramm machen!
Aber wieso glaubst du dass es nur 256 sind die du darstellen kannst???
-
Hallo Polofreak,
also zu der Auffassung, dass es vielleicht Probleme geben könnte bin ich gekommen, als ich mir mal bestehende Programme (beispielsweise von Microsoft) mit einem IconExtractor bzw. Ressourcen-Programm angeschaut habe.
ALLE Programme enthielten neben den XP-Icons (wenn vorhanden) auch immer noch Icons mit 256 Farben bzw. einer noch geringeren Auflösung.
Eine Zwischenstufe hab ich dabei nicht entdeckt.Ich habe mir überlegt, wenn es um Transparenz etc. geht, werden sicher Probleme auftreten.
Sämtliche Icons hab ich übrigens als Ressource hinzugefügt. Danke übrigens für dein Testangebot!
Ich habe auf Arbeit noch einen Rechner mit Windows2000 Professional entdeckt und es eben gleich mal getestet.
Folgendes Phänomen:
Bei einigen Icons wird der Hintergrund, der eigentlich transparent sein sollte, als schwarze bzw. weiße Fläche dargestellt (keine Ahnung wie auch noch dabei ein Unterschied auftritt).
Andere Icons sind richtig transparent wie unter XP und wieder einige weisen einen kleinen schwarzen Rand auf.Das Icon im Tray wird sogar unter Win2000 anscheinend nur mit 16 Farben angezeigt.
Wie kann ich diese Probleme umgehen?
Würde es einen Unterschied machen, wenn ich jeweils noch ein neues Format mit einer geringeren Auflösung zu der IconRessource hinzufüge oder muss ich damit leben und einen Verweis hinzufügen, dass Darstellungsprobleme unter Versionen jenseits von WinXP auftreten?
-
Wenn du ne Farbe transparent machst dann kann man auch oft mal eine Toleranz einstellen. Wenn jetzt die Transparenz bei den Bildern unterschiedlich ist kann es daher kommen. versuch mal das was ausgeblendet werden soll wirklich 255,255,255 und nicht irgendein weiß. wenn du nun als transparente Farbe die 255,255,255 mit 1% Toleranz machst denk ich mal dass es klappen könnte (bzw wenn du schwar transparent machen willst halt die 0,0,0)
-
Hey Polofreak,
ich bin gerade dabei ein zusätzliches Format mit 256 Farben hinzuzufügen (theoretisch hätte ich auch 32 Bit nehmen können).
Nun bläht sich dadurch mein Programm etwas auf, leider kann ich das nicht vermeiden.Das Problem ist das folgende:
Der weiche Übergang, den XP-Icons so schick machen, war das Problem.
Der konnte nicht korrekt dargestellt werden und wurde entweder durch schwarz oder weiß ersetzt.Nun hänge ich noch an folgender Sache fest:
Die Icons in meinem HeaderControl werden auf dem Windows2000-System nicht korrekt angezeigt, obwohl ich extra neben der XP-Variante auch eine 32 Bit und 256 Farben Version erzeugt habe.
Mit dem folgenden Aufruf erzeuge ich die ImageList die dann mit dem Headercontrol verknüpft wird:
m_ImgListHeader.Create(16, 16, ILC_COLOR32, 3, 3);Auf XP wird alles korrekt angezeigt, nur auf Windows2000 halt nicht.
Wieso wird hier nicht, wie bei den anderen Icons auch, die korrekte Variante des Icons genutzt und wie kann ich das Problem lösen?
-
Ich hab dein Problem leider nicht verstanden!
Aber mal generell woher weiß dein Programm welche Icons es nutzen soll? Hast du ne Funktion die das prüft? Funktioniert die richtig?
Bitte beschreib dein Problem etwas genauer dass ich es vielleicht verstehen kann
-
So da bin ich mal wieder.
Also ich mache folgendes. Mit einem Icon-Programm erzeuge ich verschiedene Image Formate.
Einmal beispielsweise 256 Farben, dann True Color und Windows XP.
Das heißt das Icon (Test.ico) beinhaltet nun 3 verschiedene Varianten des Icons in verschiedenen Auflösungen.Dieses importiere ich dann in mein Projekt.
Wenn nun ein System das XP-Icon nicht darstellen kann, wird automatisch eine andere Auflösung genommen (keine Ahnung wie Microsoft das intern abwickelt), ist auf jeden Fall einfacher für den Entwickler.Nun hab ich halt nur noch das Problem, dass ich ein HeaderControl nutze (so einen Spaltenkopf mit mehreren Spalten halt).
Dieses Control verknüpfe ich mit einer ImageList um in den einzelnen Spaltenköpfen Icons darzustellen.
Funktoniert ja auch alles wunderbar, das Problem ist halt nur, dass er bei dieser Variante nicht automatisch das darstellbare Icon nimmt, sondern anscheinend versucht das XP-Icon auch auf Windows2000-Systemen darzustellen.Nun ist halt die Frage, ob ich extra eine Abfrage machen muss:
Ist es WinXP, dann lade das entsprechende XP-Icon, ist es Win2000, dann halt das andere Icon.Wenn ja, wie kann ich eine Abfrage machen, ob es sich um ein XP und aufwärts Betriebssystem handelt?
-
Hm also mit den icons bin ich überfragt, ich wusste nicht dass man in einem .ico mehrere Auflösungen speichern kann. (Bist du dir da wirklich sicher?) Drum kann ich dir leider in die richtung absolut nicht mehr weiterhelfen.
rausbekommen welches BS sollte schon gehen, ich behaupte mal mutwillig das steht in der Registry
HKEY_CURRENT_USER\Software\Microsoft\Windows NT
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT
...Ich taste auch grad etwas im Dunkeln, aber andere Möglichkeit wäre noch in die Boot-Ini zu schauen, oder unterm Stammverzeichnis nach dem Systemordner zu schauen. Ist aber alles sehr unschön, da du Probleme kriegst, wenn einer 2 Windowsvarianten drauf hat oder den installordner wo anders drin hat.
Ich würde beim ersten Start einfach den User sein BS wählen lassen, wenn er dann das falsche angibt OK (Vollidiot) aber ich weiß leider keinen besseren Weg. Sonst wenn du es wirklich so machen willst, starte hier nen neuen Thread irgendwer weiß das bestimmt!
-
So, nach ewigen Rumprobieren hab ich das Problem rausgefunden.
Mann muss für Win2000 explizit noch mal angeben, welche Farbe transparent dargestellt werden muss.
Die Betriebssystemabfrage brauche ich nun nicht mehr durchzuführen.
Ach so, wegen deiner Frage:
Ja ich bin mir mir sicher, dass ich mehrere Iconformate eingebunden habe.
Um das nachvollziehen zu können, kannst du ja ein Icon-Programm wie beispielsweise Microangelo anschauen.Gruß + danke für deine Mühe...
-
ah du hast mehrere Iconformate eingebunden!
Ich hab es so verstanden, dass du für einen Button lediglich ein ICO hast und in dem dann die verschiedenen Formate drin stecken.