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 

Alineación de paneles y splitters

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Alineación de paneles y splitters Responder citando

Hola a todos.

Estoy haciendo una división de un panel en otros dos en tiempo de ejecución. Con la división horizontal no tengo problema, pero con la división vertical sí. En el panel que divido creo un panel a la izquierda (PanelIzq), un splitter (Splitter1) y un panel a la derecha (PanelDer), y ajusto sus propiedades de la misma forma que si lo estuviera haciendo en tiempo de diseño:
Código:
···
TPanel *PanelIzq=new TPanel(this);
PanelIzq->Parent=PanelPadre;
PanelIzq->Name="PanelIzq";
PanelIzq->Align=alLeft;
···
TSplitter *Splitter1=new TSplitter(this);
Splitter1->Parent=PanelPadre;
Splitter->Align=alLeft;
···
TPanel *PanelDer=new TPanel(this);
PanelDer->Parent=PanelPadre;
PanelDer->Name="PanelDer";
PanelDer->Align=alAllclient;
···
Y el splitter me lo coloca pegado al borde izquierdo, y no entre el panel izquierdo y el derecho.
¿Alguna sugerencia?

Un saludo.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Usa la propiedad Left del Splitter para indicarle la posición (más o menos como harías en tiempo de diseño al moverlo), por ejemplo:

TSplitter *Splitter1=new TSplitter(this);
Splitter1->Left = PanelIzq->Width;
Splitter1->Parent=PanelPadre;
Splitter1->Align=alLeft;

o bien cambia el orden de creación. Crea primero el splitter, luego el panel izquierdo y luego el panel derecho.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola _Leo.

Me lo hace bien si alineo los paneles y el splitter a la derecha según el siguiente código:
Código:
···
TPanel *PanelDer=new TPanel(this);
PanelDer->Parent=PanelPadre;
PanelDer->Name="PanelDer";
PanelDer->Align=alRight;
···
TSplitter *Splitter1=new TSplitter(this);
Splitter1->Parent=PanelPadre;
Splitter->Align=alRight;
···
TPanel *PanelIzq=new TPanel(this);
PanelIzq->Parent=PanelPadre;
PanelIzq->Name="PanelIzq";
PanelIzq->Align=alAllclient;
···
No entiendo por qué así si funciona. De todas formas voy a probar tu sugerencia y mañana te diré.

Un saludo.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola otra vez.

He probado la inclusión de la línea que me has indicado y funciona correctamente. Ahora viene la segunda parte, el borrado de los paneles y splitters en tiempo de ejecución.
Cuando con el splitterX, que separa el panelY y el panelZ, hago que uno de éstos tenga una altura (o anchura) igual a 0, debo eliminar tanto el splitterX como el panelY y el panelZ. Para ello uso el siguiente código:
Código:
void __fastcall TForm1::PanelResize(TObject *Sender){
  int i;
  TPanel *Panel=(TPanel *)Sender,*Panel1,*Panel2;
  TSplitter *Splitter;
  AnsiString ASPanel;
  if(Panel->Height==0){
    ASPanel=Panel->Name;
    i=ASPanel.SubString(6,ASPanel.Length()-5).ToInt();
//    ShowMessage(i);
    if(i%2==1)
      i--;
//    ShowMessage(i);
    Panel1=(TPanel *)FindComponent("Panel"+AnsiString(i));
    ShowMessage(Panel1->Name);
    delete Panel1;
    Splitter=(TSplitter *)FindComponent("Splitter"+AnsiString(i/2));
    ShowMessage(Splitter->Name);
    delete Splitter;
    Panel2=(TPanel *)FindComponent("Panel"+AnsiString(i+1));
    ShowMessage(Panel2->Name);
    delete Panel2;
  }
//  else if(Panel->Width==0){
//  }
}
Esto borra los panels y el splitter pero manda un error y se detiene la aplicación. ¿Alguna sugerencia?

Un saludo y buen fin de semana.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
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.