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 

Tamaño en un TListView

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Tamaño en un TListView Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Yo uso BDB 5, pero es que este mismo código sin tocar nada me ha estado funcionando sin problemas. No entiendo nada
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

pues si que es raro , has probado de borrar todos los obj , los ~
y compilar todo de nuevo??,
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

mns escribió:
pues si que es raro , has probado de borrar todos los obj , los ~
y compilar todo de nuevo??,

Sí, y le da lo mismo Mad
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Solucionado. Y me da vergüenza porque es una estupidez muy grande Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed
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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel escribió:
Solucionado. Y me da vergüenza porque es una estupidez muy grande Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed
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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias por los comentarios.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.