Bonjour
j'ai configuré une liste de texte (correspondance d'un texte différent pour chaque valeur entière d'un index)
j'ai animé une liste de texte sur un synoptique, quand je cliques j'ai tous les textes qui s'affichent et celui que je sélectionne donne la valeur de l'index.
et le texte sélectionné s'affiche. Jusque là tout va bien.
L'utilisation d'une liste paramétrée est pratique car je m'en sers pour plusieurs choses, et l'index me permet des animations de couleur.
Maintenant je voudrais récupérer le texte sélectionné pour le copier dans une variable de type string
je n'ai pas trouvé le paramètres de l'objet "list text" qui me le permette, une idée ? (action directe ou C ou VB )
je pourrais par exemple le faire sur changement de valeur de l'index
récupérer le texte d'une liste dans wincc V7.4
Re: récupérer le texte d'une liste dans wincc V7.4
réponse du support
pas de solution magique avec une variable que j'aurais ratée
il faut se taper du code en VB car on peut retrouver la valeur entière et la liste de texte de référence puis la parcourir
Début du code fourni par le support
Dim objTextList
Dim strAssignments, strValue
Set objTextList = ScreenItems("TextList1")
strValue = objTextList.OutputValue
strAssignments = objTextList.Assignments
HMIRuntime.Trace strValue & vbNewline
HMIRuntime.Trace strAssignments & vbNewline
Ouvrez l'ApDiag pour observer le résultat.
A partir de ces éléments il vous faut faire du traitement supplémentaire pour sortir la correspondance Valeur / Texte.
pas de solution magique avec une variable que j'aurais ratée
il faut se taper du code en VB car on peut retrouver la valeur entière et la liste de texte de référence puis la parcourir
Début du code fourni par le support
Dim objTextList
Dim strAssignments, strValue
Set objTextList = ScreenItems("TextList1")
strValue = objTextList.OutputValue
strAssignments = objTextList.Assignments
HMIRuntime.Trace strValue & vbNewline
HMIRuntime.Trace strAssignments & vbNewline
Ouvrez l'ApDiag pour observer le résultat.
A partir de ces éléments il vous faut faire du traitement supplémentaire pour sortir la correspondance Valeur / Texte.
-
philou77
- Mi homme - Mi automate

- Messages : 2142
- Enregistré le : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: récupérer le texte d'une liste dans wincc V7.4
Salut
Moins souple mais plus simple.
Tu crées un tableau string au démarrage de l’ihm. Même textes et même ordre que ta liste.
Utilise l’index de l’élément sélectionné de ta liste pour afficher le texte souhaité.
C’est simple mais si la liste change faut reprogrammer ton script de démarrage
Moins souple mais plus simple.
Tu crées un tableau string au démarrage de l’ihm. Même textes et même ordre que ta liste.
Utilise l’index de l’élément sélectionné de ta liste pour afficher le texte souhaité.
C’est simple mais si la liste change faut reprogrammer ton script de démarrage
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! 
Re: récupérer le texte d'une liste dans wincc V7.4
y a deux types d'objet "liste" dans wincc, le premier fait référence à une liste pré-paramétrée facile à manipuler avec excel (import/export)
Mais elle ne renvoie que l'index
Une autre se paramètres directe sur l"objet et renvoie index et chaine de caractère.(mais moins convivial à modifier si la liste change)
Merci pour ton idée, Y a plein de solutions le tout est de choisir la meilleure
Mais elle ne renvoie que l'index
Une autre se paramètres directe sur l"objet et renvoie index et chaine de caractère.(mais moins convivial à modifier si la liste change)
Merci pour ton idée, Y a plein de solutions le tout est de choisir la meilleure
Re: récupérer le texte d'une liste dans wincc V7.4
Bonjour,
Créer une variable interne de type String ("VariableInterne")
ajouter ce script à l’événement listselect
Tu peux ensuite ailleurs ré-utiliser ton texte par un GetTagValue("VariableInterne").
Le fenêtre de debug est une très bonne idée pour la mise au point en effet. C'est grâce à cela qu'on peut découvrir des erreurs qu'on ne verrait pas autrement.
Une idée : pour initialiser la liste ça peut aussi se faire dans un script au démarrage de la vue . On pourrait, par exemple, l'initialiser à partir d'un fichier texte que tu peux alors modifier sans même avoir à arrêter l'application.
J'ai conçu une appli VB il y a une vingtaine d'année basée sur ce principe : tout était paramétrable à partir de fichier d'initialisation (.ini).
Est-ce vraiment utile de faire si compliqué?
A toi de voir.
peut-être pas la meilleur mais j'aurai fait ainsi (dans le principe aux erreurs syntaxe prêt, car il y a bien 10 ans que je n'ai pas touché à WinCC) :
Créer une variable interne de type String ("VariableInterne")
ajouter ce script à l’événement listselect
Code : Tout sélectionner
Dim objTextList
Dim strAssignments, strValue
Set objTextList = ScreenItems("TextList1")
SetTagValue("VariableInterne",objTextList.OutputValue);
Le fenêtre de debug est une très bonne idée pour la mise au point en effet. C'est grâce à cela qu'on peut découvrir des erreurs qu'on ne verrait pas autrement.
Une idée : pour initialiser la liste ça peut aussi se faire dans un script au démarrage de la vue . On pourrait, par exemple, l'initialiser à partir d'un fichier texte que tu peux alors modifier sans même avoir à arrêter l'application.
J'ai conçu une appli VB il y a une vingtaine d'année basée sur ce principe : tout était paramétrable à partir de fichier d'initialisation (.ini).
Est-ce vraiment utile de faire si compliqué?
A toi de voir.
Re: récupérer le texte d'une liste dans wincc V7.4
Dixit le support et ma recherche je n'ai pas trouvée l'équivalent du Oupvalue pour une TextList (on peut récupérer la valeur d'index mais pas la chaine de caractère)
j'ai trouvé une solution bestiale, au lieu d'utiliser une textlist j'ai utilisé une listbox, cette dernière renvoie à la fois l'index et la chaine de caractère
je la remplis à la sauvage avec un script VB sur ouverture de la fenêtre
Set objTextbox = ScreenItems("TextBox1")
objTextbox.Index=1
objTextbox.Text=" texte 1"
objTextbox.Index=objTextbox.Index+1
objTextbox.Text=" texte 2"
sur clic dans la liste je récupère la chaine de caractère que je transfère dans ma variable (action directe sur relâcher du clic :
thisobjet.Text vers mavariable
.....
A voir pour dépiler un fichier texte ou une liste de texte pré-paramétrée au lieu de faire la brute, les textes ne sont pas amenés à bouger souvent
Au pire modifier le script est super rapide, au moins j'ai une solution qui fonctionne

