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 

Detectar ancho de un TreeView

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Detectar ancho de un TreeView Responder citando

Hola, a alguien se le ocurre la manera de detectar el ancho de un TreeView?
Lo que intento hacer es cambiar el ancho de la ventana en caso de que la arboresencia sobrepase el tamaño de la ventana.
Se entiende?


saludos
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola, Diego, lo primero que se me ocurre es que no siempre es posible lo que pides (a no ser que dispongas de una hipersuperpantalla panorámica, por supuesto), por lo que deberías poner alguna acotación al código que diseñes.

No he estudiado tu caso, pero en cierta ocasión tuve que trabajar con StringGrid's, y para que el texto escrito se viera en una columna tuve que usar la función TextWidth del Canvas en que estaba escribiendo, en tu caso algo así como:
Código:
TreeView1->Canvas->TextWidth(TreeView1->Items->Item[nodo]->Text)
donde nodo es un entero.

Si el ancho que te proporcione ese código más el espacio extra que dejas en cada subnivel multiplicado por el número de subnivel en que te encuentras es mayor que TreeView1->Width (con algún ajuste por los márgenes) tendrás que ampliar el ancho de la ventana (recordando que no debe ser más ancha que el propio monitor). En lo que no te puedo ayudar es en averiguar el subnivel en que estás ni el ancho añadido (te agradeceré que lo postees cuando encuentres la solución).

Suerte
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muy bueno enrique. Si, ya tenia contemplado lo de los limites ya que a la manera clasica tengo otra ventana a la derecha del TreeView. Mi problema radicaba sobre todo en encontrar la info para luego hacer el ajuste. Voy a ver lo de los subniveles.

Ultima edición por el diego el Jue 18 Mar, 2004 1:27 am, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

A ver enrique que te parece esto:
Código:
void __fastcall TForm1::TreeView1Change(TObject *Sender, TTreeNode *Node)
{
     int Level = Node->Level + 1;
     int indent = TreeView1->Indent;
     int Pos1 = TreeView1->Canvas->TextWidth(Node->Text);
     int ActualW = (Level * indent) + Pos1 + 14; 
     //14 puesto a ojo como los margenes internos del TreeView
     int PosEnd = ActualW - TreeView1->Left;

     //Verificacion de que el texto depase el ancho de la ventana.
     if (ActualW > TreeView1->Width)          {
        if (PosEnd >= Edit1->Left)  //El ancho maximo lo da la posicion de un Edit que puse por ahi (puede ser fijo)
           {
           //5 es la separacion que va a tener como minimo los dos componentes
           TreeView1->Width = Edit1->Left - TreeView1->Left - 5;
           }
        else
           {
           TreeView1->Width = ActualW;
           }
        }
}

Lo que hace es Tomar el nivel del nodo en la arborescencia. Luego multiplicarlo por la indentacion (la separacion entre nodos) y luego le suma el ancho del texto del nodo en cuestion. Eso nos dide mas o menos hasta donde llega el texto dentro de la ventana del TreeView.
Luego verifica que no depase un cierto limite dado por la posicion de otro componente. Puede ser fijo si quieren.
Bueno, alguna idea para mejorarlo? Yo con esto ya me conformo.
Otra seria recuperar los datos del subnodo (el nodo que acabamos de abrir si es que hay) para hacer los calculos con ese y no con el que seleccionado.
Ahora a dormir..


saludos
diego
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.