begin process at 2012 02 11 08:26:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Algorithme

 > 

Autre

 > 

Accès à la valeur d'une variable par son nom dans une string


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Accès à la valeur d'une variable par son nom dans une string

jeudi 5 juin 2008 à 17:01:32 | Accès à la valeur d'une variable par son nom dans une string

MAURICIO

Administrateur CodeS-SourceS
Bonjour à tous !!!

voilà je me présente ... quoi? ce n' est pas un site de rencontre? C' est une site sur la programmation Delphi voire ... Lazarus? Bem ça tombe bien j' ai une question! ^^

Voilà, dans certains cas, j' aimerai accéder à une variable comme on le fait avec un compo gràce à la commande FindComponent(). 

Exemple:
unit ABC;
var
  Variable1, Variable2, Variable3, Variable4, Variable5: Integer;

procedure AAA.OnClick(Sender: TObject);
var
  i, Valeur: Integer;
begin
  i := GetIndiceOfvariableToUse;  // fonction qui me renvoie un integer entre 1 et 5 ...
  Valeur := FindIntegerVariable('Variable' + intToStr(i));
  ShowMessage(intToStr(Valeur));
  FindIntegerVariable('Variable' + intToStr(i)) := Valeur + 10; // J' ajoute 10 à la variable ...
end;

Je sais que je peux utiliser un array mais je voudrai savoir s' il est possible d' accéder à une variable de cette manière.
Merci de votre aide.

A+
jeudi 5 juin 2008 à 17:06:11 | Re : Accès à la valeur d'une variable par son nom dans une string

MAURICIO

Administrateur CodeS-SourceS
En fait,
il voudrais mieux que FindIntegerVariable('Variable' + intToStr(i)) me renvoie un pointeur de type Integer:

procedure AAA.OnClick(Sender: TObject);
var
  i: Integer;
  p: ^Integer;
begin
  i := GetIndiceOfvariableToUse;  // fonction qui me renvoie un integer entre 1 et 5 ...
  p := FindIntegerVariable('Variable' + intToStr(i));
  ShowMessage(intToStr(p^));
  inc(p^, 10); // J' ajoute 10 à la variable ...
end;

La question reviens donc à comment avoir un pointeur sur une variable.
Merci d' avance!
jeudi 5 juin 2008 à 19:01:04 | Re : Accès à la valeur d'une variable par son nom dans une string

jlen100

Membre Club
Salut Mauricio,
 dans Delphi comme dans tout langage compilé les noms de variable sont remplacés par leur adresse. Tu peux récupérer l'adresse d'une variable avec l'opérateur @ mais cela se fait en "dur"
la solution la plus simple est effectivement de déclarer un array , de récupérer l'adresse de base et de calculer l'adresse de la cellule.

il est peut être aussi possible dans l'exemple que tu donnes de récupérer l'adresse de la premiere variable et de calculer l'adresse des suivantes si elle sont déclarer à la suite (il est vraissemblable que le compilateur fasse de même.(a vérifier).

salutations
JLEN
jeudi 5 juin 2008 à 20:12:45 | Re : Accès à la valeur d'une variable par son nom dans une string

florenth

Membre Club
Salut !
C'est possible, mais uniquement sous deux conditions :
- les champs dont tu veux avoir accès doivent être des propriétés publiées d'une classe.
- La classe doit descendre de TPersistent ou être compilée avec la directive {$M+}.

Dans ce cas, tu peux utiliser les RTTI (cf Google) pour lire et modifier les propriétés.
Y'a même moyen d'invoquer des méthodes de la même manière mais c'est plus chaud d'un coup...
jeudi 5 juin 2008 à 21:12:00 | Re : Accès à la valeur d'une variable par son nom dans une string

JulioDelphi

Membre Club Administrateur CodeS-SourceS
ca peut aider ?


procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:=0 to ControlCount - 1 do
if IsPublishedProp(Controls[i], 'Color') and PropIsType(Controls[i], 'Color', tkInteger) then
SetOrdProp(Controls[i], 'Color', clRed);
end;
jeudi 5 juin 2008 à 23:26:13 | Re : Accès à la valeur d'une variable par son nom dans une string

f0xi

Membre Club Administrateur CodeS-SourceS


type
  TVariable = record
    Var : pointer;
    Name: string;
    // VarType : byte;
  end;

  TVariableList = class(TList)
  ... derivation pour TVariable ...
  end;


   




jeudi 5 juin 2008 à 23:31:18 | Re : Accès à la valeur d'une variable par son nom dans une string

MAURICIO

Administrateur CodeS-SourceS
Merci pour vos réponses,
je vais chercher du coté des RTTI qui semble ce que je cherche ...
A+
lundi 9 juin 2008 à 15:04:21 | Re : Accès à la valeur d'une variable par son nom dans une string

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Comme expliqué sur ce site en long et en large, accèder aux variables par leur noms à l'exécution, ça n'est pas bien.

Nan parce que sinon, ça ferait pas sérieux de dire que Lazarus fait du code lent, et les dev C vont encore se foutre de nous.
lundi 9 juin 2008 à 16:47:07 | Re : Accès à la valeur d'une variable par son nom dans une string

florenth

Membre Club
Ce qui est mal, c'est d'abuser de techniques dont on sait qu'elles consomment pas mal de temps alors qu'il y a plus simple et plus rapide.

Mais les connaître ne fait pas de mal... bien le contraire, ça peut sauver !


Cette discussion est classée dans : variable, valeur, accès, integer, inttostr


Répondre à ce message

Sujets en rapport avec ce message

incrémentation automatique (Paradox) [ par lirva ] Bonjour,Je voudrais récupérer la dernière valeur de l'enregistrement d'un champ à incrémentation automatique sous Paradox.Y'a-t-il une variable global variable dans le nom d'un composant [ par thonyboy ] Bonjour,Je cherche a faire un truc du genre :Supposons X composants Tlabels et 1 variable ICase of I 1: Tlabel1.caption := 'Label1' 2: Tlabel2.capti petit probleme de valeur [ par sheorogath ] procedure TForm2.Button1Click(Sender: TObject);vari:integer;e:integer;f:integer;begin i:= StrToInt(Edit1.Text); e:= StrToInt(Edit2.Text); if Length(Fo un variable qui perd sa valeur lors du hide d'une fiche secondaire [ par cricri_b34 ] salutj'ai une variable (globale) qui enregistre l'emplacement du fichier en cours d'utilisation.le probleme cest que quand je fait afficher une autre Comment inséré une valeur d'une variable dans un champs? [ par Gokuan ] Hello,  j'ai une variable qui contient une valeurs dedans, je voudrai faire en sorte avec une requete qui prenne la valeur de la variable et la modifi Transmettre un tableau ou un integer [ par Francky23012301 ] Salut à tous Comment transmettre une variable d'un serveur à un client. Je m'explique. Le serveur envoye au client un integer i ayant pour valeur 10 accès au contenu des cellules d'un dbgrid [ par _ben ] Bonjour, je veux parcourir le contenu du premier champ (toutes les lignes) d'un DBGrid afin d'en comparer le contenu avec le contenu d'une cellule d'u Exporter la valeur d'une variable définit dans un exe vers un autre exe [ par Francky23012301 ] Salut à tous, Mon "projet" contient deux sources donc deux executables. Dans mon premier programme, j'utilise un fichier extérieur. Je peux récupér parametre par defaut [ par Guillemouze ] salut a tous, une petite question toute bete : est il possible de laisser la valeur par defaut d'un parametre en mettant une valeur aux suivants?pour Extended en Integer [ par Yil2201 ] Salut à tous !Voilà, je cherche un moyen de convertir une variable Extended en variable Integer.J'ai essayé ExtToInt(), fonctionne pas, et ExtendedToI


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,994 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales