Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TabSheet endemoniado ¿? (https://www.clubdelphi.com/foros/showthread.php?t=5431)

antonio_am 20-11-2003 23:01:30

TabSheet endemoniado ¿?
 
Vamos a ver si alguien me puede ayudar. He visto el hilo siguiente, que además es exactamente lo que pretendo hacer:

http://www.clubdelphi.com/foros/show...light=TabSheet

Yo pongo todo el siguiente código:

Código:

en fMain

private
  Contador : Integer;
 public
    Tab : array[1..5] of TTabSheet;

procedure TfMain.Button2Click(Sender: TObject);
var
 CL:TfClientes;
begin
 if PageControl1.PageCount<=5 then begin
  Contador:=PageControl1.PageCount;
  inc(Contador);
  Tab[Contador]:=TTabSheet.Create(nil);
  with Tab[Contador] do begin
  PageControl:=PageControl1;
  Name:='tsCL'+IntToStr(Contador);
  Caption:='Clientes '+inttostr(pageindex);
  end;
  CL:=TfClientes.Create(Self);
  with CL do begin
  Parent:=Tab[Contador];
  Numero:=Contador;
  Show;
  end;
 end;
end;

y en fClientes

public
    Numero:integer;

procedure TfClientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action:=caNone;
 fMain.Tab[Numero].Free;
end;

pero me produce el error 'Access violation' de vez en cuando, exactamente en la intrucción donde se destruye el TabSheet. Ya no se que más probar. Hay alguna manera de conseguir lo mismo pero con otro código?. Gracias por vuestra ayuda y un saludo.

jachguate 21-11-2003 18:51:43

Has verificado que el valor de número sea correcto?

Te recomiendo que intentes mejor hacer mejor un Self.Parent.Free? No tiene sentido almacenar el contador del tab, si ya tenes un apuntador a él en el parent, no?

hasta luego.

;)

roman 21-11-2003 19:16:28

Si PageControl1.PageCount es igual a 5 la condición

if PageControl1.PageCount <= 5 se cumple pero al incrementar Contador estás accediendo a Tab[6] que está fuera de rango y al acceder a las propiedades de Tab[6] obtienes la violación de acceso.

// Saludos

antonio_am 21-11-2003 23:44:50

jachguate dice:

Cita:

Te recomiendo que intentes mejor hacer mejor un Self.Parent.Free? No tiene sentido almacenar el contador del tab, si ya tenes un apuntador a él en el parent, no?

Lo he probado y me pasa igual, se produce el error al destruir el Tabsheet, pero lo más curioso es que no es siempre, se produce aleatoriamente. Sobre guardar el contador en el Tab[] es para borrar el tabsheet desde donde cierro el form2 y no el ultimo creado.

A roman he de decirle que he cambiado la condicion a:

Código:

if PageControl1.PageCount<4 then begin
y sigo igual. Por favor realiza un ejemplo con estos datos y comprobar si os ocurre lo que a mí

Un saludo y agradecido por vuestra ayuda.

jachguate 22-11-2003 00:28:04

Precisamente te digo que no es necesario guardarlo, porque podes mandarlo a liberar con el puntero que tenes en la propiedad parent. Mirá mi post anterior.

Hasta luego

;)


La franja horaria es GMT +2. Ahora son las 05:39:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi