Bonjour,

Comme le titre l'indique je souhaiterais appeler dynamiquement des procedure et des fonctions, un peu comme on fait avec des Dll (lors du chargement dynamique) sauf que là mes fonction et mes procedure sont dans mon exe.

Je m'explique, j'ai un menu dynamique qui est constitué à partir d'un fichier texte (.inf) dont voici la structure :

et je veux rajouter la procedure ou fonction appelé pour avoir kune structure du fichier .inf comme ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Nom_menu;Image_menue;Nom_procedure_menu
Ainsi lorsque de la constitution de mon menu j''aurais, le nom du menu, l'image et la procédure (ou fonction) associé à ce menu.

en résumé voici le pseudo code que je souhaite mettre en place :


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
 
 
1.  Lecture du fichier .inf
2. création du menu
          2.1 Création bouton_1
                   2.1.1 Bouton_1.caption := Nom_menu
                   2.1.2 Bouton_1.glyph := Image_menue
                   2.1.3 Bouton_1.onClick :=  ChargerEtAppelerMAprocedure(' Nom_procedure_menu');
         2.2 Création bouton_2
                   2.2.1 Bouton_2.caption := Nom_menu
                   2.2.2 Bouton_2.glyph := Image_menue
                   2.2.3 Bouton_2.onClick :=  ChargerEtAppelerMAprocedure(' Nom_procedure_menu');
          2.3 Création bouton_3
          2.4 Création bouton_4
....
PS la création du menu dynamque est aujourd'hui opérationnel le problème est qu'aujourd'hui la gestion du menu est comme ci-dessous :

if Nom_menu = Calendrier then Affiche_calendrier
else if Nom_menu = Messagerie then Affiche_calendrier

ce qui n'est pas térrible et génant à gérer.


j'ai pensé au code suivant, que je n'ai pas encore essayer, car je n'es pas DELPHI sur mon poste pour le moment, je ferais le test ce soir chez moi, par contre si vous avec des idées ou autre je suis preneur
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
 
 
procedure ChargerEtAppelerMAprocedure(NOM_PROCEDURE:String);
var
  // Affiche_Fontionnalité est le nom de ma procedure dans mon exe
  MAprocedure: Affiche_Fontionnalité (Libelle: String);
begin
 
  Somme := nil;
  //le Handle de l'exe
  If Handle = 0 then Exit;
 
  //Récupération de l'adresse de la fonction nommée NOM_PROCEDURE
  MAprocedure:= GetProcAddress(Handle, pAnsiChar(NOM_PROCEDURE));
 
  //Appel de la fonction si on a bien récupéré son adresse
  If Assigned(MAprocedure) then MAprocedure('');
end;
merci de votre aide.

Cordialement
Qays