[Lazarus-es] ventanas no modales

José Mejuto joshyfun en gmail.com
Jue Jul 28 20:03:28 CEST 2011


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.

PB> A los forms les puse nombres f1 a f10... será que  están asociadas a las
PB> teclas correspondientes por ejemplo? en la deputación veo que algunas

No, no están asocidas a nada.

-- 
Best regards,
 José





More information about the Lazarus-es mailing list