Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

TcomboBox. Ver los items completos.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: TcomboBox. Ver los items completos. Responder citando

¿Como puedo ver en la lista desplegable de un ComboBox los elementos que son mas largos que el combo? No encuentro con que propiedad hacer que la lista sea mas ancha que el combo o algo por el estilo.

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

Con el siguiente código puedes definir el ancho en pixels que tendrá la lista del combo al desplegarse:
Código:
unsigned pixelsAncho = 300;
ComboBox1->Perform(CB_SETDROPPEDWIDTH, pixelsAncho, 0);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola.

¿Y como podemos saber el ancho que necesitamos?.

Supongo que primero debemos saber cual es el mas ancho de todos los items que tenemos y posteriormente averiguar los pixels que requiere.

Saber cual es el mas largo no es problema, es simplemente calcular su longitud, pero ¿y pasarlo a pixels?.

Un saludito.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A ver si te sirve esto:
Código:
int anchoMax = 0;

// Buscamos el ancho en pixels de la linea mas larga
for (int i = 0; i < ComboBox1->Items->Count; i++)
{
    int ancho = ComboBox1->Canvas->TextWidth(ComboBox1->Items->Strings[i]);
    if (anchoMax < ancho)
        anchoMax = ancho;
}

// Sumamos el ancho de la barra de scroll
anchoMax += GetSystemMetrics(SM_CXVSCROLL);

ComboBox1->Perform(CB_SETDROPPEDWIDTH, anchoMax, 0);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

De nada... el código de arriba no calcula bien el ancho según que fuente se use, añadimos una línea para corregirlo:
Código:
int anchoMax = 0;

// Buscamos el ancho en pixels de la linea mas larga
ComboBox1->Canvas->Font = ComboBox1->Font;  // <- añadimos esta linea
for (int i = 0; i < ComboBox1->Items->Count; i++)
{
    int ancho = ComboBox1->Canvas->TextWidth(ComboBox1->Items->Strings[i]);
    if (anchoMax < ancho)
        anchoMax = ancho;
}

// Sumamos el ancho de la barra de scroll
anchoMax += GetSystemMetrics(SM_CXVSCROLL);

ComboBox1->Perform(CB_SETDROPPEDWIDTH, anchoMax, 0);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Recibo el error: Canvas does not allow drawing. ¿Como podria solucionarlo?

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.