Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   otra de MDI (https://www.clubdelphi.com/foros/showthread.php?t=18899)

pablo 26-02-2005 00:13:58

otra de MDI
 
hola, estoy experimentando con este tipo de aplicaciones y tengo un par de dudas:
1) como puedo hacer para que si llamo a un form child, mientras este se visualiza, si vuelvo a la opcion de menu a llamarlo no me aparezca otro, sino que se de cuenta de q uno ya se esta ejecutando y le de el foco a ese...

2) otra es como puedo hacer para que si algunos forms child se estan ejecutando, otros no se puedan ejecutar, algo asi como exclusion mutua

un saludo
pablo

roman 26-02-2005 00:49:46

  1. Usa una variable que apunte al formulario creado. Al momento de llamarlo te fijas en el valor de esa variable. Si es nil es que no ha sido creado. Lo creas y lo muestras. Si es distinto de nil es que ya estácreado así que sólo lo muestras.

    Al momento de cerrar el formulario, te aseguras de que la variable vuelva a ser nil para la próxima vez que se requiera abrirlo.

  2. Usando lo anterior, al momento de abrir un formulario te fijas si la variable que referencie al del otro tipo es nil o no y procedes según el caso.

// Saludos

samantha jones 26-02-2005 02:12:15

Siendo practicos

if not assigned(form_child) then
form_child:=tform_child.Create(Self);
form_child.show;

y en el evento onDestroy de la forma hija

inherithed;
form_child:=nil;

vtdeleon 26-02-2005 02:53:52

Colega, Puedes usar esto:

Código Delphi [-]
procedure Tform1.Button1Click(Sender: TObject);
var
  I:integer;
begin
    for I:=0 to MDIChildCount-1 do
      if MDIChildren[i] is Tform2child then begin
        MDIChildren[i].Show;
        Exit;
      end;
      form2child:=Tform2child.Create(Application);
end;

Siendo form1=MDIFORM con un boton el cual llamara Form2child=MDICHILD

@-Soft 26-02-2005 13:05:41

hola

Cita:

1) como puedo hacer para que si llamo a un form child, mientras este se visualiza, si vuelvo a la opcion de menu a llamarlo no me aparezca otro, sino que se de cuenta de q uno ya se esta ejecutando y le de el foco a ese...
bueno este punto yo lo he realizado asi, en el evento OnClose del Form coloco el codigo

Código Delphi [-]
frmMiForm := Nil;

y al ejecutarlo

Código Delphi [-]

if frmMiForm = Nil then
begin
   Application.CreateForm(TfrmMiForm, frmMiForm);
   frmMiForm.Show;
end;

y esto evitara que se pueda volver a abrir el formulario. Esto fue lo que roman te explico, pero yo te lo traduje a codigo.

Salu2

pablo 26-02-2005 16:24:58

respecto a MDI
 
Muchas gracias chicos!!
ahora mi oregunta es: Quiero hacer una aplicacion MDI, de unos 15 formas mas o menos, son todos abms sencillos, pero es para una maquina Pentium de 32mb de ram (medio viejarda), es ineficiente que cada vez q quiera abrir un form lo tenga q crear.... no hay alguna maneja de dejar los forms mdi que mas se usan ya creados y q se muestren cuando yo quiero?

un saludo y gracias
pablo

@-Soft 28-02-2005 03:42:34

hola

como te respondieron en otro hilo, al tener todos los formularios en memoria, mantienes todos los recursos tambien ocupando memoria y es obvio que la aplicacion funcionara mucho mas lenta, no en principio, pero cuando tenga unos cuantos meses o años y uno cientos o miles de registros y ahi de ti si no has normalizado tus tablas o base de datos. sera desastros y peor aun si lo vas a usar en una red.

Salu2


La franja horaria es GMT +2. Ahora son las 05:47:23.

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