[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