Die Imageliste zuweisen


Wie bereits erwähnt enthält die ComboBoxEx eine eingebaute Unterstützung für Grafiken in Form von Imagelisten. Das heißt, wenn Sie die Grafiken nicht gerade zur Laufzeit erzeugen, sondern bspw. Bilder aus den Ressourcen in der ComboBoxEx anzeigen lassen wollen, dann müssen Sie lediglich eine Imageliste erzeugen und die notwendigen Grafiken laden.

Leider muss ich an der Stelle ein bisschen vorgreifen. Zum einen werden uns Imagelisten noch in späteren Beiträgen begegnen (bei der List-View etwa), und zum anderen benutzen wir kurzerhand die Grafik aus dem Toolbar-Beitrag.
Gehen wir also davon aus, dass die besagte Grafik Teil der Programmressourcen ist und die ID 100 hat. Dann laden wir sie zuerst

hbmp := LoadBitmap(hInstance,MAKEINTRESOURCE(100));

Wenn das funktioniert hat, dann ist der Rückgabewert ungleich Null, und wir können die Imageliste mit den Abmessungen von 16x16 Pixel erzeugen

if(hbmp <> 0) then
begin
  hImgList := ImageList_Create(16,16,ILC_COLOR,0,1);

Nun laden wir die Grafik, indem wir lediglich den Befehl "ImageList_Add" aufrufen. Das Besondere dabei ist, dass unsere Grafik eigentlich mehrere Einzelbilder enthält. Durch die Festlegung der Imageliste auf 16 Pixel Breite wird die Grafik daher automatisch in die Einzelbilder "aufgetrennt". Sie müssen daher nur darauf achten, dass alle Einzelbilder die selbe Breite haben

  ImageList_Add(hImgList,hbmp,0);

Da wir die geladene Grafik nicht mehr benötigen, geben wir sie frei

  DeleteObject(hbmp);

und übergeben dann die Imageliste mit der Nachricht "CBEM_SETIMAGELIST" an die ComboBoxEx

  SendMessage(hCBEx,CBEM_SETIMAGELIST,0,LPARAM(hImgList));
end;



Die Imageliste freigeben

Bevor Sie das Programm beenden, sollten Sie die Imageliste mit dem Befehl "ImageList_Destroy" wieder freigeben, wobei Sie als Parameter das Handle der Liste benutzen:

ImageList_Destroy(hImgList);