tropicano | Salut,
J'ai une application avec une fiche principale et je rentre dynamiquement des TFrame qu'en bon me chante et où je veux.
Viens le moment de détruire la TFrame et là j'ai tourné en rond un bon moment puis ô miracle ca marche.
Mais la raison est plus que magique.
J'ai donc fait une autre petite application pour illustrer le problème:
D'abord je plante le décor avec la fiche principale
Code :
- unit form_principale_unit;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, cadre_01;
- type
- Tform_pricipale = class(TForm)
- Button1: TButton;
- Memo1: TMemo;
- procedure Button1Click(Sender: TObject);
- procedure update_memo();
- procedure FormCreate(Sender: TObject);
- private
- { Déclarations privées }
- public
- a_detruire: string;
- end;
- var
- form_pricipale: Tform_pricipale;
- implementation
- {$R *.dfm}
- procedure Tform_pricipale.Button1Click(Sender: TObject);
- var
- temp: TFrame1;
- begin
- temp := TFrame1.Create(self);
- temp.Parent := self;
- temp.Name :='TFrame1_'+inttostr(self.ComponentCount-1);
- update_memo;
- end;
- procedure Tform_pricipale.update_memo;
- var
- i:integer;
- begin
- Memo1.Lines.Add('---------');
- Memo1.Lines.Add(inttostr(self.ComponentCount));
- for i:=0 to self.ComponentCount-1 do
- begin
- Memo1.Lines.Add('++ '+self.Components[i].Name);
- end;
- end;
- procedure Tform_pricipale.FormCreate(Sender: TObject);
- begin
- update_memo;
- end;
- end.
|
Puis ma TFrame:
Code :
- unit cadre_01;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
- type
- TFrame1 = class(TFrame)
- Button1: TButton;
- Memo1: TMemo;
- procedure Button1Click(Sender: TObject);
- private
- { Déclarations privées }
- public
- { Déclarations publiques }
- end;
- implementation
- uses form_principale_unit;
- {$R *.dfm}
- procedure TFrame1.Button1Click(Sender: TObject);
- begin
- form_pricipale.a_detruire := inttostr(self.ComponentIndex); // <-!!!!!
- try
- free
- except
- on EAccessViolation do begin end;
- end;
- form_pricipale.update_memo;
- exit;
- end;
- end.
|
C'est ici que s'opère la magie:
Citation :
procedure TFrame1.Button1Click(Sender: TObject);
begin
form_pricipale.a_detruire := inttostr(self.ComponentIndex);
try
free
except
on EAccessViolation do begin end;
end;
form_pricipale.update_memo;
exit;
end;
|
Il suffit que je passe cette ligne "form_pricipale.a_detruire := inttostr(self.ComponentIndex);" en commentaire et hop une jolie erreur pointe le bout de son nez.
Si quelqu'un peut m'expliquer le pourquoi du comment ou peut me proposer une autre méthode pour détruire mes TFrame...
Merci Message édité par tropicano le 03-08-2004 à 15:00:08
|