Caster un string en fonction [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
6 août 2008
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Bonjour,



Pour faire court, j'ai une variable de type string et une procédure, par exemple :



public

procedure fonction1();

Var1 : string;

...

Var1 := 'fonction1';



Lorsque je clique sur un bouton, je voudrais lancer la fonction 'fonction1'. Mon problème est donc le suivant.

Je ne veux pas faire :

if Var1 = 'fonction'1 then fonction1();



Mais je voudrais "caster" Var1 en type "procedure". Je crois que c'est
possible, mais je ne retrouve aucune information sur ce genre de
manipulation.



Merci pour votre aide, d'avance.

CSweety13

5 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Un Exemple simple qui devrai t'aider

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
// Your routines (that you'll run by name) must be here
procedure Hello_World(Sender: TObject);
private
procedure ExecuteRoutine(Instance: TObject; Name: string);
end;


var
Form1: TForm1;


type
TExecute = procedure of object;


implementation


{$R *.DFM}


procedure TForm1.ExecuteRoutine(Instance: TObject; Name: string);
var
Routine: TMethod;
Execute: TExecute;
begin
Routine.Data := Pointer(Instance);
// Returns the address of a published method.
Routine.Code := Instance.MethodAddress(Name);
if Routine.Code = nil then Exit;
Execute := TExecute(Routine);
Execute;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteRoutine(Form1, 'Hello_World');
end;


procedure TForm1.Hello_World(Sender: TObject);
begin
ShowMessage('This is a test');
end;
end.

Si tu cliques sur Button1 ça lance Hello_World voilà c'est tout
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Si j'ai bien compris tu voudrais lancer une fonction où une procédure par son non
Messages postés
20
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
6 août 2008

Oui, c'est ça, en sachant que son nom je l'ai seulement dans la valeur de la variable Var1.



Je ne veut pas passer par :
if Var1 = 'fonction'1 then fonction1();

car, des fonctions, je peux en avoir un très grand nombre, et je ne veux pas mettre autant de fois de If Var1 = 'xxx' then xxx();

que j'ai de fonctions disponibles.


CSweety13
Messages postés
20
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
6 août 2008

C'est nickel!!!



Merci beaucoup, je croyais ce que je demandais l'impossible





CSweety13
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Autre méthode décrite ici , pas plus compliquée et qui ne s'applique pas nécessairement à une "procedure of object" comme le souhaite CSweety13.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.http://www.30millionsdamis.fr/FR/Popup/petition_2005/Petition.htm