[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