|
Página 1 de 2
|
Guardar La Posicion De Todos Los Formularios Abiertos
Autor |
Mensaje |
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Guardar La Posicion De Todos Los Formularios Abiertos
Tengo una aplicación (xlince) que abre muchos formularios, necesitaria tener una subrutina que recorriera todos los formularios abiertos y guardara la posicion X,Y,y anchos y largo de cada formulario...
¿como puedo recorrer todos los formularios que tengo abiertos, que apriori no se cuantos pueden ser, ya que depende del usuario...?
Gracias...
|
#1 Lunes, 13 Diciembre 2010, 20:02 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Hola
Esto habría que probarlo, pero yo creo que si en el _new incrementas una variable estática con ver el valor de esa variable en cualquiera de tus formularios valdría.
Las variables estáticas son vistas en todas las instancias de una clase, así que si cada vez que instancias una incrementas y cada vez que cierras una decrementas en esa variale tendrás el número de instancias abiertas.
Para conocer ese valor desde el exterior podrías tener una propiedad de solo lectura que devolviera ese dato
Un saludo
última edición por soplo el Lunes, 13 Diciembre 2010, 20:17; editado 3 veces
|
#2 Lunes, 13 Diciembre 2010, 20:13 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Yo crearía dos arrays en un módulo (accesibles a toda la aplicación), uno con el nombre de los formularios y otro con la referencia del formulario en sí mismo y añadiría un elemento a cada uno con cada formulario.
Y luego en cada formulario
public sub Form_new()
mimodulo.aNombreForms.Add(ME.Name)
mimodulo.aForms.Add(ME)
end
public sub form_Close()
mimodulo.aNombreForms.delete(me.name)
mimodulo.aForms.delete(ME)
end
Para conocer el estado de x e y de cada uno sólo tienes que consultar
DIM n,pos_X,pos_Y as Integer
'posicion x e y del formulario llamado miformulario
n=mimodulo.aNombreForms.find["miFormulario"]
if n then
pos_X=mimodulo.aForms[n].X
pos_Y=mimodulo.aForms[n].Y
end if
Seria más elegante con un array de dos dimensiones... pero como que la idea se entiende ¿no?
Suerte
=================== No podemos regresar
|
#3 Lunes, 13 Diciembre 2010, 21:28 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Yo creo que basta con usar la clase Settings.
En el evento Form_Close() de cada formulario, guardas su posición y tamaño y en el Form_Open() de cada uno, lo vuelves a cargar.
Form X es el nombre que quieras (diferente para cada Form), para identificar cada formulario o ventana de forma individual. Si usas ese código en cada uno de tus formularios, siempre se abrirán en la última posición y tamaño que tuvieran antes de cerrar la aplicació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"
|
#4 Lunes, 13 Diciembre 2010, 23:17 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Gente, no se si se han dado cuenta que cada uno está dando opiniones muy diferentes y que eso puede desorientar.
Si realmente fuera necesario llevar un control de los formularios abiertos la propuesta de Soplo sería la ideal (faltó decir que debería ser una clase estática que inicie el sistema).
La propuesta de shordi sería viable si se crearan los formularios por código (olvidó mostrar cómo guardaría los valores en disco).
La propuesta de Jesús es a mi criterio la más adecuada pero tiene el inconveniente de que multiplica el código por cada formulario. Para no duplicar el código sólo bastaría con crear dos métodos con parámetros formales (X, Y, W, H) de tipo entero en una clase estática o en un módulo que encapsulen el código, para luego llamar a esas rutinas desde los eventos Open y Close de cada formulario.
Saludos.
=================== Cómo programar con Gambas
Speed Books: informática libre.
|
#5 Martes, 14 Diciembre 2010, 05:35 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Citar: La propuesta de shordi sería viable si se crearan los formularios por código (olvidó mostrar cómo guardaría los valores en disco).
Discrepo, Fabián. En mi solución sólo utilizo eventos que maneja cada formulario desde el IDE. Es a la inversa, no sería viable si se crearan los forms por código... aún no sé cómo crear código por código, jejeje.
El cómo los guardaría... jsbsan no ha especificado si quiere almacenar los valores para futuras ejecuciones o sólo para la ejecución actual. Si es lo segundo, ya lo tiene disponible en los arrays del módulo(como le indico en el ejemplo). Si es para lo primero, yo lo guardaría en un Settings que crearía a la hora de cerrar la aplicación, o en una tabla de SQLite, que van muy bien.
Añado: La solución de soplo sólo controla el número de formularios abiertos. La solución de jGuardón, obliga a llevar el nombre de los forms en el propio código una y otra vez... Creo que la mía es la más flexible.
Se abre el concurso: Concursantes defiendan sus opciones. jejejeje
=================== No podemos regresar
última edición por shordi el Martes, 14 Diciembre 2010, 08:19; editado 1 vez
|
#6 Martes, 14 Diciembre 2010, 08:17 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Shordi:
Citar:
jsbsan no ha especificado si quiere almacenar los valores para futuras ejecuciones
Si se me ha pasado comentarlo, es para que lo abra para futuras ejecuciones el usuario...
El tema esta es que al abrirse tantas ventanas, el usuario , en cada archivo de trabajo (PRESUPUESTO), las pondrá donde el las pueda ver mejor, empezara a trabajar y luego cerrará la aplicación....
Al día siguiente volverá ha abrir el PRESUPUESTO (intentara seguir trabajando en el punto en que lo dejo), y no quiero que tenga que volver organizar las ventanas (perderá mucho tiempo y es incómodo). Quiero que al abrir el PRESUPUESTO se abran las ventanas tal como las dejo.
Según vuestros códigos, habría dos maneras de grabar la posición y nombres del formularios que estén abiertos:
- en un archivo de datos Settings,
- en un archivo plano de texto, que se guarde junto al archivo PRESUPUESTO.
También tengo que tener en cuenta que:
- que en el mismo día trabaje con varios presupuestos
- Y el usuario puede estar trabajando con varios Xlincegambas a la vez (en lo más normal en este tipo de aplicaciones, trabajar con varios presupuestos a la vez)
Quizás, con estas formas de trabajar, lo mejor sera tener un archivo donde guarde la posición y el nombre de cada formulario para cada archivo de PRESUPUESTO
Muchas gracias por vuestros códigos, los analizare cada uno y veré cual me puede servir mejor para mi propósito.
Saludos
Julio
Nota:
Hoy subo la alfta02 de este programa.. se admiten sugerencias para la mejora del programa...
https://sites.google.com/site/xlincegambas/descarga
|
#7 Martes, 14 Diciembre 2010, 10:47 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Si pretendes guardar la configuración de todas las pantallas abiertas según el presupuesto que el usuario abra etc. etc. Estás abocado a utilizar una base de datos para relacionar todo eso. Una tabla donde tengas el nick del usuario del programa, el nombre de las ventanas, la posición x e y, el registro último, etc. etc.
A mí, por lo menos, cualquier otra solución (settings, archivos planos, etc.) me parece mucho más engorrosa.
Yo utilizaría SQLite3, que va de maravilla.
Saludos.
=================== No podemos regresar
|
#8 Martes, 14 Diciembre 2010, 11:14 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Shordi:
Citar:
Discrepo, Fabián. En mi solución sólo utilizo eventos que maneja cada formulario desde el IDE. Es a la inversa, no sería viable si se crearan los forms por código
Los nombres de los eventos son genéricos, no están asociados a un nombre de formulario. En consecuencia, sí sería viable usarlos si se crearan los formularios por código: lo único necesario sería crear un nombre para el manejador de eventos al momento de crear cada formulario.
Pero lo que dije sobre que tu propuesta era viable si se creaban los formularios dinámicamente es consecuencia de que leí apresuradamente tu código y lo malinterpreté. De todos modos, no es necesario guardar los datos en un array para lo que Julio quiere hacer.
Citar:
El cómo los guardaría... jsbsan no ha especificado si quiere almacenar los valores para futuras ejecuciones o sólo para la ejecución actual
Es que a mí me resultó obvio al leer el mensaje de Julio que quería guardar esos datos para restablecerlos en cada ejecución posterior.
Citar:
La solución de jGuardón, obliga a llevar el nombre de los forms en el propio código una y otra vez
Es cierto. Se debería reemplazar algo como "FormX/Left" por ME.Name & "/Left".
Respecto de usar SQLite3, me parece que no es necesario porque este caso es muy simple de resolver mediante Settings. Supongamos que el sistema de Julio se utiliza en una empresa. En cada puesto de trabajo una misma pc será usada, probablemente, por 2 o 3 personas a lo sumo, no veo que haya razón para usar una base de datos para esto porque no hay complejidad en la estructura de datos a guardar, ni gran cantidad de datos, tampoco hay gran cantidad de usuarios, ni necesidad de accesos concurrentes.
Saludos
=================== Cómo programar con Gambas
Speed Books: informática libre.
|
#9 Martes, 14 Diciembre 2010, 19:27 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Guardar La Posicion De Todos Los Formularios Abiertos
Con todo el cariño y respeto debo decir que mi propuesta es la mejor y mas sencila je je je.
Si tu creas una variable estática dentro de una clase esa variable es visible dentro de todas las instancias de esa clase osea que si tu tienes diez instancias de un form por ejemplo y en uno de ellos a una variable estática le das el valor PI desde todas las instancias esa variable valdrá PI.
Por esa razón si cada vez que abres una instancia incrementas una variable y cada vez que cierras decrementas el resultado es que en esa variable tienes la cantidad de instancias que tienes.
La pregunta de este hilo se responde con que basta con crear una variable que sea declarada como estática, incrementarla o decrementarla según se crean o se destruyen instancias.
Mas simple imposible
última edición por soplo el Martes, 14 Diciembre 2010, 20:00; editado 1 vez
|
#10 Martes, 14 Diciembre 2010, 19:59 |
|
|
|
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
|
|
|
|
|