Bonjour,

Je rencontre le problème d'héritage suivant :

J'ai créé une form que j'ai appelé w_Base
Elle contient juste un bouton et un évènement clic de ce bouton

J'ai créé une form que j'ai appelée w_Test2 et qui dérive de w_Base
Pour la créer j'ai fait Fichier / Nouveau / Autre et j'ai délectionné dans l'onglet correspondant à mon projet w_Base
Sur la nouvelle fenêtre j'ai surchargé l'évènement clic du bouton
le code de la fenêtre est le suviant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type
  Twin_Test2 = class(Twin_base)
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  win_Test2: Twin_Test2;
 
implementation
 
{$R *.dfm}
 
procedure Twin_Test2.Button1Click(Sender: TObject);
begin
  inherited;
  ShowMessage('test après héritage');
end;
Enfin dans la fenêtre principale j'ai appelé ma fenêtre de test
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
procedure Twin_Appli.Button2Click(Sender: TObject);
var
   LO_Form : TWin_Base;
begin
    if LO_Form = Nil then LO_Form := TWin_Test2.Create(Application);
    LO_Form.Button1Click(Nil);
    LO_Form.Parent := Panel1;
    LO_Form.Visible := true;
end;
Ce que je ne comprends pas c'est qu'à l'ouverture l'évènement clic traite le code de l'objet parent (w_Base) et pas de celui qui en hérite (w_Test2) alors que LO_Form a été créé avec.

si je remplace ma ligne par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TWin_Test2(LO_Form).Button1Click(Nil);
effectivement cela fonctionne mais dans l'application que je veux construire ma procédure reçoit en paramètre une chaine de caractère indiquant la fenêtre à ouvrir.
Je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
  if Param = 'Test2' then LO_Form := TWin_Test2.Create(Application);
  if Param = 'xxx'     then LO_Form := TWin_xxx.Create(Application);
et cela va multiplier les if et alourdir le code

J'espère avoir été clair
Merci de vos conseils