Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Guardar La Posicion De Todos Los Formularios Abiertos
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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...
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.

static private variable as integer
public sub _new()
inc variable
end

private sub _free()
dec variable
end


Para conocer ese valor desde el exterior podrías tener una propiedad de solo lectura que devolviera ese dato
property read Num_instancias as integer

public function Num_Instancias_read() as integer
return variable
end


Un saludo
 



 
última edición por soplo el Lunes, 13 Diciembre 2010, 20:17; editado 3 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.

'en un módulo llamado mimodulo
public aNombreForms as new string[]
public aForms as new Form[]
 


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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.

' al cerrar el FormX se guarda su posición y tamaño
PUBLIC SUB Form_Close()
    Settings["FormX/Top"] = ME.ScreenY
    Settings["FormX/Left"] = ME.ScreenX
    Settings["FormX/Height"] = ME.Height
    Settings["FormX/Width"] = ME.Width
END

' al abrir el FormX se cargan los datos
PUBLIC SUB Form_Open()
    ME.Left = Settings["FormX/Left", ME.Left]
    ME.Top = Settings["FormX/Top", ME.Top]  
    ME.Height = Settings["FormX/Height", ME.Height]
    ME.Width = Settings["FormX/Width", ME.Width]
END


FormX 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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿cómo Puedo Mostrar Todos Los Formulario... jsoto61 General 12 Martes, 08 Diciembre 2009, 12:31 Ver último mensaje
jsoto61
No hay nuevos mensajes (Ayuda).. Como Cerra Formularios Anteriorm... OneErick General 4 Sabado, 02 Marzo 2013, 11:38 Ver último mensaje
shordi
No hay nuevos mensajes Menus Y Que Todos Los Formularios Creados ... david Controles/Librerías/Componentes 5 Jueves, 17 Octobre 2019, 20:24 Ver último mensaje
gambafeliz
No hay nuevos mensajes ProComun. Red De Recursos Educativos Abier... Shell Off-topic 1 Jueves, 04 Junio 2020, 13:24 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron