Ver Mensaje Individual
  #3  
Antiguo 10-09-2004
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por Phacko
Hola a todos.
Begin
Name:=Edit1.Text;
TFOrm.Create(Application).Name:=(Name);
TFOrm.Create(Application).Caption:=Name;
TForm.Create(Application).Show;
Application.CreateHandle;
End;
Ese es un mal, MAL codigo. Mucho! estas creando 3 ventanas que no
referencian a nada (van a nil), que son separadas y por lo tanto no hacen
lo que quieres y ademas, para que Application.CreateHandle? No lo
necesitas para nada....

Es asi de simple:

Código:
    var
      oForm:TForm;
    begin
      oForm:=TForm.Create(Application);
      oForm.Name:='Hola';
      oForm.Caption:='Hola';
    
    end;
Ahora, ese oForm debe liberarse en algun momento. Si es con una ventana
modal...
Código:
     var
       oForm:TForm;
     begin
       oForm:=TForm.Create(Application);
      try
       oForm.Name:='Hola';
        oForm.Caption:='Hola';
       oForm.ShowModal;
      finally
    	oForm.Release; //se usa release y no free con forms
      end;
     end;
Ahora, el problema que tienes es como administrar las formas? Hay dos
maneras: Usando la referencia Application (observa que application
CONTIENE a oForm) en las colecciones Forms o Components (usando
FindControl('UnNombre') y haciendo cast tambien sirve). Sin embargo, alli
hay otros objetos que no son los que estas haciendo. Realmente, lo que se
hace es crear un administrador en una lista de objetos:

Código:
     var
      oFormas:TObjectList; = Mira en ayudas cual unit se necesita... 
   ObjectList automaticamente libera objetos (llama al free) tonces no
   necesitas preocuparte por objetos perdidos en memoria....
     begin
       oForm:=TForm.Create(Application);
      oFormas.Add(oForm,'Bodega') = Chequee en ayudas, no recuerdo orden
    
       oForm.Name:='Hola';
       oForm.Caption:='Hola';
       oForm.Show;
     
    end;
Con eso, tienes una lista que te permite referenciar como oFormas[i].Caption:='Hola' que era la intencion del codigo normal.
Si haces un helper (una clase de ayuda) puedes poner algo como:

Código:
    function Forma(Nombre:String):TForm;overload;
    function Forma(Indice:Integer);TForm;overload;
Si deseas tener una implementacion mas robusta chequea este excelente
articulo Framework Simple Aplicaciones(ingles):

Es lo que hago tambien y realmente es una forma EXCELENTE de trabajar,
se lo recomiendo a todos. No depende de los controles de DevExpress asi
que no te asustes (y el codigo es funcional: lo puedes usar de base).

Deberias empezar a estudiar sobre Desing Patterns (Patrones de diseño) ya
que aumenta considerablemente la calidad del codigo.....
__________________
El malabarista.

Última edición por mamcx fecha: 11-09-2004 a las 00:23:08.
Responder Con Cita