Página 1 de 1
Hacer activo un Form
Publicado: Mié Oct 19, 2005 12:06 am
por Xevi
Tengo una aplicación MDI, en la que la tecla F2 me envía a la Agenda, F3 a Artículos, sin ésto Forms ser CHILDS...
Bien, pues si pulso F2 y abro el Form1 AGENDA, y luego pulso F3 y abro el Form2 Artículos...
El Form2 que abro segundo SIEMPRE se queda por delante del primero, aunque cliquee en el Form1
También, cuando vuelvo a pulsar la tecla asociada al Form, busco en el array de Application, y si éste ya está abierto, lo único que quiero es que se active como Form activo de la aplicación....
Pues esto no me funciona, no me "activa" la ventana.
For n:=1 to Len(Application:aForms)
If Application:aForms[n]:Cargo = "AGENDA"
Application:aForms[n]:Show()
Return
EndIf
Next
¿Cómo puedo enviar un Form delante de otro, o ponerlo el primero activo?
Hay algo como Application:ActiveForm( MiForm ) ???
Gracias.
Un Saludo,
Xevi
--
Hacer activo un Form
Publicado: Mié Oct 19, 2005 10:51 am
por Xevi
¿Sería posible poder hacer pública la propiedad o implementar algun evento de activar una Ventana?
Application:oActiveForm := Application:aForms[n]
***************************** Registro de errores *****************************
Fecha: 19/10/2005
Hora: 10:47:31
Memoria libre: 590088
Area actual: 1
------------------------- Información del compilador --------------------------
Versión Xailer: Xailer 0.99.5 Pre-release 5a
Compilador: xHarbour build 0.99.51 Intl. (SimpLex) PCode Version: 7
Compilador C/C++: Borland C++ 5.5.1
Plataforma: Windows XP Home Edition 5.01.2600 Service Pack 2
----------------------- Información detallada del error -----------------------
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Scope Violation <READONLY>
Operación: _OACTIVEFORM
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
XFRMARTICLESCITROEN (12)
(b)TFRMMENU:FORMSHOW (360)
RUNFORM (0)
TAPPLICATION:RUN (189)
MAIN (24)
------------------ Información detallada de áreas de trabajo ------------------
Area: 1
Alias: ARTICLESCITROEN
Registro: 118551
Filtro:
Relación:
Orden del índice: 1
Clave activa: 1
Un Saludo,
Xevi.
"Xevi" <
xevicomas@terra.es> escribió en el mensaje news:[email=
43557201@ozsrvnegro.ozlan.local...]
43557201@ozsrvnegro.ozlan.local...[/email]
Tengo una aplicación MDI, en la que la tecla F2 me envía a la Agenda, F3 a Artículos, sin ésto Forms ser CHILDS...
Bien, pues si pulso F2 y abro el Form1 AGENDA, y luego pulso F3 y abro el Form2 Artículos...
El Form2 que abro segundo SIEMPRE se queda por delante del primero, aunque cliquee en el Form1
También, cuando vuelvo a pulsar la tecla asociada al Form, busco en el array de Application, y si éste ya está abierto, lo único que quiero es que se active como Form activo de la aplicación....
Pues esto no me funciona, no me "activa" la ventana.
For n:=1 to Len(Application:aForms)
If Application:aForms[n]:Cargo = "AGENDA"
Application:aForms[n]:Show()
Return
EndIf
Next
¿Cómo puedo enviar un Form delante de otro, o ponerlo el primero activo?
Hay algo como Application:ActiveForm( MiForm ) ???
Gracias.
Un Saludo,
Xevi
--
Hacer activo un Form
Publicado: Mié Oct 19, 2005 11:04 am
por Giuseppe Bogetti
Hi,
see Thread MDI Child Selection in local.xailer.pro.en
--
Best regards,
Giuseppe Bogetti
B.G. Soft
Cuneo - Italy
Hacer activo un Form
Publicado: Mié Oct 19, 2005 11:07 am
por jfgimenez
Xevi,
Bien, pues si pulso F2 y abro el Form1 AGENDA, y luego pulso F3 y abro el Form2 Artículos...
El Form2 que abro segundo SIEMPRE se queda por delante del primero, aunque cliquee en el Form1
Eso depende de quién sea el padre de cada ventana. Si form1 es el padre de form2, entonces form2 siempre estará delante. Lo que puedes hacer es que el padre de ambas sea Application.
También, cuando vuelvo a pulsar la tecla asociada al Form, busco en el array de Application, y si éste ya está abierto, lo único que quiero es que se active como Form activo de la aplicación....
Pues esto no me funciona, no me "activa" la ventana.
For n:=1 to Len(Application:aForms)
If Application:aForms[n]:Cargo = "AGENDA"
Application:aForms[n]:Show()
Return
EndIf
Next
¿Cómo puedo enviar un Form delante de otro, o ponerlo el primero activo?
Hay algo como Application:ActiveForm( MiForm ) ???
El método Show() activa una ventana MDIChild, como ya usaste una vez, pero no los demás tipos de ventana. Es más, hace un par de días, en el foro inglés puse una modificación de TForm para que todos los tipos de ventana se puedan activar usando el método SetFocus(). Es decir, la 3ra. línea de tu ejemplo quedaría así:
Application:aForms[n]:SetFocus()
--
Un saludo,
José F. Giménez
--
Hacer activo un Form
Publicado: Mié Oct 19, 2005 11:26 am
por Xevi
Jose,
Gracias.
Me funciona perfectamente.
En mis deberes está el aprender Inglés!!!
Un Saludo,
Xevi.
"Jose F. Gimenez" <
jfgimenez@wanadoo.es> escribió en el mensaje news:[email=
43560cd7@ozsrvnegro.ozlan.local...]
43560cd7@ozsrvnegro.ozlan.local...[/email]
Xevi,
Bien, pues si pulso F2 y abro el Form1 AGENDA, y luego pulso F3 y abro el Form2 Artículos...
El Form2 que abro segundo SIEMPRE se queda por delante del primero, aunque cliquee en el Form1
Eso depende de quién sea el padre de cada ventana. Si form1 es el padre de form2, entonces form2 siempre estará delante. Lo que puedes hacer es que el padre de ambas sea Application.
También, cuando vuelvo a pulsar la tecla asociada al Form, busco en el array de Application, y si éste ya está abierto, lo único que quiero es que se active como Form activo de la aplicación....
Pues esto no me funciona, no me "activa" la ventana.
For n:=1 to Len(Application:aForms)
If Application:aForms[n]:Cargo = "AGENDA"
Application:aForms[n]:Show()
Return
EndIf
Next
¿Cómo puedo enviar un Form delante de otro, o ponerlo el primero activo?
Hay algo como Application:ActiveForm( MiForm ) ???
El método Show() activa una ventana MDIChild, como ya usaste una vez, pero no los demás tipos de ventana. Es más, hace un par de días, en el foro inglés puse una modificación de TForm para que todos los tipos de ventana se puedan activar usando el método SetFocus(). Es decir, la 3ra. línea de tu ejemplo quedaría así:
Application:aForms[n]:SetFocus()
--
Un saludo,
José F. Giménez
--
Hacer activo un Form
Publicado: Mié Oct 19, 2005 1:53 pm
por jfgimenez
Xevi,
acabo de modificar de nuevo TForm. Cuando las MDIChild están maximizadas, al
cambiar de una a otra se ve como primero se restaura a su posición normal y
después se maximiza. Es un bug del propio API de windows, pero aquí lo
tienes corregido en la clase usando un "workaround".
Utiliza este .obj en vez del anterior. Y si en algún sitio estás usando
:Show() para activarlas, cambialo por :SetFocus()
--
Un saludo,
José F. Giménez
Attached files Form.zip (9.5 KB)Â
Hacer activo un Form
Publicado: Mié Oct 19, 2005 2:55 pm
por Xevi
Jose,
Ya he cambiado TODAS las llamadas en mis ventanas CHILD.
En lugar de utilizar :Show(), ahora si están en la lista de Forms de la
aplicación, las llamo con :SetFocus()
Y... me doy cuenta de un detalle, que hace ya un tiempo encontré con
MDICHILDs, pero ahora con ventanas normales...
Cuando tenemos unas ventanas con MUCHOS controles, Browse, Edits, Labels...
y tenemos abiertas dos de ellas como mínimo, al alternar entre una ventana y
otra, (si una está medio sobrepuesta en la otra), tarda un seg. en
"refrescar" la ventana... ¿Recuerdas de que te hablo???
Yo lo he arreglado poniendo un ProcessMessages() en el evento Activate de
cada Ventana no CHILD, pero... como se que lo arreglaste en el entorno MDI,
te lo comento por si también puedes arreglarlo para el otro tipo de
ventanas.
Bien, eso... que yo voy siguiendo con lo mío...
Un Saludo,
Xevi.
"Jose F. Gimenez" <
jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=
435633c9@ozsrvnegro.ozlan.local...]
435633c9@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> acabo de modificar de nuevo TForm. Cuando las MDIChild están maximizadas,
> al cambiar de una a otra se ve como primero se restaura a su posición
> normal y después se maximiza. Es un bug del propio API de windows, pero
> aquí lo tienes corregido en la clase usando un "workaround".
>
> Utiliza este .obj en vez del anterior. Y si en algún sitio estás usando
> :Show() para activarlas, cambialo por :SetFocus()
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Hacer activo un Form
Publicado: Mié Oct 19, 2005 3:15 pm
por jfgimenez
Xevi,
> Y... me doy cuenta de un detalle, que hace ya un tiempo encontré con
> MDICHILDs, pero ahora con ventanas normales...
> Cuando tenemos unas ventanas con MUCHOS controles, Browse, Edits,
> Labels... y tenemos abiertas dos de ellas como mínimo, al alternar entre
> una ventana y otra, (si una está medio sobrepuesta en la otra), tarda un
> seg. en "refrescar" la ventana... ¿Recuerdas de que te hablo???
Prueba poniendo este código en tu programa, y si te funciona bien lo
incorporamos en Xailer:
CLASS TForm FROM XForm
METHOD WMNCActivate()
ENDCLASS
METHOD WMNCActivate( nWParam, nLParam ) CLASS TForm
IF ::nFormType == ftMDICHILD
RETURN Super:WMNCActivate( nWParam, nLParam )
ENDIF
::Update()
RETURN Nil
--
Un saludo,
José F. Giménez
Hacer activo un Form
Publicado: Mié Oct 19, 2005 3:35 pm
por Xevi
Jose,
He tenido que "sacar" el Form.obj que me has enviado antes,...
y añadiendo este código en mi proyecto funciona PERFECTAMENTE.
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <
jfgimenez@wanadoo.es> escribió en el mensaje
news:43564706$[email=
1@ozsrvnegro.ozlan.local...]
1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> Y... me doy cuenta de un detalle, que hace ya un tiempo encontré con
>> MDICHILDs, pero ahora con ventanas normales...
>> Cuando tenemos unas ventanas con MUCHOS controles, Browse, Edits,
>> Labels... y tenemos abiertas dos de ellas como mínimo, al alternar entre
>> una ventana y otra, (si una está medio sobrepuesta en la otra), tarda un
>> seg. en "refrescar" la ventana... ¿Recuerdas de que te hablo???
>
> Prueba poniendo este código en tu programa, y si te funciona bien lo
> incorporamos en Xailer:
>
> CLASS TForm FROM XForm
> METHOD WMNCActivate()
> ENDCLASS
>
> METHOD WMNCActivate( nWParam, nLParam ) CLASS TForm
> IF ::nFormType == ftMDICHILD
> RETURN Super:WMNCActivate( nWParam, nLParam )
> ENDIF
> ::Update()
> RETURN Nil
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Hacer activo un Form
Publicado: Mié Oct 19, 2005 7:38 pm
por Xevi
Jose,
Puedes incluir esta parte de código en el OBJ que me has enviado para
probarlo todo en el mismo proyecto.???
Un Saludo,
Xevi.
"Jose F. Gimenez" <
jfgimenez@wanadoo.es> escribió en el mensaje
news:43564706$[email=
1@ozsrvnegro.ozlan.local...]
1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> Y... me doy cuenta de un detalle, que hace ya un tiempo encontré con
>> MDICHILDs, pero ahora con ventanas normales...
>> Cuando tenemos unas ventanas con MUCHOS controles, Browse, Edits,
>> Labels... y tenemos abiertas dos de ellas como mínimo, al alternar entre
>> una ventana y otra, (si una está medio sobrepuesta en la otra), tarda un
>> seg. en "refrescar" la ventana... ¿Recuerdas de que te hablo???
>
> Prueba poniendo este código en tu programa, y si te funciona bien lo
> incorporamos en Xailer:
>
> CLASS TForm FROM XForm
> METHOD WMNCActivate()
> ENDCLASS
>
> METHOD WMNCActivate( nWParam, nLParam ) CLASS TForm
> IF ::nFormType == ftMDICHILD
> RETURN Super:WMNCActivate( nWParam, nLParam )
> ENDIF
> ::Update()
> RETURN Nil
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Hacer activo un Form
Publicado: Mié Oct 19, 2005 8:27 pm
por jfgimenez
Xevi,
> Puedes incluir esta parte de código en el OBJ que me has enviado para
> probarlo todo en el mismo proyecto.???
Sí, claro. Aquí lo tienes. Por favor, confirmame si te funciona todo bien,
especialmente el retardo en el pintado que tenías al conmutar entre
ventanas.
--
Un saludo,
José F. Giménez
Attached files Form.zip (9.5 KB)Â
Hacer activo un Form
Publicado: Mié Oct 19, 2005 8:37 pm
por Xevi
Esto va PERFECTO!!!
Ningun retardo al alternar entre ventanas de ningún tipo, Normales/Childs
Un Saludo,
Xevi.
"Jose F. Gimenez" <
jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=
43569023@ozsrvnegro.ozlan.local...]
43569023@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> Puedes incluir esta parte de código en el OBJ que me has enviado para
>> probarlo todo en el mismo proyecto.???
>
> Sí, claro. Aquí lo tienes. Por favor, confirmame si te funciona todo bien,
> especialmente el retardo en el pintado que tenías al conmutar entre
> ventanas.
>
> --
> Un saludo,
>
> José F. Giménez
>
>