Modifier une caption à partir d'une variable [Résolu]

Signaler
Messages postés
132
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
24 août 2020
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
J'écris un programme qui contient beaucoup de labels. Je suis tout le temps en train d'écrire Label1.caption=ceci, label2.caption=cela... Je voudrais bien me simplifier la tâche en écrivant tout simplement c1:=ceci, c2:=cela ou à la rigueur c1^:=ceci c2^:=cela. Et bien sûr, les captions prendraient les valeurs données à c1 et c2.

Delphi me permet d'écrire: Addr(Label1) mais ça ne m'apporte rien. Si je pouvais écrire Addr(label1.caption), ce serait facile mais ça, Delphi ne l'accepte pas, c'est bien normal.

Avec quelques recherches, je peux trouver combien d'octets séparent le début de Label1 de sa caption (on peut appeler ça le décalage, l'offset) mais je ne vois pas comment je pourrais m'en servir.

En résumé: si je connais A, adresse de Label1, comment lire et modifier le contenu de [(adresse pointée par A) + offset de la caption)]. En Turbo-Pascal, on avait le mot Mem[adresse] qui permettait de faire tout ce qu'on voulait, y compris de grosses bêtises, mais Delphi me semble s'être cuirassé contre la possibilité de lire ou de modifier une adresse mémoire autrement qu'en y accédant par une variable.
A voir également:

25 réponses

Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
Salut,

pour ta question à F0xi, je pense que tu peux passer n'importe quel un TControl en paramètre au lieu d'un TCaption, par exemple.
Ce qui permet d'avoir une procédure plus générique.

Luc.
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
non, SetTextBuf attend un PChar en paramètre, donc SetTextBuf(S) ne marchera pas (tu peux essayer tu auras une erreur de compilation). On appelle donc SetTextBuf(PChar(S)) en castant le S en PChar...

Par rapport au const, si tu es intéressé, jette un oeil dans l'aide delphi sur les paramètres de fonction. Tu verras qu'il y a d'autres mots clés comme var et out...


Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Pardon, j'ai répondu complètement à côté... beckerich a raison. Ne pas tenir compte de ma dernière remarque...


Simon
Messages postés
132
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
24 août 2020
2
Merci à tous. Tout est maintenant clair dans ma tête.

Mais je me suis lancé dans la création d'un Showmessage amélioré. J'ai réussi à faire ce que je voulais mais je bute sur un petit détail. Je crois que je ne vais pas tarder à poser une nouvelle question.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
oui Fredelem, la procedure setTextBuf est propre au TControl (et descendant Tlabel, Tbutton, etc).

tu peux donc passer tout descendant de TControl utilisant TCaption comme base d'affichage (TButton, TLabel, TPanel, TGroupBox, TRadioGroup, etc) et ainsi ne pas avoir un traitement spécifique pour chaque classe.

ce genre de proc est interessante pour les interfaces multilangues dans une certaine mesure.

les tableaux dynamique (array of) sont très pratiques en arguments, mais attention de ne point trop en abuser non plus, on aurait tot fait d'exploser la pile en en utilisant trop.

Un dernier point, il est toujours bien de faire des fonctions outils, mais il faut savoir qu'ajouter en simplicité d'écriture de code (grace a des fonctions et des boucles) peux vite nuire aux perf du programme.


________________________________________________________