formularios mdi
hola gente.
quiero guardar en la posicion, el tamaño, y si estaban visibles los form mdi child para eso en el evento on Destroy del form: procedure TfSesion.FormDestroy(Sender: TObject); begin self.customizer.saveForm(self); end; donde el saveform: procedure Tcustomizer.saveForm(fm : Tform); var reg : Tregistry; begin reg := TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey(self.key,true); reg.WriteInteger(self.Cifrar('TOP'),fm.Top); reg.WriteInteger(self.Cifrar('LEFT'),fm.Left); reg.WriteInteger(self.Cifrar('HEIGHT'),fm.Height); reg.WriteInteger(self.Cifrar('WIDTH'),fm.Width); if fm.Showing then reg.WriteInteger(self.Cifrar('VISIBLE'),1) else reg.WriteInteger(self.Cifrar('VISIBLE'),0); reg.CloseKey end; el problema que tengo es que siempre el metodo fm.showing es TRUE. todos los forms tienen en el evento close: procedure TfSesion.FormClose(Sender: TObject; var Action: TCloseAction); begin ShowWindow(self.Handle, SW_HIDE); end; ¿como puedo saber si se estaba mostrando o no un formulario mdi child en el momento de destruirlo? gracias de antemano por su ayuda. Saludos, Federico, Mar del Plata, Argentina.- |
¿Por qué no usas la propiedad Visible del formulario en lugar de Showing?
// Saludos |
porque con los formularios mdi childs no se puede.
gracias igual. sigo intentando sin exito :( |
Cierto, debí pensarlo mejor, pero entonces ¿a qué te refieres con que estén visibles o no? ¿Cómo los ocultas?
// Saludos |
procedure TfSesion.FormClose(Sender: TObject; var Action: TCloseAction);
begin ShowWindow(self.Handle, SW_HIDE); end; |
IsWindowVisible(Handle) ???
|
Cita:
|
Además de lo que dice dca podrías, crearle al formulario la propiedad IsVisible que pondrías en false al momento de ocultarlo:
Código:
procedure TfSesion.FormClose(Sender: TObject; var Action: TCloseAction); // Saludos |
Les comento que en un Win98 la ventana no se oculta, se minimiza como de costumbre! (al menos eso me sucede a mi)
|
Cita:
Sin embargo hace no mucho se preguntó cómo esconder un formulario mdi child y creo que di una forma de hacerlo. Pero no recuerdo ni cómo ni el hilo :D ... seguiré buscando // Saludos |
¡Vaya! Pues es curioso. ShowWindow funciona si se ejecuta desde otro lado (el OnClick de un botón por ejemplo) pero no desde OnClose.
Quizá tango01 nos pueda decir cómo le está haciendo. // Saludos |
hola gracias por su ayuda.
les comento: la forma de ocultar el formulario es con el siguiente codigo en el evento formClose de los formularios: procedure TfSesion.FormClose(Sender: TObject; var Action: TCloseAction); begin ShowWindow(self.Handle, SW_HIDE); end; Estoy usando Windows XP y se oculta correctamente. La funcion IsWindowVisible me da siempre FALSE. con lo cual sigo intentando sin Exito. gracias de nuevo. |
Cita:
saludos |
Cita:
Código:
TChildForm = class(TForm) // Saludos |
Por cierto, a menos que pienses que tu aplicación se ejecutará siempre en WinXP, sería recomendable que veras cómo hacer que funcione correctamente en otras versiones de Windows.
// Saludos |
Gracias roman, la verdad es que no queria llegar a esa instancia de agregar a todos los form un atributo más.
pero viendo que no hay muchas opciones a la vista tendré que hacerlo. gracias. saludos |
Cita:
Código:
TChildForm = class(TForm) |
va pensando lo bien, no me sirve crear un atributo nuevo.
tiene que ser un atriburo de la clase TForm ya que como el metodo es generico tengo que pasar como parametro un TForm. La verdad pense que iba a ser mucho más sencillo esto. Que raro. |
Cita:
Código:
if fm is TChildForm then Ahora que, en el peor de los casos, si no deseas agregar una nueva propiedad a los formularios, aún te queda la opción de la propiedad Tag del formulario. Ponla en 0 al ocultarlo y en 1 al mostrarlo. // Saludos |
Un comentario aparte:
Yo me lo pensaría dos veces antes de esconder los formularios mdi. Si bien parece funcionar lo cierto es que para Delphi el formulario sigue visible y no sabes en qué momento se produzca algún error por engañar a Delphi. // Saludos |
Recién vuelvo de almorzar, y me encuentro con el hilo bastante crecido.
Cita:
Si sigue sin funcionar, podes probar con GetWindowPlacement PD: ¿Sabés que existen componentes que hacen lo que querés hacer?... por ejemplo el TFormPlacement de las RxLibs Saludos! |
Estuve leyendo los comentrarios de vosotros y resumo.
- al final lo resolvi más simple, en el onClose guardo en el registro que se cerro y en el onShow gurado en el registro que se mostro. -Por ahi pusieron que ya existian componentes que hacian esto, pero el tema es que no solo guardo la posicion de los forms, el la Clase TCustomizer tiene un TObjectList con la lista de objetos a cutomizar, como grillas, splitteres, etc. y no todos los objetos de un form deben ser customizables con lo cual, lo objetos que quieran ser customizables tendran que agregarse a la lista con customizer.addObject(wwDBGrid1), por ejemplo. Además de guardar todo dentro del perfil del usuario de la aplicacion y encriptado. Es por eso que me hice mi propia clase y no usé alguna de las que estaban dando vueltas por ahi. Les agradezco a todos por su participación y por mi parte doy por cerrado el hilo. Gracias |
Cita:
Por lo demás es bueno que lo hayas implementado tú mismo. // Saludos |
La franja horaria es GMT +2. Ahora son las 08:45:20. |
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