fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 2022
-
8 avril 2013 à 13:02
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
13 avril 2013 à 15:20
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.
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 11 avril 2013 à 13:33
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.
sp40
Messages postés1284Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 11 avril 2013 à 14:22
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...
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 11 avril 2013 à 21:09
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 13 avril 2013 à 15:20
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.