| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Invitado
|
Publicado: Jue 29 Abr, 2004 11:55 pm Asunto: TcomboBox. Ver los items completos. |
|
|
¿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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 12 May, 2004 7:34 pm Asunto: |
|
|
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 |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Mie 12 May, 2004 7:56 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 12 May, 2004 8:21 pm Asunto: |
|
|
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 |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Mie 12 May, 2004 8:33 pm Asunto: |
|
|
| Gracias Leo. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 12 May, 2004 8:38 pm Asunto: |
|
|
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 |
|
 |
Kurroman Lt

Registrado: 07 Dic 2003Mensajes: 79
|
Publicado: Vie 16 Dic, 2005 10:14 am Asunto: |
|
|
Recibo el error: Canvas does not allow drawing. ¿Como podria solucionarlo?
Gracias. |
|
| Volver arriba |
|
 |
|