Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Devolver foco desde Form No Modal al control llamante

Hola Amigos !

Intento devolver el foco desde un Form No Modal en el momento de cerrarlo al control y form que lo llamaron, y a la vez liberarlo y cerrarlo correctamente.

Pero mi problema aparece que cuando intento hacer esto en el form no modal :
Código Delphi [-]
procedure TF_ClientSearch.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Focus_Form    <> nil then Focus_Form.SetFocus;
  if Focus_Control <> nil then Focus_Form.SetFocusedControl(Focus_Control);
end;
antes de la terminación del evento FormClose me devuelve de hecho el foco al control que lo llamó (utilizo dos variables auxiliares, Focus_Form y Focus_Control), pero prosigue la ejecución en el otro form y no puedo cerrar y liberar F_ClientSearch.

Gracias por vuestra ayuda.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 21-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
A ver, estoy algo confundido con el asunto, pero tratare de contarte lo que entendí:

Tienes un TForm digamos que se llama Form1, en Form1 tienes un TWinControl con el que abres un Form2 y quieres cerciorarte de que cuando este ultimo se cierre, el TWinControl del Form1 tenga el foco.

Si la cosa es asi; yo sugeriría lo siguiente, en el Form1 llamar al Form2 desde el TWinControl pasándole como padre al Form2 el TWinControl... Suponiendo que el TWinControl fuera un TEdit(Edit1) la idea de llamarlo es algo asi:
Código Delphi [-]
Form2 := TForm2.Create(Edit1);

y luego en el OnClose del Form2 hacer algo asi:

Código Delphi [-]
TWinControl(Self.Owner).SetFocus;

Bueno, esa es la idea que se me ocurre según lo que te entendi . Espero que esta vez si le atine a lo que necesitas .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 22-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias Jhonny una vez más.

Sí, algo así es.

Si hasta ahí todo bien, tal y como expliqué yo también anteriormente. Me devuelve el foco correctamente y como yo quiero. Pero el problema es liberar el Form2.

Doy detalles concretos. El Form1 no puede recibir foco mientras exista Form2. Por lo tanto, en el OnActivate del Form1 compruebo si existe Form2, y si es así devuelvo el Foco al Form2.

Es por ello que necesito utilizar el evento OnActivate del Form1. Pero claro, si ahora, antes de cerrar y liberar el Form2, en algún momento devuelve el foco al control del Form1 que estaba activo antes de llamar al Form2, mediante por ejemplo Focus_Form.SetFocusedControl(Focus_Control); entonces salta el evento OnActivate del Form1 y prosigue ahí con la ejecución del programa !

Cuando libero Form2 ?

Si lo libero en alguna parte posterior del Form1.OnActivate entonces al terminar cualquier procedimiento concreto, vuelve a la línea del Form2 donde ejecuté el traspaso de foco, y al estar supuestamente liberado el Form2, salta un error.

Si sigo sin más, no libero el Form2 en ningún lado, y claro, otros tantos problemas más gordos todavía.

Por más vueltas que le doy, no logro aclararme.

A lo mejor es una tontería, pero no doy con la solución.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 22-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Bueno, Y ¿Porque no hace que el Form2 se vuelva Modal para que no activen el Form1, Así sea en tiempo de ejecución?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 22-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Aaaaamigo !!!!

Eso es lo que tenía antes !! Y después me dí cuenta que no cumplía con lo que quería hacer.

Detallo más : Programa de reservas de Hotel. MDI. Puedo abrir cuentas reservas quieras en Forms MDI Child.

El famoso Form2 sería búsqueda de clientes. Si en una reserva busco un cliente, abro desde Form1 al Form2. Peeeeeero ahora resulta que en el Form2 de búsqueda de clientes, muestro para cada cliente las reservas anteriores que tiene ese cliente. Y quiero poder hacer click en el listado y que se me abra cualquier reserva anterior en una nueva ventana MDI. Además de tener total operatividad sobre la ventana de la reserva que acabo de abrir.

Claro, si Form2 es Modal, no puedo moverme por la reserva que acabo de abrir desde el listado de reservas anteriores de clientes en el Form2 de búsqueda de clientes.

Por eso me dí cuenta hoy que necesito que Form2 se abra No Modal para que tenga esa operativa.

Pero por otro lado, si elijo un cliente de la lista abierta en el Form2 de búsqueda de clientes, tengo que actualizar los datos de ese cliente única y exclusivamente en el Form1 de la reserva que llamó a la búsqueda de clientes, y en ningún otro.

Y además, si elijo el cliente del listado, se debe de cerrar Form2 y volver el foco al Form1 correspondiente a la reserva concreta que llamó a la búsqueda.

Ese es el problema !

Form2 lo tenía modal, pero hoy avancé con otras cosas y precisamente me dí cuenta que no podía ser modal.

No sé si esto aclara un poco las cosas, o por el contrario, lo he liado más aún.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 22-06-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Añado algo más : Lo que decía antes de poder salir del Form2 de búsqueda.

Si pincho en cualquiera de los datos de una reserva que acabo de abrir desde la búsqueda, ese Form tiene que obtener el foco de manera normal y permitirme total operatividad.

Pero no debo de dejar volver a la reserva 'principal' que llamó originalmente al Form2 de búsqueda, si no se dá uno de los dos siguientes casos : que se cierre el Form2 y no se desee elegir ningún cliente, o que se elija un cliente en concreto para actualizarlo en el Form1 'llamante'.
__________________
Piensa siempre en positivo !
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar foco desde otro form Sandy656 Varios 3 25-08-2006 14:29:41
Form modal deja que el form llamante tome el foco tata Varios 6 17-05-2006 11:51:37
Acceder a form modal desde módulo de datos jcheco Varios 3 31-01-2006 17:18:22
Devolver el foco a aplicacion Coco_jac Varios 2 13-10-2005 16:38:33
Saber si una Form es modal Delfino Varios 3 18-09-2005 04:12:14


La franja horaria es GMT +2. Ahora son las 16:43:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi