Ver Mensaje Individual
  #1  
Antiguo 22-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
[BUG] ComboBoxEx

Usando un control ComboBoxEx en Delphi 7 me doy cuenta de lo siguiente.

Supongamos que llenamos el combo con 15 elementos:

Código Delphi [-]
for I := 1 to 15 do
  ComboBoxEx1.Items.Add(Format('Item %0.2d', [i]));

El combo se ve así:



Para poder ver todos los elementos al momento de desplegar la lista, ajusto la propiedad DropDownCount a 15. El resultado es el que se espera:

.

Sin embargo, si cambio el tamaño de letra del combo a 10 (el de defecto es 8), el resultado es este:



Es decir, que al parecer, el desplegado no toma en cuenta la altura real de cada elemento.

Revisando el código del componente, veo con sorpresa esto:

Código Delphi [-]
function TCustomComboBoxEx.GetItemHt: Integer;
begin
  Result := 16;
end;

¡Una constante!

El código del método correspondiente en el combo normal es así:

Código Delphi [-]
function TCustomComboBox.GetItemHt: Integer;
begin
  if FStyle in [csOwnerDrawFixed, csOwnerDrawVariable] then
    Result := FItemHeight else
    Result := Perform(CB_GETITEMHEIGHT, 0, 0);
end;

Cosa bastante más razonable.

Si redefino el método de esta manera:

Código Delphi [-]
function TComboBoxEx.GetItemHt: Integer;
begin
  Result := Perform(CB_GETITEMHEIGHT, 0, 0);
end;

el resultado vuelve a ser el esperado:



// Saludos
Responder Con Cita