|
Página 1 de 2
|
Autor |
Mensaje |
pikas
Usuario
Registrado: Enero 2010
Mensajes: 8
Edad: 42 Ubicación: Galicia
|
Coleccion Formularios
Hola gente, estoy intentando hacer una enumeración de los formularios de mi proyecto, pero no doy con la manera de hacerlo.
He googleado bastante y no encuentro la solución a mi problema, supongo que algo me estoy planteando mal. Vengo de visual basic, y condicionado por ello, os expongo en código lo que tengo en mente. El código es completamente erróneo, ya que la colección forms, sirve para VB, y lo que busco es el equivalente en gambas que no logro encontrar:
for each form in forms
message(form.name)
next form
Por lo que he leído, creo que tengo que crear yo mismo la colección de formularios, pero me encuentro algo perdido, porque me extraña que gambas no facilite la colección de formularios de una manera sencilla. Gracias a todos!
|
#1 Sabado, 23 Enero 2010, 14:05 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Coleccion Formularios
Tal vez deberías contarnos cuál es realmente tu necesidad, en vez de cómo pensaste que podías satisfacerla.
Al menos yo no recuerdo que gambas lleve una colección de los formularios abiertos, de modo que deberías crear una colección y agregas una referencia de cada formulario a la colección a medida que se abren. Si tienes muchos clases de formularios diferentes lo que puedes hacer es establecer la propiedad Group de cada formulario a un valor común y luego crear un manejador para los eventos Open de ese grupo (en esa rutina escribes el código para añadir la referencia del formulario a la colección).
Saludos cordiales.
=================== Cómo programar con Gambas
Speed Books: informática libre.
|
#2 Sabado, 23 Enero 2010, 17:48 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Coleccion Formularios
Concido con Fabian que indiques lo que quieres hacer porque en gambas no hay colección de forms como en VB pero tampoco hacen falta. Hay muchas cosas que se pueden hacer en gambas de manera bastante mejor.
Caes (yo también caí en ello) en el error de hacer una traslación directa de VB. gambas es mucho mas rico que VB.
última edición por soplo el Sabado, 23 Enero 2010, 18:46; editado 1 vez
|
#3 Sabado, 23 Enero 2010, 18:41 |
|
|
pikas
Usuario
Registrado: Enero 2010
Mensajes: 8
Edad: 42 Ubicación: Galicia
|
Re: Coleccion Formularios
Bueno, pues os explico lo que quiero hacer. Tengo un workspace donde salen formularios, en cada formulario hay un panel con todos los controles. Estos paneles, son mas pequeños que el formulario que los contiene. Lo que quiero hacer, es que al cambiar el tamaño de la ventana principal, los paneles se centren en los formularios. El como centrarlos, ya se como hacerlo, lo que me falta es que el programa compruebe que formularios hay en el workspace.
Para llevar a cabo esta comprobacion queria usar algo del estilo:
for each formulario
if workspace.children.find(formulario) = 0 then centrar_panel()
next
|
#4 Sabado, 23 Enero 2010, 20:02 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Coleccion Formularios
Para eso tienes que jugar con la propiedad arrangement que decide como se ajustan los controles de un container (en tu caso un form). Es decir como se ajustan los children de un container cualquiera.
Solo es cuestión de probar a ver cual de las posibilidades te queda mejor. Por lo que dices entiendo que será arrange.horizontal
No tienes que codificar nada. Solo poner la propiedad con su valor adecuado.
|
#5 Sabado, 23 Enero 2010, 23:48 |
|
|
pikas
Usuario
Registrado: Enero 2010
Mensajes: 8
Edad: 42 Ubicación: Galicia
|
Re: Coleccion Formularios
El rollo no va por ahi Soplo. No quiero parecer borde, pero es que la cuestion se esta complicando. Simplemente quiero saber como hacer una coleccion de todos los formularios del proyecto, esten o no en el workspace, o como segunda opcion, enumerar los formularios que contiene el workspace. Pasarse a otros temas es desviar mi pregunta. Que haya metodos mejores o peores es otra cosa, pero por lo que he visto en otros foros de cualquier tipo de programacion, hay gente que pregunta cosas muy por el aire, y la gente experta responde "por favor concreta tu pregunta". En este caso yo estoy preguntando algo super concreto y me estais derivando a otros temas. Vuelvo a insistir en que no quiero parecer borde, pero mi pregunta esta enfocada a un punto, aun que no sea la mejor manera de hacerlo, quiero saber como hacerlo, si estoy en un error os aseguro que practicando por mi mismo me dare cuenta, pero por el momento quiero saber como hacer esto en particular, gracias a todos por vuestra colaboracion.
|
#6 Domingo, 24 Enero 2010, 01:42 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Coleccion Formularios
Haces bien en insistir si estás preguntando bien y somos los demás los que no te comprendemos, no te preocupes por eso.
Te decía que en gambas no hay una colección directa de forms como en vb, pero es que no hace falta para nada. A mí también me costó un poco hasta que le pillé el nervio a gambas y desde entonces no he vuelto a necesitar esa coleccción. Por eso te pregunté lo que quieres hacer.
Seǵún yo entiendo tu tienes un workspace con varios form y una pestaña para cada uno de manera que los form son independientes entre si y todos están dentro de un workspace común. Tu problema es que si cambia de tamaño el workspace tu quieres que tus form hijos se reajusten y por tanto los controles que estos contienen.
¿Es eso?
Como nunca he trabajado con workspace no puedo decirte las cosas sin probarlas y ahora no puedo, pero si me confirmas que este es exactamente tu problema mañana lo habré probado, pero según yo entiendo con arrange haces que tus forms hijos (que deben tener expand true) se adapten. Por tanto ahora el problema es el mismo dentro de cada formulario. Debe tener arrangement y sus controles hijos debieran estar agrupados en containers que pudieran adaptarse al nuevo tamaño. Cada uno de estos containers contienen a su vez controles que se adaptarán al tamaño de su frame (o el que sea).
No te preocupes por insistir. Mañana probaré esto y ya está.
La lista de forms debería estar en children. Al fn y al cabo children es un array de object[] razón por la cual en children.count debería estar la cantidad de forms y recorrerlos sería algo como
for each f in wkspc.children.count
f.delete (o lo que sea, esto eliminaría ese form del workspace)
next
Mañana pruebo estas cosillas que el workspace me incita alguna curiosidad
|
#7 Domingo, 24 Enero 2010, 03:55 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Coleccion Formularios
Hola pikas
Quizás aquí tengas la respuesta, aunque no lo he probado:
http://gambasdoc.org/help/comp/gb.form.mdi/workspace/children
La propiedad 'Children' devuelve un array de los objetos de tipo Form que son hijos del Workspace. Luego sólo tienes que enumerarlos o recorrerlos con un bucle.
Lo que no me queda claro es cuando dices:
Lo que quiero hacer, es que al cambiar el tamaño de la ventana principal, los paneles se centren en los formularios. El como centrarlos, ya se como hacerlo, lo que me falta es que el programa compruebe que formularios hay en el workspace.t
Entiendo que tal como dice soplo, deberías usar los contenedores y sus propiedades relacionadas como se explica en este hilo.
Si ya lo has probado y no te funciona, quizás sea un problema de tu implementación.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#8 Domingo, 24 Enero 2010, 13:42 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Coleccion Formularios
Efectivamente tal como dije he podido hacerlo sin ninguna dificultad de esta manera
public sub form_open()
dim wk as new workspace(me) 'el workspace
dim w as window, w1 as window, w2 as window, w3 as window
dim b1 as button, b2 as button, b3 as button
me.arrangement=arrange.fill 'que el workspace llene el formulario
w1 = NEW window
w1.text = "uno"
w1.arrangement=arrange.fill 'que esta ventana haga lo mismo con lo que contenga
w2 = NEW window
w2.text = "dos"
w2.arrangement=arrange.fill 'que esta ventana haga lo mismo con lo que contenga
w3 = NEW window
w3.text = "tres"
w3.arrangement=arrange.fill 'que esta ventana haga lo mismo con lo que contenga
'crear un botón en cada ventana
b1=new button(w1)
b2=new button(w2)
b3=new button(w3)
wk.Add(w1) 'añadir las tres ventanas
wk.Add(w2)
wk.Add(w3)
Ahora recorrer las tres ventanas y cambiarles el texto
FOR EACH w IN wk.Children 'bucle que recorre las ventanas
w.Text &= "*" 'a cada título le añade un *
NEXT
end
|
#9 Domingo, 24 Enero 2010, 17:52 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Coleccion Formularios
Citar:
Simplemente quiero saber como hacer una coleccion de todos los formularios del proyecto, esten o no en el workspace
Pikas, esto ya te fue respondido. Sólo resta aclarar que los formularios no poseen propiedad group como la mayoría de los controles ( ¡ups!).
Citar:
, o como segunda opcion, enumerar los formularios que contiene el workspace.
Pikaaaasss, la mesa está servidaaa:
Citar:
Pasarse a otros temas es desviar mi pregunta.
Eso suena a que quieres que te resolvamos tu problema. Bien... creo ya lo hemos hecho, así que al menos nos debes unas cervezas
Citar:
Que haya metodos mejores o peores es otra cosa, pero por lo que he visto en otros foros de cualquier tipo de programacion, hay gente que pregunta cosas muy por el aire, y la gente experta responde "por favor concreta tu pregunta". En este caso yo estoy preguntando algo super concreto y me estais derivando a otros temas.
Tu pregunta fue muy concreta y mal orientada porque como mencioné antes no expone cuál es tu necesidad, sino cómo estás pensando en que podrías resolverla. Además, en tu segundo mensaje desviaste tú el tema innecesariamente hacia lo de centrar el panel en el formulario. Por las dudas:
PUBLIC SUB Form_Resize()
WITH Panel1
.X = (.Parent.ClientWidth - .Width) / 2
.y = (.Parent.ClientHeight - .Height) / 2
END WITH
END
Aún después de este diálogo contigo, que lleva varios mensajes de respuesta, no sabemos concretamente cuál es tu necesidad. Eso nos conduce ha responderte un poco a ciegas y nos hace perder tiempo (y eso no nos gusta).
Saludos.
(no te olvides de las cervezas)
Edición:
soplo no había visto tu respuesta. Hasta hace unos días, si estabas escribiendo una respuesta y entraba un nuevo mensaje al hilo, se mostraba un mensaje de advertencia. Pero en mis últimos dos mensajes esto ya no ocurrió.
=================== Cómo programar con Gambas
Speed Books: informática libre.
última edición por fabianfv el Domingo, 24 Enero 2010, 18:16; editado 1 vez
|
#10 Domingo, 24 Enero 2010, 18:10 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|