Seite 1 von 1
SetMenuItemBitmaps mit ICO Dateien?
Verfasst: 27.10.2007 14:08
von E-P-S
Hi zusammen...
Ein PopUp Menü per API zu erstellen und dieses mit BITMAP "Icons" zu versehen hab ich schon hinbekommen. Allerdings funktioniert das ganze nicht wenn ich als Ressource ICO Dateien verwenden möchte.
Geladen werden die ICOs noch, kann ich per Handle nachprüfen, also:
Code: Alles auswählen
LoadImage( 0, "off.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE )
Aber die Icons werden nicht angezeigt. Da der Befehl der Zuweisung ja
SetMenuItemBitmaps heißt, hab ich überlegt ob eben dieser Befehl wirklich nur BITMAP Dateien verarbeiten kann, man also die Icons nach dem Laden noch irgendwie umwandeln muß.
Wenn ja - wie? Ich hab hierzu nix gefunden und in allen auffindbaren Beispielen, nicht nur zu PB, wird da nix umgewandelt.
Hat das schon jemand mit ICO Dateien hinbekommen? Danke schonmal.
Verfasst: 27.10.2007 15:44
von scholly
moin, moin...
Ich hatte ein ähnliches Problem vor Kurzem mal mit 32er Icons im TreeGadget.
Erklären kann ich nich gut, aber vielleicht hilft Dir ja der Thread weiter:
http://www.purebasic.fr/german/viewtopi ... adget+icon
Da wird dann über die Api mit
ImageList_ReplaceIcon_() statt
ImageList_Add_() gearbeitet.
hdh... scholly
Verfasst: 27.10.2007 18:22
von E-P-S
Danke für den Tipp, die Idee ist nicht schlecht, insofern es um PB geht, ich suche aber eine Lösung für die Windows API.
Mittlerweile bin ich soweit das der Befehl SetMenuItemBitmaps tatsächlich nur Bitmaps kapiert und suche nun nach einer Möglichkeit dem Befehl die Verwendung eines ICO zu verticken.
Die Idee (nicht meine) basiert auf folgendem:
- Icon laden
- IconInfo Struktur holen
- Zeiger auf Bitmap (bzw. ColorMap) nehmen
- SetMenuItemBitmaps mit diesem Zeiger aufrufen
Das sollte eigentlich gehen - habs bisher aber noch nicht hinbekommen.
EDIT:Ok, Thema hat sich erledigt - es geht. Des Rätsels Lösung ist die IconInfo Struktur, die nämlich 20 - anstatt wie von der MSDN angegeben nur 17 - Bytes besitzt.
Verfasst: 27.10.2007 22:32
von hjbremer
Wie wärs mit einem kurzen Beispiel für alle.
Danke im voraus!
Verfasst: 27.10.2007 22:52
von E-P-S
Mach ich doch gerne, allerdings hab ich das weder mit, noch für PB geschrieben

von daher weis ich nicht ob es viel Sinn macht, aber ich versuchs.
Also vom Prinzip her gehts folgendermaßen:
Code: Alles auswählen
iconinfo = createbank(20) ;--> Bank oder halt die IconInfo Struktur
;--> ICO laden
Map = api_LoadImage( 0, "myicon.ico", IMAGE_ICON, 13, 13, LR_LOADFROMFILE )
;--> IconInfo Struktur des geladenen Icons holen
api_GetIconInfo( Map, iconinfo )
;--> Pointer auf ColorMap (Bitmap) des Icons aus Struktur holen
Map = PeekInt( iconinfo, 16 )
;--> Bitmap dem entsprechenden Eintrag (hItem) des Menüs (hMenu) zuweisen
api_SetMenuItemBitmaps( hMenu, hItem, MF_BITMAP, Map, Map )
Ich hoffe es hilft weiter.