PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → champclone
champclone
Débuté par l_lolodev, 25 oct. 2005 13:27 - 17 réponses
Posté le 25 octobre 2005 - 13:27
bj

j'essaies le clonage d'un bouton

j'ai créé un bouton en dehors d'1 fen = ok

puis champclone (bouton1"clone",10,10) = ok

je n'arrive pas à accéder uax propriétés de "clone"

j'essaies via indirection:

{clone}..nom="bt2"
bt2..hauteur

mais rien ???

merci !!
Posté le 25 octobre 2005 - 13:45
ops j trouvé

j'ai oublié les " auteur de clone

par contre, si j'ecris {"clone"}..nom="bt2"
bt2..hauteurP

windev me dit que bt2 n'existe pas
Posté le 25 octobre 2005 - 13:45
salut

il faut toujours utiliser {clone,indchamp}.. pour accèder aux propriétés du bouton issu du clonage
Posté le 25 octobre 2005 - 14:20
Bonjour,
La deuxième ligne ne fonctionnera pas, car au moment de la compilation le bouton en question n'existe pas, et on ne peut pas le modifier.
Donc tu dois utiliser ceci:
Pour créer le bouton
ChampClone(bouton1,"BT2",10,10)
Pour modifier ces propriétés:
{"BT2"}..hauteur = 20
Ou utiliser une variable pour stocker le nom du bouton
NomChampClone est une chaine = "BT2"

ChampClone(bouton1,nomchampclone,10,10)
{nomchampclone}..hauteur = 20

Frédéric.
Posté le 25 octobre 2005 - 15:37
j'ai un champ libellé "MAC_1" et je fait

NouveauNom = "MAC_2"
ChampClone(MAC_1,NouveauNom,x,y)
{NouveauNom}..Libellé = NouveauNom
{NouveauNom}..Libellé ="R31"
{NouveauNom}..Etat = AffichageSeulement
{NouveauNom} = ""
{NouveauNom}..Visible = Vrai
{NouveauNom}..CouleurFond = CouleurFond
{NouveauNom}..Couleur = iGrisFoncé
{NouveauNom} = "Contenu du libellé"
Posté le 25 octobre 2005 - 15:48
si tu fais
champclone(bouton1,"clone",10,10)
alors l'indirection est
{"clone"}..x = 5 // chaine de caractère entre les { } ;)
par exemple

bon dev !

"lolodev" <l_lolodev@hotmail.com> a écrit dans le message de news:
435e0193$1@news.pcsoft.fr...


bj

j'essaies le clonage d'un bouton

j'ai créé un bouton en dehors d'1 fen = ok

puis champclone (bouton1"clone",10,10) = ok

je n'arrive pas à accéder uax propriétés de "clone"

j'essaies via indirection:

{clone}..nom="bt2"
bt2..hauteur

mais rien ???

merci !!
Posté le 25 octobre 2005 - 16:24
lolodev a écrit :
bj

j'essaies le clonage d'un bouton

j'ai créé un bouton en dehors d'1 fen = ok

puis champclone (bouton1"clone",10,10) = ok

je n'arrive pas à accéder uax propriétés de "clone"

j'essaies via indirection:

{clone}..nom="bt2"
bt2..hauteur

mais rien ???

merci !!


Bonjour
bien des erreurs !

cNomClone est une chaine = "Clone"
champclone (bouton1,cNomClone,10,10)

{cNomClone}..nom="bt2" // IMPOSSIBLE le nom du champ est affecté via
ChampClone et est le contenu de cNomClone : "Clone"

{cNomClone,indChamp}..hauteur => ok // L'indirection interprète le
CONTENU de la chaine savoir "Clone"
Equivalent :
{"Clone",indChamp}..hauteur => ok

++ R&B
WDForge.org
Posté le 25 octobre 2005 - 18:24
wep

merci pour tout ça
j'arrive à accéder aux propriétés du bouton clone

j'essaie de créer une amtrice de boutons en fct d'items recupérer dans une table et chaque clic doit alimenter une autre table (IHM)

comme fais je pour accéder aux evt d'un bouton cloné ??

bonne soirée
Posté le 26 octobre 2005 - 09:08
Il suffit de mettre l'appel dans le code du bouton "source".
Une astuce, si le code change d'un bouton cloné à l'autre: il suffit de mettre le code en question dans la propriété "note" du clone. Dans le code de bouton source, il faut ensuite "compiler" le code présent dans les notes, et l'executer. De cette façon, pour changer le comportement d'un clone, il suffit de modifier ses notes !

Frédéric.
Posté le 26 octobre 2005 - 09:43
merci mais pas tout compris sur les notes

le clic d'un bouton va renvoyer vers une fonction qui enregistrera apres verification de contraintes dans une table des info.

donc je dois passer en paramétre le nom du bouton.
je ne vois pas comment recupérer l'unique propriété clic du bouton cloné ??
Posté le 26 octobre 2005 - 11:26
Dans le code de clic du bouton source, tu mets ceci:
sResultat est une chaîne
sResultatCompile est une chaîne

si moimeme..note <> ""
sResultatCompile = Compile ("Proc_dynamique", Moimeme..note)
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure )
CAS "ERR" : sResultat = "Compilation impossible. "+ RC +ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
fin

Ensuite, quand tu clones ton bouton:
ChampClone(bouton1,"BT2",10,10)
{"BT2"}..note = "info(""Je suis dans le bouton BT2."")"

Ici, le code ne fait qu'afficher un message, mais tu peux y mettre ce que tu veux. Lors du clic sur BT2, le code présent dans ses notes sera executé.

Frédéric.
Posté le 26 octobre 2005 - 11:56
tu peux aussi nommer tes clones d'une manière "pratique"

ex, si ton champ source se nomme "source" les clones peuvent se nommer
"clone_1_1", "clone_2_1"...
afin de stocker la position en x et en y du bouton dans ta matrice de
boutons

ensuite dans le code de clic sur le bouton tu utilises moimeme..nom pour
connaitre le nom du bouton
qui a été cliqué et avec les fonctions de gestion des chaines tu récupères
les infos que tu as stockées
dans le nom du champ cloné (x et y dans l'exemple précédent)...

voilà c'était une idée ;)
bon dev
eric l

"lolodev" <l_lolodev@hotmail.com> a écrit dans le message de news:
435e473f$1@news.pcsoft.fr...
wep

merci pour tout ça
j'arrive à accéder aux propriétés du bouton clone

j'essaie de créer une amtrice de boutons en fct d'items recupérer dans une
table et chaque clic doit alimenter une autre table (IHM)

comme fais je pour accéder aux evt d'un bouton cloné ??

bonne soirée




Posté le 26 octobre 2005 - 13:05
merci
j'ai essayé sur le clic du bouton origine moimeme..nom renvoie le nom du bouton clone.

mais comment je peux connaître le bouton "clone" qui a été cliqué et coder sur l'evt clic de ce bouton ?
Posté le 26 octobre 2005 - 13:24
j ecris:

souschaine est une chaine = extraitchaine(moimeme..nom,1,'-')

erreur: l'identificateur souschaine n'est pas accessible

effectivement il n'est pas créé tant que les clones ne le sont pas ...
Posté le 26 octobre 2005 - 15:26
Voici un exemple concret:
Ici, je crée des boutons en fonction du contenu d'un fichier HF. Le but est de construire dynamiquement une barre de lancement rapide d'applications:
NumChamp est un entier
PositionX est un entier
PositionY est un entier


PositionX = BtnExemple..X + 5
PositionY = BtnExemple..Y

POUR TOUT Application SUR Rang
NumChamp++
SI ChampExiste("btnToTo" + NumChamp) ALORS
ChampSupprime("btnToTo" + NumChamp)
FIN
ChampClone(BtnExemple,"BtnToto" + NumChamp,PositionX,PositionY)
{"btnToTo" + NumChamp}..Note = "LanceAppli(""" + Application.Chemin + """, exeInactif, Faux,""" + fExtraitChemin(Application.Chemin,fDisque) + fExtraitChemin(Application.Chemin,fRépertoire) + """)"
{"btnToTo" + NumChamp}..Libellé = Application.Nom
{"btnToTo" + NumChamp}..Image = Application.NomIcone
{"btnToTo" + NumChamp}..Bulle = Application.Nom
{"btnToTo" + NumChamp}..Visible = Vrai

PositionX += BtnExemple..X + BtnExemple..Largeur + 0
SI NumChamp modulo 10 = 0 ALORS
PositionY += BtnExemple..Hauteur + 5
PositionX = BtnExemple..X
FIN
FIN

Et ici, le code de l'événement clic sur le bouton BtnExemple:

sResultatCompile est une chaîne

sResultatCompile = Compile("TrtBouton",MoiMême..Note)
SELON sResultatCompile
CAS "" : ExécuteTraitement("TrtBouton", trtProcédure)
CAS "ERR" : Erreur("Compilation impossible. "+RC+ErreurInfo())
AUTRE CAS : Erreur("Erreur inconnue : " + sResultatCompile)
FIN

Le clic sur l'un des clones lance bien l'application qui lui a été affecté.

Frédéric.
Posté le 26 octobre 2005 - 15:57
hum
j testé ok

sauf que moi je ne veux pas lancer une application mais effectuer un test de contrainte en fct du bouton cloné cliqué.

par exemple:
j la matrice de bouton cloné suivante:

clone_a_1 clone_b_1 clone_c_1
clone_a_2 clone_b_2 clone_c_2
...

j'arrive bien à créer cette matrice.
par contre, je n'arrive pas à recupérer le nom de clone_a_1 afin de tester la contrainte (par exemple) un bouton colone "a" doit être cliqué avant un bouton colonne "b".

dans l'evt du bouton origine, j'ecrit :
sschaine est une chaine
sschaine = extraitchaine (moimeme..nom,1,"-") et la j une erreur comme quoi sschaine n'est pas déclarée ...
Posté le 27 octobre 2005 - 08:50
Bizarre, si je mets le code suivant dans l'événement clic de mon bouton BtnExemple ( donc sans passer par les notes, ou la compilation dynamique ):
ssChaine est une chaîne
ssChaine = MoiMême..Nom
Info(MoiMême..Nom)

Ca fonctionne, en cliquant sur un bouton j'ai une fenetre qui m'affiche le nom du bouton.
Est-ce que tu as essayé d'appeler une procédure en passant le nom du bouton en paramètre, pour tester la contrainte dans la procédure ?

Frédéric.
Posté le 27 octobre 2005 - 10:30
oops

j trouvé ...
souschaine doit être declaré dans la fenêtre principale, pas dans le code bouton origine !!

merci !!