Das Rebar-Control erlaubt es, Icons auf einzelnen Bändern anzuzeigen. Dazu ist eine ImageList erforderlich, die Sie bereits von der List-View kennen. Etwas wirklich Neues gibt es daher auch nicht. Wir erzeugen zuerst die Liste für 32x32-Symbole:
himlRebar := ImageList_Create(32,32,ILC_COLORDDB or ILC_MASK,1,0);
Bitte beachten Sie, dass das Beispielprogramm nur ein Symbol enthält. Es ist hier (in diesem ganz speziellen Fall) auch nicht möglich, weitere Symbole in die Liste einzufügen! Wie dem auch sei, das Symbol selbst holen wir wie gewohnt aus den Programmressourcen und reichen es an die ImageList weiter:
hIco := LoadIcon(hInstance,MAKEINTRESOURCE(IDC_MAINICON)); ImageList_AddIcon(himlRebar,hIco);
Damit das Rebar-Control diese Liste nun auch verwenden kann, benötigen wir das
ZeroMemory(@rbi,sizeof(rbi)); rbi.cbSize := sizeof(TRebarInfo);
Weil dieses Record bisher nur die Übergabe von Imagelisten an das Rebar-Control unterstützt, ist die Arbeit damit natürlich recht einfach. Es gibt nur ein einziges Flag, und selbstverständlich ist auch das Handle unserer Imageliste von Bedeutung:
rbi.fMask := RBIM_IMAGELIST; rbi.himl := himlRebar;Mit der Nachricht "
RB_SETBARINFO" wird die Liste nun zu guter Letzt an das Control übergeben und steht uns somit dann auch dort zur Verfügung
SendMessage(hwndRebar,RB_SETBARINFO,0,LPARAM(@rbi));
Das reicht aber noch nicht ganz. Das Symbol muss erst noch einem Band zugeordnet werden bevor wir es sehen können. Dazu erweitern wir die Flags der fMask-Membervariablen um die folgende Angabe:
rbbi.fMask := { ... } or RBBIM_IMAGE;
Sie besagt, dass die iImage-Membervariable gültig wird und den Index des Symbols aus der Imageliste enthalten muss. Da wir nur ein Symbol haben, ist dessen Index natürlich Null, was wir hiermit angeben:
rbbi.iImage := 0;
Voilą, würden Sie das Band mit diesen erweiterten Angaben erzeugen, wäre vor dem Bandtext das Symbol zu sehen. Im Beispielprogramm können Sie dies mit Hilfe des Compilerschalters USEBMPICO nachvollziehen, der standardmäßig nicht verwendet wird.