Hello Paola,
Friday, June 26, 2009, 12:41:35 AM, you wrote:
PB> Hola Joshy..
PB> he entendido tu razonamiento... (aclaro que tuve que releer todo el hilo)..
Es que no me explico como deber�a... no soy muy bueno transmitiendo por escrito.
PB> ahora... cu�l es la forma que t� aconsejas para crear/mostrar un form?
Lo mismo que se ha hecho siempre...
PB> Leyendo el libro "la cara oculta de d4" (si, un PB> poco viejo pero tiene muchas cosas aplicables), es que usan este procedimiento: PB> procedure MostrarForm(AClass: TFormClass);
PB> begin
PB> with AClass.Create(Application)do
PB> try
PB> ShowModal;
PB> finally
PB> Free;
PB> end;
PB> end;
PB> est� correcto??
Es correcto, pero como t�cnica de programaci�n hay que uir de ella. Est� bien como ejemplo, ya que explica varias cosas, como crear una instancia de "algo" sabiendo s�lo que pertenece o hereda la forma de un TFormClass y como usar sus m�todos y propiedades sin asignarlo a ninguna variable (expl�citamente).
El "with" sabemos que lo que hace es que dentro del bloque do..end todo lo que no tenga sentido se reintenta procesar (en tiempo de compilaci�n) anteponiendo lo que aparece entre el with y el do. Esto que es muy c�modo para por ejemplo rellenar de datos una estructura puede convertirse en una pesadilla de depuraci�n si se usa de forma indiscriminada. Pongamos un ejemplo:
type
Prueba=record
a: integer;
b: integer;
end;
Lio=record
V1: integer;
a: integer;
end;
[...]
var
V1: Prueba;
V2: Lio;
a: integer;
begin
with V1 do begin
a:=1;
b:=1;
end;
//Ahora compliqu�moslo...
with V2 do begin
V1.a:=1;
with V1 do begin
a:=1; //Esta que parte de que record es ? o es la variable ?
end;
end;
end;
PB> podr�a usarle en vez de Free, FreeAndNil(AClass)?? ser�a esa la sintaxis?
No puedes hacer un FreeAndNIL en este caso, ya que la variable que contiene la instancia del form no existe, la ha creado el compilador a trav�s del "with" y est� fuera del control del programador, de modo que no podemos ponerla a NIL aunque tampoco es necesario, ya que como el programador no tiene acceso a ella, no podr� "mal usarla" por error.
PB> de esta manera, s�lo se dejar�a la creaci�n PB> autom�tica para el formulario ppal y el/los datamodules...
La creaci�n autom�tica s�lo tiene 2 inconvenientes, los cuales pueden ser peque�os o grandes seg�n como sea la aplicaci�n. Si la aplicaci�n tiene muuuuchos forms es f�cil tener problemas de memoria en equipos justos, o de falta de recursos de windows (o de otro SO). Otro problema es que con creaci�n autom�tica no debemos crear m�s de una instancia de cada form autocreado, no al menos sin tomar precauciones sobre que variables vamos a usar y como.
Como veo que usais los forms modales con mucha frecuencia, aviso por si hos habiais dado cuenta, que un form modal no puede mostrar otro form modal. Algo asi:
form1:=Tform1.create;
form1.showmodal;
[...]
form1.Onclick()
var
form2: TOtroForm;
begin
form2:=TOtroForm.Create;
form2.showmodal; //KBOOOOOMMMM!
Best regards,
JoshyFun