PDA

Ver la Versión Completa : Componete creado con 2 TPanels IDE delphi no permite seleccionarlos


Tal
15-06-2022, 18:08:58
Hola.
He creado (o estoy intentando crear) un componente en DELPHI con dos paneles.

published
property Panel1 : TPanel read FPanel1;
property Panel2 : TPanel read FPanel2;
property Split : TSplitter read FSplit;
property ModoSplit : TPanelModoSplit read GetModoSplit write SetModoSplit default pmsHorizontal;
end;


constructor TPanelSplit.create(Aowner : TComponent);
begin
inherited;
ShowCaption := false;
caption := '';
FPanel1 := TPanel.Create(self);
FPanel1.ShowCaption := false;
FPanel1.Name := self.Name+'_panel1';
FPanel2 := TPanel.Create(self);
FPanel2.ShowCaption := false;
FPanel2.Name := self.Name+'_panel2';
FSplit := TSplitter.Create(self);
FPanel1.Parent := self;
FPanel2.Parent := self;
FSplit.Parent := self;
FSplit.Width := 5;
FPanel2.Align := alClient;
ModoSplit := pmsHorizontal;
end;


Va muy bien.
El único problema es que cuando intento dejar caer objetos sobre UN panel concreto no me es posible, puesto que me selecciona el objeto Tpanelsplit creado.
Y no sobre el panel concreto sobre el que yo lo quiero crear.

Seguro que la solución es una chorrada, pero es algo que no he hecho nunca.
Llevo una hora mirando a ver si había algún componente así.
He estado mirando el pagecontrol que crea Tabs y luego cada taba es idependiente...pero creo que no me vale además de que no he conseguido averiguar como lo hacen.

Si pudieran ayudarme me sería de mucha utilidad.
Muchas gracias.
Un saludo.

Neftali [Germán.Estévez]
16-06-2022, 09:10:22
Va muy bien.
El único problema es que cuando intento dejar caer objetos sobre UN panel concreto no me es posible, puesto que me selecciona el objeto Tpanelsplit creado.
Y no sobre el panel concreto sobre el que yo lo quiero crear.


Personalmente no acabo de entender muy bien el problema.

Tal
16-06-2022, 10:16:50
Hola.
Primero muchas gracias por la respuesta y segundo perdón por mi mala explicación...me pasa mucho.
https://drive.google.com/file/d/1z-Rl-Hq9WhkFTqx_ALw-R9jS-YvEIo7A/view?usp=sharing
Espero que se vea la imagen.
Ese componente es un panel con dos paneles (Y un splitter).

Mi problema es que ahora en el IDE de DELPHI, no puedo dejar caer otros objetos (edits, labels, otro panel,etc...)sobre el panel 1 o sobre el panel 2.
Los deja caer sobre el objeto, vendría a ser que los deja caer sobre el panel que contiene a los dos paneles.

Me gustaría poder dejar en tiempo de diseño objetos en cada panel independientemente.

Es decir, hacer algo así:
https://drive.google.com/file/d/1qfo4kJqhLuCxA26rMgGMAoQUJo-tnkxJ/view?usp=sharing

Pero habiendo dejado uno a uno los obejtos el IDE y no en el paint.
¿me he conseguido explicar?
Me gustaría poder pinchar en cada panel independientemente en tiempo de diseño.

¿es posible?

movorack
16-06-2022, 14:48:06
Hola, Tal!

Lo que comprendo de tu situación es que, estás creando un componente visual (TPanelSplit) y dentro de este componente tienes otros componentes visuales (dos TPanels y un TSplitter). Cuando arrastras el nuevo componente TPanelSplit a una forma, te muestra correctamente los dos panel y el spliter que están dentro de TPanelSplit pero no te deja ni seleccionar alguno de ellos ni modificarlos.

Si es así, creo que es el comportamiento normal de cualquier componente visual. Ya que el componente TPanelSplit debe trabajar como un solo objeto.

Te recomiendo revisar el uso de frames (https://docwiki.embarcadero.com/RADStudio/Sydney/en/Working_with_Frames).


Un marco (TFrame), como un formulario, es un contenedor para otros componentes. Utiliza el mismo mecanismo de propiedad que los formularios para la creación automática de instancias y la destrucción de los componentes que contiene, y las mismas relaciones padre-hijo para la sincronización de las propiedades de los componentes.

En cierto modo, sin embargo, un marco se parece más a un componente personalizado que a un formulario. Los marcos se pueden guardar en la paleta de herramientas para reutilizarlos fácilmente y se pueden anidar dentro de formularios, otros marcos u otros objetos contenedores. Después de crear y guardar un marco, continúa funcionando como una unidad y hereda los cambios de los componentes (incluidos otros marcos) que contiene. Cuando un marco está incrustado en otro marco o formulario, continúa heredando los cambios realizados en el marco del que se deriva.

Los marcos son útiles para organizar grupos de controles que se utilizan en varios lugares de su aplicación. Por ejemplo, si tiene un mapa de bits que se usa en varios formularios, puede ponerlo en un marco y solo se incluye una copia de ese mapa de bits en los recursos de su aplicación. También podría describir un conjunto de campos de edición destinados a editar una tabla con un marco y usarlo siempre que desee ingresar datos en la tabla.

Tal
16-06-2022, 15:35:11
Oye, pues muchas gracias.
Pues así lo haré. Lo conocía este apartado.
Tardaré, pero una vez lo tenga claro, os subiré como quedó.

Muchas gracias.