Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Por qué no usas la propiedad Visible del formulario en lugar de Showing?

// Saludos
Responder Con Cita
  #3  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cierto, debí pensarlo mejor, pero entonces ¿a qué te refieres con que estén visibles o no? ¿Cómo los ocultas?

// Saludos
Responder Con Cita
  #5  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 18-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
IsWindowVisible(Handle) ???
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 18-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
tango01 comentó:
procedure TfSesion.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowWindow(self.Handle, SW_HIDE);
end;
¿Que logras con esto?... en una simple prueba no noté ningún cambio..
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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;
y en true al momento de mostrarlo. Es una manera de 'emular' la propiedad Visible que no funciona en los formularios MDI Child.

// Saludos
Responder Con Cita
  #9  
Antiguo 18-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
delphi.com.ar comentó:
Les comento que en un Win98 la ventana no se oculta, se minimiza como de costumbre! (al menos eso me sucede a mi)
Mismo comentario para Win2000.

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
Responder Con Cita
  #11  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡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
Responder Con Cita
  #12  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
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.
Responder Con Cita
  #13  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
Cita:
roman comentó:

IsVisible := false;
esa propiedad no la tengo. uso Delphi 7.

saludos
__________________
El secreto de la libertad está en no tener miedo.
Responder Con Cita
  #14  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
tango01 comentó:
esa propiedad no la tengo. uso Delphi 7.
Ya sé que no existe. Lo que digo es que tú se la añadas:

Código:
TChildForm = class(TForm)
public
  IsVisible: Boolean;
end;
Cuando muestres el formulario la pones en true y cuando lo ocultes la pones en false y cuando guardes en el registro revisas el valor de esta propiedad.

// Saludos
Responder Con Cita
  #15  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #16  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
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.
Responder Con Cita
  #17  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
tango01 comentó:
Gracias roman, la verdad es que no queria llegar a esa instancia de agregar a todos los form un atributo más.
Bueno, es que lo que yo haría es crear un formulario base para todos los mdi child que vayas a usar y descender de éste los demás:

Código:
TChildForm = class(TForm)
public
  IsVisible: Boolean;
end;

TChildForm1 = class(TChildForm)
  ...
end;

TChildForm2 = class(TChildForm)
  ..
end;

etc.
// Saludos
Responder Con Cita
  #18  
Antiguo 18-11-2003
tango01 tango01 is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mar del Plata - Argentina
Posts: 46
Poder: 0
tango01 Va por buen camino
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.
Responder Con Cita
  #19  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
tango01 comentó:
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.
Pues no sé en qué forma estás diseñando la aplicación ni a qué método te refieres. Si te refieres al TCustumizer.SaveForm no veo cuál es el problema, simplemente verificas que el parámetro sea del tipo adecuado:

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
Por otro lado, IsWindowVisible funciona en mi caso.

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
Responder Con Cita
  #20  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
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


La franja horaria es GMT +2. Ahora son las 15:08:53.


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