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�