FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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.-
__________________
El secreto de la libertad está en no tener miedo. |
#2
|
||||
|
||||
¿Por qué no usas la propiedad Visible del formulario en lugar de Showing?
// Saludos |
#3
|
|||
|
|||
porque con los formularios mdi childs no se puede.
gracias igual. sigo intentando sin exito
__________________
El secreto de la libertad está en no tener miedo. |
#4
|
||||
|
||||
Cierto, debí pensarlo mejor, pero entonces ¿a qué te refieres con que estén visibles o no? ¿Cómo los ocultas?
// Saludos |
#5
|
|||
|
|||
procedure TfSesion.FormClose(Sender: TObject; var Action: TCloseAction);
begin ShowWindow(self.Handle, SW_HIDE); end;
__________________
El secreto de la libertad está en no tener miedo. |
#6
|
||||
|
||||
IsWindowVisible(Handle) ???
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
||||
|
||||
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#8
|
||||
|
||||
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); begin ShowWindow(self.Handle, SW_HIDE); IsVisible := false; end; // Saludos |
#9
|
||||
|
||||
Les comento que en un Win98 la ventana no se oculta, se minimiza como de costumbre! (al menos eso me sucede a mi)
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#10
|
||||
|
||||
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 ... seguiré buscando // Saludos |
#11
|
||||
|
||||
¡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 |
#12
|
|||
|
|||
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.
__________________
El secreto de la libertad está en no tener miedo. |
#13
|
|||
|
|||
Cita:
saludos
__________________
El secreto de la libertad está en no tener miedo. |
#14
|
||||
|
||||
Cita:
Código:
TChildForm = class(TForm) public IsVisible: Boolean; end; // Saludos |
#15
|
||||
|
||||
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 |
#16
|
|||
|
|||
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
__________________
El secreto de la libertad está en no tener miedo. |
#17
|
||||
|
||||
Cita:
Código:
TChildForm = class(TForm) public IsVisible: Boolean; end; TChildForm1 = class(TChildForm) ... end; TChildForm2 = class(TChildForm) .. end; etc. |
#18
|
|||
|
|||
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.
__________________
El secreto de la libertad está en no tener miedo. |
#19
|
||||
|
||||
Cita:
Código:
if fm is TChildForm then begin if TChildForm(fm).IsVisible then reg.WriteInteger(self.Cifrar('VISIBLE'),1) else reg.WriteInteger(self.Cifrar('VISIBLE'),0) end 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 |
#20
|
||||
|
||||
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 |
|
|
|