Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Accès à la valeur d'une variable par son nom dans une string [ Algorithme / Autre ] (MAURICIO)

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

MAURICIO

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

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

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é 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...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.