[Lazarus-es] ventanas no modales
Paola Bruccoleri
pbruccoleri en adinet.com.uy
Vie Jul 29 20:03:13 CEST 2011
El 28/07/2011 03:03 p.m., José Mejuto escribió:
> Hello Paola,
>
> Thursday, July 28, 2011, 6:36:57 PM, you wrote:
>
> PB> y pasa algo que no capto.
> PB> Estoy probando esto solo en 2 opciones del menú principal, no en todo el
> PB> sistema. (los forms TNumeradores y TRespaldo)
> PB> Arranca el programa y hago clic en la opción de respaldo.... se crea
>
> PB> form. Hago clic nuevamente, no pasa por "not assigned" porque sigue
> PB> estando en nil, y crea otra instancia.... y así sucesivamente.
> PB> Si hago lo mismo pero con el otro form, de entrada SIGSEG!.. depurando
>
> PB> veo que f5 ya tiene asignado un valor $2a y claro, no lo crea y cuando
>
> PB> va a hacer el show... explota.
>
> Si tiene el valor $2A desde luego, ese no es un valor válido, tu
> problema, casi seguro, es que como al cerrar el form lo liberas con
> "caFree" la variable ha dejado de tener sentido, ya que apunta a una
> zona de memoria liberada.
>
> Si sólo quieres que se abra una ventana de cada tipo en vez del "if
> Assigned" tienes que crearte una función tipo:
>
> function ReciclaVentana(const aFormClassName: ansistring): TForm;
> var
> j: integer;
> begin
> Result:=nil;
> for j:=0 to Screen.FormCount-1 do begin
> if UpperCase(Screen.Forms[j].ClassName)=UpperCase(aFormClassName) then begin
> Result:=Screen.Forms[j];
> break;
> end;
> end;
> end;
>
> .....
> var
> f5: TForm;
> begin
> f5:=ReciclaVentana('TF5'); //TF5 es la clase de la ventana.
> if not Assigned(f5) then begin
> f5:=TF5.Create(Self);
> f5.PopupParent:=Self;
> end;
> f5.show;
> end;
>
> Si quieres declarar "f5" como un TF5, sería algo así:
>
> .....
> var
> f5: TF5;
> begin
> TForm(f5):=ReciclaVentana('TF5'); //TF5 es la clase de la ventana.
> if not Assigned(f5) then begin
> f5:=TF5.Create(Self);
> f5.PopupParent:=Self;
> end;
> f5.show;
> end;
>
> No se si me he explicado.... El código lo he escrito al vuelo.
Hola José..
tu código funcionó perfecto!.... estoy viendo de implementarlo para
hacer algunos forms no modales.
muchas gracias
chauuuuuuuuuu
More information about the Lazarus-es
mailing list