[Panorama] Accès aux élements graphiques d'une vue par script
[Panorama] Accès aux élements graphiques d'une vue par script
Bonjour
Contrairement à d'autres SCADA, je suis infichu de trouver dans Panorama comment on accède par script aux éléments graphiques d'une vue tels que bouton, texte, rectangle...
Il existe bien des propriétés d'animation sur l'élément graphique lui-même, mais elle sont limitées.
Et de toute façon, je souhaite le faire par script.
Le script est un sous-composant (un object) de la vue.
Si on peut accéder par script à tous les sous-composants d'une vue tels que External HMI élement (listbox, navigateur web, ...) , je ne vois pas comment accéder aux éléments graphiques.
J'ai pourtat fouillé dans l'aide en ligne de fond en comble...
Une idée ?
Contrairement à d'autres SCADA, je suis infichu de trouver dans Panorama comment on accède par script aux éléments graphiques d'une vue tels que bouton, texte, rectangle...
Il existe bien des propriétés d'animation sur l'élément graphique lui-même, mais elle sont limitées.
Et de toute façon, je souhaite le faire par script.
Le script est un sous-composant (un object) de la vue.
Si on peut accéder par script à tous les sous-composants d'une vue tels que External HMI élement (listbox, navigateur web, ...) , je ne vois pas comment accéder aux éléments graphiques.
J'ai pourtat fouillé dans l'aide en ligne de fond en comble...
Une idée ?
Modifié en dernier par BruceBacc le 13 janv. 2023, 13:38, modifié 1 fois.
Re: [Panorama] Accès aux élements graphiques par script
Bonjour,
je ne sais pas si cela t'aidera.
Si tu as accès aux divers objet de ta page (Form) tu dois pouvoir en lister les controls.
Une fois que tu connais le nom du controls qui t'interesse, voici de qu'elle manière j'ai procédé pour pointer dessus (en VB) :
Après cela, Ctrl pointe sur l'objet recherché.
je ne sais pas si cela t'aidera.
Si tu as accès aux divers objet de ta page (Form) tu dois pouvoir en lister les controls.
Une fois que tu connais le nom du controls qui t'interesse, voici de qu'elle manière j'ai procédé pour pointer dessus (en VB) :
Code : Tout sélectionner
Public Function FindObjet(ByVal Forme As Form, [b][highlight=yellow]ByRef[/highlight][/b] [b]ctrl[/b] As Control, ByVal name As String, Optional ByRef Idx As Integer) As Boolean
Dim titi As String
FindObjet = False
For Each ctrl In Forme
' Recherche de l'objet seul
titi = Forme.name
If [b]ctrl[/b].name = name Then
If IsMissing(Idx) Then
FindObjet = True
Exit For
Else
If ctrl.Index = Idx Then
FindObjet = True
Exit For
End If
End If
End If
Next ctrl
End FunctionRe: [Panorama] Accès aux élements graphiques d'une vue par script
Merci DurandO pour ta réponse
Ton script fonctionne peut-être, mais je ne vois absolument pas comment récupérer l'elément de base 'Form' dans un script IHM de Panorama.
Je peux accéder à l'object 'Vue' à partir du script en utilisant 'Parent.'
Mains une fois là, je n'ai aucune info qui me permet de récupérer le 'Form'
Ton script fonctionne peut-être, mais je ne vois absolument pas comment récupérer l'elément de base 'Form' dans un script IHM de Panorama.
Je peux accéder à l'object 'Vue' à partir du script en utilisant 'Parent.'
Mains une fois là, je n'ai aucune info qui me permet de récupérer le 'Form'
Re: [Panorama] Accès aux élements graphiques d'une vue par script
Bonjour,
de ce que je me souviens, car cela fait un bon moment que je n'ai pas pratiqué le développement.
Dans mon cas Form est un type d'objet au même titre que Vue.
Une fois pointé sur Vue, tu dois pouvoir en lister les objets, les controls.
Ton objet vue contient des objets hérités de Vue auquel ensuite tu pourras accéder au propriété et méthode.
de ce que je me souviens, car cela fait un bon moment que je n'ai pas pratiqué le développement.
Dans mon cas Form est un type d'objet au même titre que Vue.
Une fois pointé sur Vue, tu dois pouvoir en lister les objets, les controls.
Ton objet vue contient des objets hérités de Vue auquel ensuite tu pourras accéder au propriété et méthode.
Re: [Panorama] Accès aux élements graphiques d'une vue par script
Effectivement, je peux accéder aux sous- objets de l'élement 'Vue' par la propriété 'Objects'
For Each o_object In PnGetObjectEx("../Main").Objects
PnMsgBox "", o_object.Name
Next
Mais en les parcourant, je n'obtiens que les élements que tu vois dans l'image ci-dessous (listbox, reload, script_open), mais pas la liste des élements graphiques sur la vue
For Each o_object In PnGetObjectEx("../Main").Objects
PnMsgBox "", o_object.Name
Next
Mais en les parcourant, je n'obtiens que les élements que tu vois dans l'image ci-dessous (listbox, reload, script_open), mais pas la liste des élements graphiques sur la vue
Re: [Panorama] Accès aux élements graphiques d'une vue par script
Bonjour,
Les objets que tu cherches où sont-ils ?
Dans Main, un niveau au dessus, ou dans une autre class peut-être ?
C'est quoi l'arborescence complète de ton appli?
J'ai trouvé cette vidéo de présentation :
Video Demo Panorama
Je comprends que les objets auxquels tu veux faire référence ce situent au niveau projet.
Ta vue doit d'ailleurs faire partie du projet.
Les objets que tu cherches où sont-ils ?
Dans Main, un niveau au dessus, ou dans une autre class peut-être ?
C'est quoi l'arborescence complète de ton appli?
J'ai trouvé cette vidéo de présentation :
Video Demo Panorama
Je comprends que les objets auxquels tu veux faire référence ce situent au niveau projet.
Ta vue doit d'ailleurs faire partie du projet.
Re: [Panorama] Accès aux élements graphiques d'une vue par script
La vue 'Main' est une vue de test simple située à la racine du projet. Elle n'est pas dans un composant.
J'accède bien à l'objet 'Vue' à partir du script en faisant PnGetObjectEx("../Main")
Les objets de la vue auquel je souhaite accéder par script :
- ne sont pas ceux qui sont visibles dans l'arborescence dans l'image jointe précédemment (Connections, Listbox, Reload, ..., ) et que l'on peut récupérer facilement avec PnGetObjectEx("../Main").Objects),
- mais bien les éléments graphiques qui se trouvent dans la vue directement : les boutons, les textes, les images, les traits, rectangles, cercle...
L'aide en ligne indique qu'on peut accéder à ces éléments avec une application externe en C# en utilisant la bibliothèque PERSIST.
Mais comment arriver au même résultat dans un script panorama situé dans la vue (le script 'Reload' en l'occurrence dans l'exemple).
J'ai retourné l'aide en ligne dans tous les sens, testé un tas de choses, mais rien n'y fait : j'ai franchement l'impression que ce n'est pas possible !?!
Ce qui serait un comble pour un SCADA !
Même avec WINCC Pro, tu peux accéder par script à toutes les propriétés graphiques de tous les types d'éléments que tu peux placer sur une vue !
La vidéo de présentation que tu proposes ne montre pas comment on accède aux éléments graphiques par script.
J'accède bien à l'objet 'Vue' à partir du script en faisant PnGetObjectEx("../Main")
Les objets de la vue auquel je souhaite accéder par script :
- ne sont pas ceux qui sont visibles dans l'arborescence dans l'image jointe précédemment (Connections, Listbox, Reload, ..., ) et que l'on peut récupérer facilement avec PnGetObjectEx("../Main").Objects),
- mais bien les éléments graphiques qui se trouvent dans la vue directement : les boutons, les textes, les images, les traits, rectangles, cercle...
L'aide en ligne indique qu'on peut accéder à ces éléments avec une application externe en C# en utilisant la bibliothèque PERSIST.
Mais comment arriver au même résultat dans un script panorama situé dans la vue (le script 'Reload' en l'occurrence dans l'exemple).
J'ai retourné l'aide en ligne dans tous les sens, testé un tas de choses, mais rien n'y fait : j'ai franchement l'impression que ce n'est pas possible !?!
Ce qui serait un comble pour un SCADA !
Même avec WINCC Pro, tu peux accéder par script à toutes les propriétés graphiques de tous les types d'éléments que tu peux placer sur une vue !
La vidéo de présentation que tu proposes ne montre pas comment on accède aux éléments graphiques par script.
Re: [Panorama] Accès aux élements graphiques d'une vue par script
Bonjour,
As-tu essayé avec l'outil applicationexplorer de retrouver le nom de l'objet qui t’intéresses et sa racine?
Après je ne connais ton but final.
Tu peux peut-être procéder différemment.
Si c'est réaffecter les variables liées à ces objets, tu peux peut-être passer par des variables indirectes comme c'est possible sur Wincc. Animation via une variable interne qui contient le nom de la variable.
Ou un équivalent de SetTagPrefix de wincc que tu pourrais faire sous panorama différemment par exemple via la syntaxe %Zone%Cuve1.
1 ) Zone = "Z1"
variable a pour nom "Z1Cuve1"
2 ) Zone = "Z3"
variable a pour nom "Z3Cuve1"
J'imagines qu'il faut faire appel à cette bibliothèque dans ton script pour disposer de ces fonctions.
As-tu essayé avec l'outil applicationexplorer de retrouver le nom de l'objet qui t’intéresses et sa racine?
Après je ne connais ton but final.
Tu peux peut-être procéder différemment.
Si c'est réaffecter les variables liées à ces objets, tu peux peut-être passer par des variables indirectes comme c'est possible sur Wincc. Animation via une variable interne qui contient le nom de la variable.
Ou un équivalent de SetTagPrefix de wincc que tu pourrais faire sous panorama différemment par exemple via la syntaxe %Zone%Cuve1.
1 ) Zone = "Z1"
variable a pour nom "Z1Cuve1"
2 ) Zone = "Z3"
variable a pour nom "Z3Cuve1"
Re: [Panorama] Accès aux élements graphiques d'une vue par script
Encore merci pour ton temps passés à répondre.
Après obtention d'infos complémentaires :
- Il n'est pas possible d'utiliser PERSIST en mode RunTime. risque de conflit avec le fonctionnement de Panorama
- il n'est clairement pas possible par script d'accéder aux propriétés graphiques d'un élement graphique sur la vue en runtime (comme on peut le faire dans d'autres SCADA) : il faut faire autrement !
Après obtention d'infos complémentaires :
- Il n'est pas possible d'utiliser PERSIST en mode RunTime. risque de conflit avec le fonctionnement de Panorama
- il n'est clairement pas possible par script d'accéder aux propriétés graphiques d'un élement graphique sur la vue en runtime (comme on peut le faire dans d'autres SCADA) : il faut faire autrement !

