Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
  #2  
Antiguo 23-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Nunca había usado el ComboBoxEx, pero tenés toda la razón.
Y agregando algo más, como tengo el tamaño de fuente en escala grande, poniendo DropDownCount:= 15 y Font.Size:= 8 obtengo el mismo resultado que vos con size = 10.
Para lograr visualizar los 15 items tuve que usar 'Currier New' y size = 6.
O sea que la cantidad de items mostrado depende también de la escala de font declarada en el S.O., como se desprende lógicamente del
código que implementaron en la función GetItemHt...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 23-06-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Gracias por el aviso y la solución, Román.

Posiblemente le dijeron al programador en turno algo como:
Cita:
— ¡Hey! Liberamos versión en 4, 3, 2...
Responder Con Cita
  #4  
Antiguo 23-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues en delphi2007 pone igual

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

¿No habrá algún motivo?
Responder Con Cita
  #5  
Antiguo 23-06-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
No ocupo el componente, pero que bueno que nos hallas avisado. A cómo dice Al, seguro eso ha de haber sido una pereza del programador.

Deberías reportar tu descubrimiento a Embarcadero.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 23-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es curioso lo poco usado del componente a pesar de los beneficios que presenta. ¿O será que no reporta beneficios reales?

A decir verdad yo casi nunca lo había usado pero hoy lo hice por una única, simple y boba razón: tiene la propiedad Action de la que carece el combo regular. Cosa, por cierto, también inexplicable.

// Saludos
Responder Con Cita
  #7  
Antiguo 17-04-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Subo este hilo para indicar que en Delphi XE2 ocurre lo mismo, es decir:

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

Yo he llegado aquí porque, si se incrementa la fuente del "Combo", el efecto es todavía "peor", puesto que la lista desplegable aparece muy pequeña, desproporcionada, sino se aplica la solución propuesta por Román.
Responder Con Cita
  #8  
Antiguo 17-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué esperarán para corregirlo?
Responder Con Cita
  #9  
Antiguo 17-04-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Igual no es un error Casimiro... aunque lo cierto es que ocurre lo que explica Román, y, si aumentas el tamaño de la fuente el efecto es mayor, no digamos si se usa el estilo "simple" del "ComboBoxEx". No sé. Lo cierto es que la solución propuesta por Román parece funcionar bien.
Responder Con Cita
  #10  
Antiguo 18-04-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Jamás lo van a corregir. Si el autor de este hilo se hubiera tomado la molestia de consultar la ayuda habría visto esta descripción del método GetItemHt:

Cita:
Empezado por Ayuda de Delphi
Extended combo boxes do not support variable-height items. For this reason, TCustomComboBoxEx overrides the GetItemHt method so that it always returns 16.


// Saludos
Responder Con Cita
  #11  
Antiguo 18-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vaya, qué cosas
Responder Con Cita
  #12  
Antiguo 18-04-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

De todas formas... sigo sin entender nada. ¿Cómo es que podemos nosotros sobreescribir el método y obtener los resultados esperados? ¿Estamos saltándonos alguna ley o algo? ¿Terminaremos obteniendo resultados "impredecibles"? ¿Qué me pasa, doctor?
Responder Con Cita
  #13  
Antiguo 18-04-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues claro, yo tampoco entiendo. A mi juicio, la razón que da la ayuda es incorrecta porque en este caso específico no se trata de elementos de altura variable, sino de la misma altura en todos, que cambia sólo por el tamaño de la fuente.

// Saludos
Responder Con Cita
  #14  
Antiguo 18-04-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Por eso decía: a ver si va a haber algo escondido por ahí... tal vez el "error" provenga de que el alto del "ComboBox" no puede determinarse mediante la propiedad "ItemHeight", ni siquiera con la propiedad "Height", sino que depende del tamaño de la fuente. De hecho a mí me ha parecido leer algo sobre esto en la ayuda. Bueno. El caso es que la solución propuesta funciona como se espera, doy fe, también si se incrementa el tamaño de la fuente que viene predeterminado.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ComboBoxEx y ImageList emme_juegos OOP 15 12-02-2014 20:56:40
Abrir un ComboBoxEx automáticamente afxe Gráficos 4 03-03-2010 21:59:04
Ayuda ComboBoxEx Ge0Ks C++ Builder 11 27-02-2007 06:13:46


La franja horaria es GMT +2. Ahora son las 21:24:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi