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 24-02-2004
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Ventanas MDI Hijas

Hola, tengo una Ventana Madre y varias hijas (MDI's) y tengo un problema como hago para que cuando de click en las opciones que abren las hijas estas se creen si no estan activas ó se despliegen al frente si ya estan abiertas, me fui a buscar en el historico acerca de este asunto encontre un codigo que use y que muestro a continuación :

function ExisteFrm(UnaForma:TForm): Boolean;
var i:Integer;
xFrm:Tform;
begin
Result:=False;
for i:=0 to Screen.FormCount - 1 do
begin
xFrm:=Screen.Forms[i];
if TFormClass(xFrm) = TFormClass(UnaForma) then
begin
Result:=true;
exit;
end;
end;
end;

procedure TForm1.Actividad1Click(Sender: TObject);
var MyChildForm: TForm2;
begin
if not ExisteFrm(Form2) then
begin
LockWindowUpdate(Handle);
MyChildForm := TForm2.Create(Application);
MyChildForm.Caption := 'Actividad ';
LockWindowUpdate(0);
end
else
Form2.BringToFront;
end;

la primera es la función que verifica la existencia de la hija y el procedimiento es el que la llama, pero no me funciona, es decir me la crea tantas veces la llame y solo quiero que se abra una vez, alguien me podria decir que esta mal en mi codigo o si me falta algo por hacer, gracias
Responder Con Cita
  #2  
Antiguo 24-02-2004
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
No me agrada mucho el código de la función ExisteFrm, porque lo que te pide es el objeto creado como parámetro, si lo tienes que pasar significa que ya lo has creado o estas enviando una variable con un puntero a las nubes...
Yo te recomendaría hacer una función como esa, pero que reciba un tipo TFormClass (clases por referencia), y preguntes si los forms no son de esta clase.
Esto que te comento fallará si tienes forms heredados y creas instancias en diferentes jerarquías, cosa que es muy poco probable.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 24-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Si solo vas a tener un formulario de cada clase.. podes también, de forma mas simple, basarte en la variable global creada por Delphi para cada formulario.

Algo como:

Código:
  if not Assigned(Form1) Then
    Application.CreateForm(Form1, TForm1)
  else
    Form1.BringToFront;
Eso si... tenes que tener cuidado que al destruir la forma, la referencia Form1 quede apuntando a Nil.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 24-02-2004
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Gracias

Ok, gracias a los dos delphi.com.ar, jachguate y les soy sincero como estoy empezando en esto de Delphi, voy a leer acerca de referencia de clases y la segunda respuesta(jachguate) bueno también lo probé pero creo que hice algo mal porque no me funciono, otra cosa que no se si estoy entendiendo bien, es que en mi aplicación si tengo creadas las formas, con esto quiero decir que ya están creadas y puestas en available forms del menú Project-options y lo de heredadas me parece que no son así, porque hice un modelo de la forma, esto porque diferentes tablas de mi base de datos tienen los mismos campos, entonces la metí en el deposito de objetos y por cada tabla cree una forma pero como copia, espero entender bien si no corríjanme por favor, respecto a la guía de estilos y la opción code lo tomare en cuenta
Responder Con Cita
  #5  
Antiguo 25-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Si están creadas, también estaran visibles, pues una forma MDI no puede estar oculta.

Otra cosa es que estén disponibles, es decir que su clase exista en el proyecto... pero que no haya ninguna instancia de ellas en memoria.

Para saber de donde hereda cada forma (que siempre heredará de alguna), basta con que mires su declaración de clase. Si hereda de TForm, no estas utilizando herencia visual que es a lo que delphi.com.ar se referia, y no tenes de que preocuparte...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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 22:33:08.


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