![]() |
TPageControl en tiempo de ejecución
Estoy experimentando con un editor de textos con un TPageControl con la idea de poder tener disponibles varios archivos simultáneamente cada uno con su respectiva solapa. Cada TTabSheet contiene un Memo.
No consigo crear un nuevo TTabSheet en el TPageControl en tiempo de ejecución [para crear un nuevo archivo]. En el evento click [Archivo nuevo... ] intento con este código sin respuesta alguna. Código:
TTabSheet.Create(PageControl1);Muchas gracias y hasta pronto |
Debes asignar PageControl1 a la propiedad PageControl del TabSheet recién creado.
// Saludos |
Cita:
Efectivamente con esta indicación he conseguido crear un nuevo TabSheet. Pero no sé cómo crearlo con un Memo en su interior como lo he hecho en tiempo de diseño con el primer TabSheet. Para ser más claro esta es la copia del código con el que ensayo la solución de este problema. Código:
unit PageControl; |
Cita:
// Saludos |
Código:
beginCita:
¿Cómo sería el código para esta asignación? Muchas gracias |
¿De qué manera estás intentando la última asignación que te indiqué?
No lo puedes hacer con un simple Código:
with TTabSheet.Create(Self)// Saludos |
Cita:
Código:
beginUn saludo y disculpa la insistencia; estoy en los comienzos. |
Es que TabSheet1 no apunta a ninguno de los dos tabshets recien creados...
tenes que hacer que el parent sea el tabshet que queres que sea su contenedor... Hasta luego. ;) |
Cita:
Me doy cuenta que mi error es de concepto. Eso es lo que más me preocupa. No tengo urgencia. Lo que quiero es aprender. Un saludo y gracias por ayudarme. |
Código:
var |
Cita:
Para que el Memo aparezca dentro del TabSheet debes asignarle dicho TabSheet a su propiedad Parent: Memo.Parent := tab sheet Lo que tienes que contestarte es: ¿Quién es dicho tab sheet? Una vez que lo sepas sabrás también qué valor debe tener TabSheet1 antes de asignárselo a Memo1.Parent. // Saludos |
Upsss, perdon como que eche a perder la clase :rolleyes:
|
Bueno, mi respuesta llegó un poco después de la de eduarcol así que será ya tu decisión tratar de entender el concepto y no sólo copiar el código.
// Saludos |
Cita:
Utilizar código hecho por los que más saben es una menera de empezar en esto, así creo. Mi intención siempre ha sido entender el concepto. Creo que es el espíritu de este Foro y la gran ayuda que brinda. Hoy Uds. me han dado mucho para empezar a entender un poco todo esto. Un saludo y hasta pronto |
Está bien. Ahora como ha apuntado roman... es decisión del "alumno" que hacer con la información obtenida.
Has escuchado alguna vez esto: Cita:
La sintaxis... eso es cosa simple. Las ideas, esas si que son complejas.... Hasta luego. ;) |
Cita:
De hecho yo pienso que todos los programadores deberian estar a nivel en conocimientos que los desarrolladores y los diseñadores de sistemas, asi los programas mejorarian su calidad, porq recuerden q: Cita:
|
Cita:
Quizas en algunos casos, pero no cualquiera... no me parece que sea correcto. Hasta luego. ;) |
Hola Eduarcol:
Estoy estudiando tu código que me ha sido muy útil: Código:
varAhora Bien: El Memo creado no toma las dimensiones del TabSheet. La referencia que da Delphi dice que la propiedad Width no funciona para los Controles contenidos en los TabSheet creados en tiempo de ejecución. Te agradeceré me orientes para conseguir que el Memo creado tome las dimensiones del TabSheet. Un saludo y hasta pronto |
Dale valor a la propiedad Align a alClient del TMemo
Código:
.... |
Ubica la propiedad Align del Memo y colocala ALClient
Align := AlClient; Esta propiedad tiene los valores Código:
AlClient := Se alinea en toda el area del contenedor |
Como que respondimos al mismo tiempo :D
|
Con este intento consigo crear un TabSheet y un Memo. Pero El Memo creado no toma las dimensiones del TabSheet. El Form se maximiza y el TabSheet queda normal con un Memo Mimimizado. He hecho la aplicación varias veces, por si había algún problema y se repite lo mismo.
Si se les ocurre algo para orientarme en cual puede ser el error se los agradeceré. Un saludo Código:
var |
bueno, puedes utilizar los Anchors para anclarla a las posiciones deseadas. Si quieres que se redimensione con el form
Código:
MiHoja.Anchors = [akLeft,akTop,akRight,akBottom]; |
Hola a todos. He conseguido la solución.
Sé que para Uds. será algo sencillo. Pero para mí que estoy en los comienzos es una gran alegría. En tiempo de diseño puse align:=alClient al TPageControl para que no quede desproporcionado cuando se maximiza el Form. Luego con este código creo un panel, un Memo y el correspondiente TabSheet. (ExtCtrls en Uses para el Panel) Código:
procedure TForm1.Button1Click(Sender: TObject);Un saludo y hasta pronto |
Bueno, pero... ¿de dónde sale eso de
Cita:
Porque a mi me funciona perfectamente. // Saludos |
Tomado de la ayuda de delphi
Cita:
Cita:
|
Cita:
A mí no me funcionó y me fui a buscarlo a la ayuda de Delphi 6 para TMemo Properties y encontré esto [Ver la note] Cita:
|
Perdon lei mal, crei que el que no funcionaba con el TabSheet era el Align, y resulta que es el width :confused:
Pero el align no te funcionaba por lo que te decia anteriormente |
Cita:
Cita:
// Saludos |
Cita:
Un saludo |
Hola de nuevo. Aunque no posteo mucho si que entro casi a diario al foro para resolver mis dudas.
En esta ocasion resubo este hilo (bastante antiguo por lo que veo, pero lo prefiero a crear otro nuevo, razones obvias), porque la duda que tengo va en la linea. Tenia en un primer momento la misma duda que tenia esocrates, la de como crear un tabsheet y dentro de este una stringgrid en tiempo de ejecucion y lo dicho, gracias a la ayuda del propio Delphi y de este hilo lo he logrado. Pero a raiz de esto, tengo otra duda. Y os explico un poco de como va el programa en el que estoy currando ahora para que me podais ayudar mejor. Yo abro un/os fichero/s y recojo en un primer momento ciertos datos que necesito. Esta info es el nombre de un sitio, su matricula y el dia de "autos" (como en cualquier producto: tipo, referencia y dia). Si este sitio no tiene pestaña propia, debo crear una (en tiempo de ejecucion) con su propio stringgrid asociado, y de existir debo pasar la hoja de ese sitio y por ende su stringgrid. Una vez hecho esto relleno la grid con los datos del fichero abierto. Yo consigo hacerlo todo salvo pasar el stringgrid asociado a la hoja con el sitio. Os paso algo de codigo para que se entienda "mejor":
Espero que me podais ayudar, porque no se ni por donde empezar. Perdon por el tronchazo que os acabo de soltar y gracias de antemano!! |
No estoy seguro de entender bien lo que querés... es asignar a la variable stri el StringGrid que ya está contenido en el TabSheet??
Saludos. |
Pues si, exactamente eso.
|
Si el string grid tiene un nombre, tan fácil como:
Si no lo tiene... pero hay solo uno, entonces algo como esto:
Esto funcionará si el StringGrid está directamente sobre el PageControl. Si está en otro control, pues se busca directamente en ese contenedor... o se hace una búsqueda recursiva. Si hay varios StringGrid, pues sería de idear la forma de identificar cuál es el que te interesa y condicionar la asignación hasta que se encuentre el indicado. Un saludo. |
Muchisimas gracias jachguate, ha sido una aclaracion diafana y cristalina.
Como cada tabsheet solo tiene un control (que es la stringgrid) lo unico que pongo es:
y va todo como un tiro. La verdad, que se me cayo la cara de vergüenza al ver lo simple y facil que era. Yo me estaba rompiendo los cuernos con Controls, Parents y este tipo de cosas... por lo que solo puedo repetir : GRACIAS POR LA AYUDA!!!! ;) |
| La franja horaria es GMT +2. Ahora son las 21:45:35. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi