Bonjour à tous,

Delphi 7 Enterprise.

Je cherche à regrouper dans une unité unique et séparé différents événements déclenchés par un PopupMenu.
Ce popup menu j'aimerai l'intégrer ensuite dans différents modéles de frames de mon appli.

Dans mon unité commune, j'ai par exemple une procédure me permettant de changer la font de mon RichEdit

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
22
23
procedure TFCommon.SetFont_RE(sender:TObject);
var
  popup: TPopupMenu;
  component: TComponent;
  frame:TComponent;
  pc:integer;
begin
  if Sender is TMenuItem then
    begin
      popup:= TMenuItem(Sender).GetParentComponent as TPopupMenu;
      component:= popup.PopupComponent;
      frame:=component.GetParentComponent;
      for PC:=0 to frame.ComponentCount-1 do
        begin
          if (frame.Components[PC] is TRichEdit) then
            if TRichEdit(frame.Components[PC]).Name=component.Name then
            begin
              ChangerLaFont_RE(TRichEdit(frame.Components[PC]));
              exit;
            end;
        end;
    end;
end;
Dans une de mes frames (fichier unité différent), je place un richedit, et je spéficie la propriété PopupMenu, en allant rechercher le popupmenu de mon unité UCommon.

Ce qui ne marche pas dans la procédure SetFont_RE ci-dessus, c'est la boucle de recherche du composant Richedit dans ma frame.

Lorsque je fais un showmessage(component.name) il m'affiche correctement le nom du RichEdit de ma frame.
Lorsque je recherche le parent du richedit : j'obtiens bien le Panel de ma frame.

Ma question est donc : comment rendre générique la boucle suivante, pour que je puisse l'appeler depuis n'importe quelles frames ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
for PC:=0 to frame.ComponentCount-1 do
        begin
          if (frame.Components[PC] is TRichEdit) then
            if TRichEdit(frame.Components[PC]).Name=component.Name then
            begin
              ChangerLaFont_RE(TRichEdit(frame.Components[PC]));
              exit;
            end;
        end;

Merci de votre aide

@