Créer composant

Résolu
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 26 juil. 2006 à 16:07
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 2 août 2006 à 10:57
Je crée un petit composant sur la base d'un TPanel. Sur ce panel sont
posés différents controles dont un bouton (avec une petite croix) qui
est censé libérer le composant.

1) Est-ce possible ? (j'ai quelques doutes...)

2) Je n'arrive pas à lier le OnClick de ce bouton au destructor sans
avoir d'erreur abstraite ou de violation d'accès. Est-ce normal ? sinon
comment puis-je faire ?

Merci...

Simon

31 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
27 juil. 2006 à 12:35
Salut,

Attention, j'ai modifié quelques valeurs pour pouvoir tester, et ça marche :



Constructor TMyPanel.Create(Aowner: Tcomponent);
Begin
  inherited Create(AOwner);  // <- ici
  SetBounds(0, 0, 300, 200); // <- ici
     EDValeur := TEdit.Create(Self);
     with EDValeur do Begin
          Parent     := Self;
          SetBounds(200, 9, 81, 22);
          //OnChange   := Recalc;
     End;
     BTNFree := TButton.Create(Self);
     with BTNFree do begin
          Parent   := Self;
          SetBounds(208, 8, 25, 45);
          Caption  := 'X';
          TabOrder := 2;
          OnClick  := BTNFreeOnClick;
     End;
end;



destructor TMyPanel.Destroy;
begin
     EDValeur.Free;
     BTNFree.Free;
     inherited destroy;
end;



procedure TMyPanel. BTNFreeOnClick(Sender : TObject); // <- ici
begin
  //  ???
  ShowMessage('coucou'); // <- c'est OK !
end;





procedure TForm1.Button1Click(Sender: TObject);
begin
  MyPanel : = TMyPanel.Create(self);
  MyPanel.Parent := Self;
end;


Bonne prog'
3
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
27 juil. 2006 à 12:39
Je viens de contrôler, ça marche en faisant ainsi :

procedure TMyPanel.BTNFreeOnClick(Sender : TObject);
begin
    MyPanel.Destroy;
end;

Bonne prog'
3
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
27 juil. 2006 à 12:47
Salut Simon,

Loda a tout-a-fait raison : ne pas libérer un composant dans un de ses événements et, à fortiori, dans un événement d'un composant enfant !
C'est peut-être possible en envoyant un message au proprio...
Ceci dit, ton composant ne contient qu'un TEdit et un TButton, c.à.d. presque rien en "bouffage mémoire". Pourquoi tiens-tu à le libérer ? Le rendre invisible ne suffit pas ?

procedure TMyPanel.BTNFreeOnClick(Sender : TObject);
begin
    Visible:= false;
end;

Solution de paresse, mais comme dit Matt, "la paresse est la mère du génie".

A +
Thierry
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
27 juil. 2006 à 13:17
".. et évidemment, ne pas oublier de libérer ton mypanel p.ex. dans l'événement OnClose de ta Form."

il me semble plus simple (et plus sur) de créer ton composant avec un .Create(self) et non .Create(nil). Comme ça, la lib detruit le composant tout seul!

C'est le mecanisme utilisé pour tout les boutons que tu pose sur ta form. C'est là que réside l'interêt de la class TComponent.

cite de l'help:

Components are persistent objects that have the following capabilities:
- Ownership. The ability to manage other components. If component A owns component B, then A is responsible for destroying B when A is destroyed.
- ...

" inherited Create(AOwner); // <- ici"
Bonne remarque Japee, C'est très important !


bon code,
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 juil. 2006 à 17:12
Bon alors voici le même code (modifié, testé, homologué)
il crée 10 TMyPanel sur la form
tu peux en supprimer autant que tu veux et dans n’importe quel ordre et tout fonctionne !!!!

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;



Const WM_FREE_MY_PANEL = WM_User + 1; // Definition d'un nouveau Message



type

  TMyPanel = Class(TPanel)
  Private
         EDValeur   : TEdit;
         BTNFree    : TButton;
         procedure BTNFreeOnClick(Sender : TObject);
  Public
     Constructor Create(Aowner: Tcomponent); override;
     Destructor Destroy; override;
  Published
    //...
  End;


  TForm1 = class (TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Déclarations privées }
    // Notre Procedure pour récuperer le Message
         Procedure WMFREE_MY_PANEL(Var Msg : TMessage);Message WM_FREE_MY_PANEL;
  public
    { Déclarations publiques }
  end;



var

  Form1: TForm1;
  MyPanelArray : Array[1..10] of TMyPanel;
implementation




{$R *.DFM}





{ TMyPanel }




procedure TMyPanel.BTNFreeOnClick(Sender: TObject);
begin    // Envoie du Message
    PostMessage(GetParentForm(Self).Handle, WM_FREE_MY_PANEL, Self.Handle, 0);
end;



constructor TMyPanel.Create(Aowner: Tcomponent);
Begin
  inherited Create(AOwner);  // <- ici
  SetBounds(10, 10, 300, 90); // <- ici
     EDValeur : = TEdit.Create(Self);
     with EDValeur doBegin
          Parent     := Self;
          SetBounds(200, 50, 81, 22);
          //OnChange   := Recalc;
     End ;
     BTNFree : = TButton.Create(Self);
     with BTNFree dobegin
          Parent   := Self;
          SetBounds(270, 8, 25, 35);
          Caption  := 'X';
          TabOrder := 2;
          OnClick  := BTNFreeOnClick;
     End ;
end;





destructor TMyPanel.Destroy;
begin
     EDValeur.Free;
     BtnFree.Free;
     inherited destroy;
end;




 { TForm1 }


procedure TForm1.Button1Click(Sender: TObject);
Var I, X, Y : Integer;
begin
 X : = 0;
 Y := 0;
  For I : = 1 to 10 do
 Begin
  MyPanelArray[I] := TMyPanel.Create(Nil);
  MyPanelArray[I].Parent := Self;
  MyPanelArray[I].Name   := 'MyPanel'+IntToStr(I);
// la suite n'est la que pour avoir un positionnement correcte sur la form
  MyPanelArray[I].Left := X;
  MyPanelArray[I].Top  := Y;
  Inc(X, 300);
  If X > (Width - 300) Then
  Begin
    X : = 0;
    Inc(Y,90);
  End
 End;
end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var I : Integer;
begin
 For I := 1 to 10 do
  if MyPanelArray[I] <> NilThen MyPanelArray[I].Free;
end;



procedure TForm1.WMFREE_MY_PANEL(var Msg: TMessage);
Var I : Integer;
begin  // Récupération du Message et Action
 For I : = 1 to 10 do
  If (MyPanelArray[I] <> Nil) and (MyPanelArray[I].Handle = Msg.WParam) Then
 Begin
  MyPanelArray[I].Free;
  MyPanelArray[I] : = Nil;
  End;
end;
end.

Voilà les modifications se passe de commentaires

@+
Cirec
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 juil. 2006 à 09:39
Salut,

oui c'est parfaitement possible ...
ensuite pour que l'on puisse t'aider il nous faud le code en rapport avec ton problème ...

<gras>Eh oui, madame IRMA est en vacance, donc pas voyance pour le moment

@+
Cirec
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
27 juil. 2006 à 10:41
Effectivement, ça peut aider...

Ci joint un extrait de l'unité. Je cherche donc à libérer le composant sur BTNFreeOnClick


type

  TMyPanel = Class(TPanel)

  Private

         EDValeur   : TEdit;

         BTNFree    : TButton;

         procedure BTNFreeOnClick(Sender : TObject);

  Public

     Constructor Create(Aowner: Tcomponent); override;

     Destructor Destroy;

  Published

    ...

  End;


  TFMyForm = class(TForm)

  private

    { Déclarations privées }

  public

    { Déclarations publiques }

  end;


Constructor TMyPanel.Create(Aowner: Tcomponent);

Begin

     EDValeur := TEdit.Create(Self);

     with EDValeur do Begin

          Parent     := Self;

          SetBounds(300, 9, 81, 22);

          OnChange   := Recalc;

     End;

     BTNFree := TButton.Create(Self);

     with BTNFree do begin

          Parent   := Self;

          SetBounds(408, 8, 25, 25);

          Caption  := 'X';

          TabOrder := 2;

          OnClick  := BTNFreeOnClick;

     End;

end;


destructor TMyPanel.Destroy;

begin

     EDValeur.Free;

     BTNFree.Free;

     inherited destroy;

end;


procedure BTNFreeOnClick(Sender : TObject);

begin

    ???

end;


Merci

Simon
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
27 juil. 2006 à 12:30
salut,

je suis désolé de contredire Cirec, mais il me semble que ce n'est pas possible (du moins pas depuis un event)

selon l'aide de Delphi (Tobject.Free):

Never explicitly free a component within one of its own event handlers or the event handler of a component it owns or contains. For example, don?t free a button, or the form that owns the button, in its OnClick event handler.

je crois que c'est clair. De plus, c'est logique, tu ne peux pas détruire un composant depuis "l'intérieur" de celui-ci.

Tu devrait plustot chercher du côté des messages, genre CM_DESTROYHANDLE. Mais je sais pas du tout le quel il te faudrait utiliser. le mieux que t'ai a faire, c'est de chercher comment la lib libère les componsants.

Sinon, tu peux essayer de déléger la destruction du componsant a son parent (la destruction doit commencer après la fin de l'event). Je sais pas si c'est faissable sans message.

bon code,
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
27 juil. 2006 à 12:59
... et évidemment, ne pas oublier de libérer ton mypanel p.ex. dans l'événement OnClose de ta Form.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
27 juil. 2006 à 13:14
Chez moi, le clic sur le bouton enfant du TMyPanel libère bien ce dernier.

Bon, j'envoie le code, en mettant en gras et rouge les modifications importantes par rapport au code de simon :

                                                

type
  TMyPanel = Class(TPanel)
  Private
         EDValeur   : TEdit;
         BTNFree    : TButton;
         procedure BTNFreeOnClick(Sender : TObject);
  Public
     Constructor Create(Aowner: Tcomponent); override;
     Destructor Destroy; override;
  Published
    //...
  End;



var
  Form1: TForm1;
  MyPanel: TMyPanel;



implementation



{$R *.DFM}



// uses ExtCtrls, StdCtrls; {si pas déjà déclaré}



Constructor TMyPanel.Create(Aowner: Tcomponent);
Begin
  inherited Create(AOwner);
  SetBounds(0, 0, 300, 200);
     EDValeur : = TEdit.Create(Self);
     with EDValeur do Begin
          Parent     := Self;
          SetBounds(116, 80, 81, 21);
          //OnChange   := Recalc;
     End;
     BTNFree := TButton.Create(Self);
     with BTNFree do begin
          Parent   := Self;
          SetBounds(270, 4, 22, 22);
          Caption  := 'X';
          TabOrder := 2;
          OnClick  := BTNFreeOnClick;
     End;
end;



destructor TMyPanel. Destroy;
begin
     EDValeur.Free;
     BTNFree.Free;
     inherited destroy;
end;



procedure TMyPanel.BTNFreeOnClick(Sender : TObject);
begin
  //  ???
  MyPanel.Free; // <- aucun problème, MyPanel est libéré
end;





procedure TForm1.Button1Click(Sender: TObject);
begin
  MyPanel : = TMyPanel.Create(self);
  MyPanel.Parent := Self;
end;


Bonne prog'
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
27 juil. 2006 à 13:35
@japee : mypanel.free provoque chez moi (delphi7) une violation d'accès.
@Loda : évidemment :  inherited Create(AOwner). Tu as raison, le composant sera détruit automatiquement par le Owner, mais j'ai l' habitude de libérer ce qui est créé dynamiquement...

A +
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
27 juil. 2006 à 13:53
@ ThWilliam : si tu le detruit toi même, il ne faut PAS le crée avec .Create(self) mais .Create(nil). Je précis au cas où ce ne serrait pas clair pour qqun.
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
27 juil. 2006 à 14:14
Merci pour toutes vos réponses, je vais regarder ça. J'avais trouvé un
truc sinon, mais je trouve pas ça très propre (?). Sur le OnClick du
bouton "Free", je lance un timer à 1ms qui libère l'objet...

Je vais plutot essayer le code de Japee

Simon
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
27 juil. 2006 à 14:18
> ThWilliam

Es-tu sûr d'avoir rajouté la directive override ici ?



Destructor Destroy; override;



Je pense que c'est ça qui pose problème.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 juil. 2006 à 15:37
Salut,


j'arrive après la bataille

mais je vous donne quand même ma version et qui ne cause aucune violation d'accès (Testé sous D4 et D2005)




unit Unit1
;
interface
uses
Windows
, Messages
, SysUtils
, Classes
, Graphics
, Controls
, Forms
, Dialogs
,
StdCtrls
, ExtCtrls
;

Const WM_FREE_MY_PANEL
= WM_User
+
1; // Definition d'un nouveau Message




type





TMyPanel




=




Class

(
TPanel

)


Private


EDValeur

:
TEdit

;

BTNFree

:
TButton

;


procedure

BTNFreeOnClick

(
Sender

:
TObject

);


Public



Constructor

Create

(
Aowner

:
Tcomponent

);




override

;


Destructor

Destroy

;




override

;


Published



//...



End

;

TForm1




=




class

(
TForm

)

Button1

:
TButton

;


procedure

Button1Click

(
Sender

:
TObject

);


procedure

FormClose

(
Sender

:
TObject

;




var

Action

:
TCloseAction

);


private



{ Déclarations privées }



// Notre Procedure pour récuperer le Message



Procedure

WMFREE_MY_PANEL

(

Var

Msg

:
TMessage

);

Message

WM_FREE_MY_PANEL

;


public



{ Déclarations publiques }



end

;


var




Form1

:
TForm1

;

MyPanel

:
TMyPanel

;


implementation






{$R *.DFM}





{ TMyPanel }






procedure




TMyPanel

.
BTNFreeOnClick

(
Sender

:
TObject

);


begin





// Envoie du Message


PostMessage

(
GetParentForm

(
Self

).
Handle

,
WM_FREE_MY_PANEL

,



0
,



0
);


end

;


constructor




TMyPanel

.
Create

(
Aowner

:
Tcomponent

);


Begin



inherited

Create

(
AOwner

);




// <- ici


SetBounds

(
10
,



10
,



300
,



200
);




// <- ici


EDValeur

:=
TEdit

.
Create

(
Self

);


with

EDValeur


do





Begin


Parent

:=
Self

;

SetBounds

(
200
,



50
,



81
,



22
);


//OnChange := Recalc;



End

;

BTNFree




:=
TButton

.
Create

(
Self

);


with

BTNFree


do





begin


Parent

:=
Self

;

SetBounds

(
270
,



8
,



25
,



35
);

Caption

:=



'X'
;

TabOrder

:=



2
;

OnClick

:=
BTNFreeOnClick

;


End

;


end

;

 






destructor




TMyPanel

.
Destroy

;


begin


EDValeur

.
Free

;

BtnFree

.
Free

;


inherited

destroy

;


end

;



procedure

TForm1

.
Button1Click

(
Sender

:
TObject

);


begin


MyPanel

:=
TMyPanel

.
Create

(

Nil

);

MyPanel

.
Parent

:=
Self

;

MyPanel

.
Name

:=



'MyPanel'
;


end

;


procedure




TForm1

.
FormClose

(
Sender

:
TObject

;




var

Action

:
TCloseAction

);


begin



if

MyPanel

<>




Nil





Then

MyPanel

.
Free

;


end

;


procedure




TForm1

.
WMFREE_MY_PANEL

(

var

Msg

:
TMessage

);


begin






// Récupération du Message et Action






// on pourrait utiliser FreeAndNil(MyPanel) mais comme cette function n'existe pas sous D4 ....



MyPanel
.
Free

;

MyPanel

:=




Nil

;


end

;



end

.

C'est donc possible  et l'appel est fait de l'intérieur du control à détruire
Voilà c'est tout ....

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 juil. 2006 à 15:43
Désolé pour la mise en page
je ne sais pas ce qui c'est passé
Mais ça reste compréhensible (le code est simple à comprendre) ... sinon dites le moi

@+
Cirec
0
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
27 juil. 2006 à 22:06
slt !
éxusez moi j'ai une ptite question .
quand on cree un compo avec des sous composant c un peut comme un chainage?
le compo principale doit etre crée par la fiche ou un panel ...ect et inci de suite ?si non quese qui se passe ?
svp faites moi une ptite éxpliquation (je ne l'éxije pas....mdrr)
merci a vous et vive CodesSources...lol

@+
N*M*B
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
28 juil. 2006 à 07:03
on ne parle pas de chainage mais plutot d'imbrication d'object.

-declaration du composant :

unit UMonCompo;

interface

uses ... ;

type
  TMonCompo = class(TComponent)
  private
    fLaurieOwner : TLaurieContainer;
    fLaurie      : TLaurie;
    fOnChange    : TNotifyEvent;
    procedure SetLaurieContainer(val : TLaurieContainer);
    procedure SetLaurie(val : TLaurie);
  protected
    procedure Change; virtual;
  public
    // constructeur / destructeur, obligé si on veut controler un minimum la
    // creation / destruction du composant. la direction Override est obligatoire
    // dans la plupart des cas.
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;

    // objets interne, attention write necessite la creation d'une fonction
    // d'assignation de valeur quand les composants sont créés en interne.
    // si il s'agit de composant externe a assigner manuellement on mettrat
    // property Objet : ObjetClasse read fObjet write fObjet;
    property LaurieContainer : TLaurieContainer read fLaurieContainer write SetLaurieContainer;
    property Laurie : TLaurie read fLaurie write SetLaurie;

    // evenements, on leurs assigne un gestionnaire d'evenements ...
    property OnChange : TNotifyEvent read fOnChange write fOnChange;
  end;

implementation

constructor TMonCompo.Create(AOwner : TComponent;
begin
  // obligatoire
  inherited create(AOwner);

  // on fait gaffe au sens de creation
  fLaurieOwner := TLaurieContainer.Create(Self);
  fLaurie      := TLaurie.Create(fLaurieOwner);
  Change;
end;

destructor TMonCompo.Destroy;
begin
  // on fait gaffe au sens de liberation
  fLaurie.Free;
  fLaurieOwner.Free;

  // obligatoire
  inherited Destroy;
end;

procedure Change;
begin
  if assigned(fOnChange) then fOnChange(Self);
end;

procedure SetLaurieContainer(val : TLaurieContainer);
begin
  fLaurieContainer.Assign(Val); // ou Val.AssignTo(fLaurieContainer);
  Change;
end;

procedure SetLaurie(val : TLaurie);
begin
  fLaurie.Assign(Val); // ou Val.AssignTo(fLaurie);
  Change;
end;

end.

- creation/utilisation du compo dans un programme :
unit Unit1.pas;

interface
uses ...;

type
   TFormX = class(TForm)
   private
     procedure FormXCreate(Sender : TObject);
     procedure FormXClose(Sender : TObject);
   protected
   public
   published
     procedure DoChange(Sender : TObject); // gestionnaire d'evenement dynamique pour MonCompo
   end;

var
  FormX : TFormX;

implementation

var
  MonCompo : TMonCompo = nil;

procedure TFormX.FormCreate(Sender : TObject);
begin
  // on crée
  MonCompo := TMonCompo.Create(Self);
  MonCompo.OnChange := DoChange;
end;

procedure TFormX.FormClose(Sender : TObject);
begin
  // on libere
  MonCompo.Free;
end;

procedure TFormX.DoChange(Sender : TObject);
begin
  // rafraichir les données par exemple (affichage, calculs ect...)
end;

end.

<hr size="2" width="100%" />Croc (click me)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
28 juil. 2006 à 07:40
une autre chose aussi
auto destruction d'un composant  :

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    procedure DoAutoDestruct(Sender : TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
   TObjectAutoDestruct = class(TObject)
   private
     fOnAutoDestruct : TNotifyEvent;
   public
     procedure AutoDestruct;
     property OnAutoDestruct : TNotifyEvent read fOnAutoDestruct write fOnAutoDestruct;
   end;

procedure TObjectAutoDestruct.AutoDestruct;
begin
  Self.Free;
  if assigned(fOnAutoDestruct) then
     fOnAutoDestruct(self);
end;

{ ---- }

var
  TOAD : TObjectAutoDestruct = nil;

procedure TForm1.DoAutoDestruct(Sender : TObject);
begin
  TOAD := nil;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TOAD := TObjectAutoDestruct.Create;
  TOAD.OnAutoDestruct := DoAutoDestruct;
end;

procedure TForm1.FormClose(Sender: TObject);
begin
  TOAD.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TOAD.AutoDestruct;
end;

end.

faut pas chercher midi a quatorze heure...

<hr size="2" width="100%" />Croc (click me)
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
28 juil. 2006 à 09:16
@Foxi: Simon avait besoin de détruire son composant depuis un event OnClick de ce même componsant. Ce qui est différent de ton dernier exemple.

bon code,
0
Rejoignez-nous