Eine ComboBoxEx ist eine erweiterte Form der ComboBox, die eine eingebaute Unterstützung für Grafiken besitzt. Allerdings ist der Stil CBS_OWNERDRAWVARIABLE nicht möglich, weil die Unterstützung in Form von Imagelisten realisiert wurde. Das bedeutet, Sie können mehrere Grafiken in diese Liste laden und müssen sich nicht selbst um das Zeichnen der Bilder kümmern. Allerdings haben diese Grafiken dann immer die selbe Größe. Ansonsten verhält sich die ComboBoxEx wie eine normale ComboBox.
Allerdings handelt es sich hier um ein so genanntes "InitCommonControlsEx" initialisiert werden muss, sonst sehen Sie sie erst gar nicht
var
iccex : TInitCommonControlsEx =
(dwSize:sizeof(iccex);
dwICC:ICC_USEREX_CLASSES;);
begin
InitCommonControlsEx(iccex);
{ ... }
end.
Sie sehen sie auch nicht, wenn Sie nur "InitCommonControls" aufrufen, wie Sie das evtl. bei einigen anderen "Common Controls" noch sehen werden.
Wenn Sie die "Common Controls" und damit die ComboBoxEx initialisiert haben, dann können Sie sie wie jedes andere Control erzeugen, wobei als Klassenname WC_COMBOBOXEX zu benutzen ist:
hCBEx := CreateWindowEx(0,WC_COMBOBOXEX,nil,WS_BORDER or WS_CHILD or WS_VISIBLE or CBS_DROPDOWN,10,10,300,150,wnd,IDC_CBEX,hInstance,nil);
| Wert | Bedeutung |
|---|---|
| CBES_EX_CASESENSITIVE | Die Suche nach Text in der ComboBoxEx ist abhängig von der Schreibweise der Strings. |
| CBES_EX_NOEDITIMAGE | Das Eingabefeld und die Liste der ComboBoxEx zeigen keine Grafiken an |
| CBES_EX_NOEDITIMAGEINDENT | Das Eingabefeld und die Liste der ComboBoxEx zeigen keine Grafiken an |
(weitere Stile finden Sie im PSDK)
Wenn Sie einen der erweiterten Stile setzen wollen, dann benötigen Sie die Nachricht "CBEM_SETEXTENDEDSTYLE", wobei Sie den wParam auf Null setzen sollten. Das bewirkt, dass alle Flags, die Sie im lParam angeben, berücksichtigt werden. bspw.
SendMessage(hCBEx,CBEM_SETEXTENDEDSTYLE,0,CBES_EX_NOEDITIMAGEINDENT);
Im Gegensatz dazu wäre im folgenden Aufruf das Flag CBES_EX_CASESENSITIVE wirkungslos, weil der wParam lediglich CBES_EX_NOEDITIMAGE enthält und damit das zweite Flag im lParam ignoriert
SendMessage(hCBEx, CBEM_SETEXTENDEDSTYLE, CBES_EX_NOEDITIMAGE, CBES_EX_NOEDITIMAGE or CBES_EX_CASESENSITIVE);