| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 16 May, 2011 10:12 am Asunto: Tamaño en un TListView |
|
|
Me está ocurriendo algo que al menos a mi me resulta chocante. Tengo un formulario con un TListView que uso para facilitar ayuda en un programa y el mismo lo uso en diversos sitios. Por aquello de hacerlo elegante quiero ajustar la anchura del ListView en función del contenido. Para ello uso este código, por ejemplo:
| Código: | Application->CreateForm(__classid(TfAyudas), &fAyudas);
fAyudas->Label1->Caption = "Ayuda para Poblaciones";
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 350;
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 50;
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 0;
fAyudas->Ayuda->Width = 13; // Ancho de la barra de scroll
fAyudas->Width = fAyudas->Ayuda->Width + 4;
for (int nCol = 0; nCol <fAyudas>Ayuda->Columns->Count; nCol ++)
fAyudas->Ayuda->Width += fAyudas->Ayuda->Column[nCol]->Width;
fAyudas->Width = fAyudas->Ayuda->Width + 4;
fAyudas->Repaint();
fAyudas->AutoSize = true;
(Carga de la ayuda con un query)
fAyudas->ShowModal();
|
En este caso se crean tres columnas. En teoría, al mostrarse el formulario fAyudas el ListView debería tener de ancho 413 y el formulario 417, pero haga lo que haga no me ajusta automaticamente la vista y me lo deja con el tamaño del diseño (149).
¿Alguna idea? Porque lo que no quiero es craer tantos formularios como ayudas (unas 20). _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
mns Lt

Registrado: 15 Oct 2008Mensajes: 95
|
Publicado: Lun 16 May, 2011 10:45 am Asunto: |
|
|
que raro , acabo de usar tu codigo en un proyecto nuevo , y parece que funciona correctamente asi como tu quieres , a ver si va a pasar algo en el momento que lo rellenas , no se
has probado de hacerlo con un proyecto limpio a ver si te funciona solo esta parte??
lo he probado con bcb6 |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 16 May, 2011 11:39 am Asunto: |
|
|
Voy más allá. He probado cambiando un poco el código con este otro:
| Código: | Application->CreateForm(__classid(TfAyudas), &fAyudas);
fAyudas->Label1->Caption = "Ayuda para Padres";
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 230;
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 230;
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 0;
pColumn = fAyudas->Ayuda->Columns->Add();
pColumn->Width = 230;
fAyudas->Ayuda->Width = 703;
fAyudas->Width = fAyudas->Ayuda->Width + 4;
fAyudas->Update();
fAyudas->AutoSize = true; |
Pues bien. Tras ejecutar el CreateForm el ancho del ListView es 160; creo las columnas y tras ejecutar fAyudas->Ayuda->Width, ¡sigue siendo 160! Ignora totalmente la asignación. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
mns Lt

Registrado: 15 Oct 2008Mensajes: 95
|
Publicado: Lun 16 May, 2011 3:08 pm Asunto: |
|
|
pues si que es raro , has probado de borrar todos los obj , los ~
y compilar todo de nuevo??, |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 16 May, 2011 4:23 pm Asunto: |
|
|
Solucionado. Y me da vergüenza porque es una estupidez muy grande
Encima del TListView tenía puesto un TLabel con Align = alTop y AutoSize = true; por lo tanto el formulario no se autoajustaba. O al menos al quitar esas propiedades si lo hace; si alguno puede encontrar otra explicación, lo agradeceré. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
elyeyo1000 Cdt

Registrado: 20 Dic 2006Mensajes: 17
|
Publicado: Mar 17 May, 2011 4:36 pm Asunto: |
|
|
| Angel escribió: | Solucionado. Y me da vergüenza porque es una estupidez muy grande
Encima del TListView tenía puesto un TLabel con Align = alTop y AutoSize = true; por lo tanto el formulario no se autoajustaba. O al menos al quitar esas propiedades si lo hace; si alguno puede encontrar otra explicación, lo agradeceré. |
Hola Angel,
Segun entiendo estas propiedadse funcionan de la siguiente manera:
* Align = alTop -> El control está alineado con la parte superior del formulario, es decir, si por ejemplo cambias el tamaño del formulario, el control se autoajustará al nuevo tamaño teniendo en cuenta que siempre debe tener la misma altura con respecto a la parte superior. Cambia esta propiedad a alBottom y luego modifica la altura del formulario para que puedas ver un ejemplo de lo que hace. También puedes verlo al alinearlo de izquierda a derecha o viceversa.
* AutoSize = true -> Esta propiedad, como bien entendiste, trata de autoajustar el control al ancho de la información que contiene. Como veo que estás rellenando el listview en tiempo de ejecución, tiene sentido pensar que al iniciar el formulario, el listview toma el ancho inicial de un control vacío. De ahí que no se ensanche una vez le asignas los datos. Al ponerle esta propiedad en false, el Builder ya no gestiona el ancho de este control, por lo que podrás modificarlo al gusto en tiempo de ejecución o de desarrollo.
Creo que ambas propiedades funcionan así, pero si existen correcciones, serán bienvenidas.
Saludos a todos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|