Por lo que sé, la única solución para este problema, es OwnerDraw el cuadro combinado
Pruebe estos pasos
- establecer la propiedad Style del cuadro combinado a
csOwnerDrawFixed
- En el caso OnDrawItem utilice los métodos vcl styes para dibujar los elementos del cuadro combinado.
Comprobar este código de ejemplo
uses
Vcl.Styles,
Vcl.Themes,
procedure TForm115.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
const
ColorStates: array[Boolean] of TStyleColor = (scComboBoxDisabled, scComboBox);
FontColorStates: array[Boolean] of TStyleFont = (sfComboBoxItemDisabled, sfComboBoxItemNormal);
var
LStyles : TCustomStyleServices;
begin
LStyles :=StyleServices;
with Control as TComboBox do
begin
Canvas.Brush.Color := LStyles.GetStyleColor(ColorStates[Control.Enabled]);
Canvas.Font.Color := LStyles.GetStyleFontColor(FontColorStates[Control.Enabled]);
if odSelected in State then
Canvas.Brush.Color := LStyles.GetSystemColor(clHighlight);
Canvas.FillRect(Rect) ;
Canvas.TextOut(Rect.Left+2, Rect.Top, Items[Index]);
end;
end;
Para más información se puede comprobar este artículo Vcl Styles and Owner Draw
. También puede usar la unidad Vcl.Styles.OwnerDrawFix (parte de vcl-styles-utils project) que incluye un conjunto de rutinas de dibujado por el propietario para componentes como TListBox, TComboBox y TListView.
+1, reglas de RRUZ. –
Sí, estoy esperando la primera pregunta que pregunta cómo consultar los estilos de VCL con WMI ..... –
@David, LOL ... –