Interaction dynamique avec l'interface graphique

Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 - 28 oct. 2005 à 12:10
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 - 28 oct. 2005 à 16:15
Bonjour



Mon programme contient de nombreux champ(environs 100), et je dois
faire des actions sur tous ces champs(si tel ou tel truc, mettre en
gras par exemple), ou récupérer des données...



ya moyen de le faire dynamiquement, en mettant nous même le nom de
l'attribut, ou du nom du edit que l'on veut modifier dans une variable
et d'y accéder avec cette variable, exemple





(je met pas les déclarations)



nom_de_mon_edit:='a'+inttostr(3);



form1.nom_de_mon_edit.text:=text_dans_une_variable;



ca me serait vraiment utile... car sinon ca serait vraiment long et
assez stupide de devoir les faire les uns après les autres...



merci!!!

8 réponses

vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
28 oct. 2005 à 13:26
Pour mettre en gras en une instruction un ensemble de contrôle :
Mettre un TPanel et dans ce TPanel mettre les contrôles, il te suffira de mette la font du TPanel en gras et tout tes contrôles hériteront du gras.

Maintenant si tu dois lors d'une action utilisateur faire une modif identique fonctionnelle pour plusieurs contrôles. Il te suffi de développer tes composants (Tedit, ...) et dans chaque composants ajouter une méthode qui effectue cette action. Cette méthode sera appelé par un Postmessage dans ton application et dans tes contrôles (TMyEdit,...) tu réccupèrera ton message pour action.

vaughan
0
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
28 oct. 2005 à 13:32
bon, déjà je peux pas faire ce que t'as dis avec le tpanel, parce que
c'est pas toutes les cases que je veux mettre en gras(et c'est qu'un
exemple), donc ca joue pas trop...



Pour ta deuxième proposition, je vois pas en quoi ca change le
problème, faut quand meme pouvoir générer après le nom de la méthode
dynamiquement...



et en plus j'aimerais par exemple faire appel à des des composant style
rave(et la dedans, j'aurais carrément le double des champs à remplir...)



Je vois pas comment faire...



Ca serait vraiment bête de devoir le faire à la main...
0
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
28 oct. 2005 à 14:20
Pour chaque composants tu ecrits une procédure message windows


TMyLabel = class(TLabel)


Public


Procedure MonTrt(var msg:TMessage);message WM_Monmessage;


End;

Et dans cette procedure tu fait ton traitement spécifique

Après dans ton application tu fais un postmessage de WM_Monmessage et tout les contrôles qui ont la procédure MonTrt agissent en même temps en une ligne de code !!!

vaughan
0
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
28 oct. 2005 à 14:22
d'accord, mais si pour chaque composant il faut écrire une fonction, ou
est-ce que c'est plus pratique que de faire dans une fonction un
traitement pour chaque truc...



en plus je sias pas ce que c'est un postmessage et un WM_monmessage, ...



ya pas quelques chose d'un peu plus simple??? Mon exemple, ya pas moyen de faire qu'il marche? Même PHP le permet...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
atomefougere Messages postés 32 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 5 décembre 2005
28 oct. 2005 à 15:51
Essaye de regarder du coté de la méthode FindComponent. Elle permet de retrouver un control à partir de son nom. Avec la reflexion tu peux déterminer le type de contrôle et accéder à ses propriétés en fonction.

Par exemple :

[...]
var
currComponent : TComponent;
begin
[...]
nom_de_mon_edit := 'a'+inttostr(3);
currComponent := Self.FindComponent(nom_de_mon_edit);
if assigned(currComponent) then
begin
if currComponent is TEdit then
begin
TEdit(currComponent ).Text := 'blahblah';
end else if currComponent is TButton then
begin
TButton(currComponent ).Caption := 'tototo';
end;
// etc
end;
[...]
0
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
28 oct. 2005 à 15:54
sympa!!!



je savais pas, c'est quoi le if assigned?



Merci bien ca va etre plus simple!!!
0
atomefougere Messages postés 32 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 5 décembre 2005
28 oct. 2005 à 16:01
La fonction Assigned() permet de savoir si ton objet est assigné, c'est à dire différent de nil. En effet, la fonction FindComponent() n'est pas toujours sensée trouver un composant.

Tu as aussi la propriété Components de ta form qui permet de récupérer tous les composants, pour les itérer par exemple.

for i := 0 to self.Components.count-1 do
begin
// self.components[i]
end;
0
Nargzul Messages postés 438 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 26 juillet 2007 4
28 oct. 2005 à 16:15
non non ton premier truc marche à merveille!
0
Rejoignez-nous