PDA

View Full Version : Bildumschaltung



massinger
28th February 2012, 11:08
Hallo,

ich wollte mal wieder was neues ausprobieren und komme gerade irgendwie nicht weiter.

Und zwar gehe ich meine Bilder in einer Schleife durch (in der Runtime) und suche mir für jedes Bild die passende Bildumschaltfunktion heraus welche ich in der Runtime ausführen möchte.

Dadurch sollte ich jedes Bild einmal öffnen können, was mir ein auslesen der Elemente erlaubt.

Aber wenn ich die passende Funktionen mit .Start anspreche passiert nichts in der Runtime.

Muss eventuell ein Update / Refresh danach ausgeführt werden, damit die Bildumschaltung funktioniert ?


'Bilderschleife
For i = 0 To Me.DynPictures.Count - 1

'Bild offen ?
If Me.DynPictures.Item(i).Online = False Then

'Funktionsschleife
For Func = 0 To Me.RtFunctions.Count - 1

'Parameter inkl. Bildnamen herauslesen
FuncPara = Me.RtFunctions.Item(Func).ParamString

'Parameter beinhaltet Bildnamen, ist keine SUBSTI Funktion und vom TYP eine Bildumschaltung
If FuncPara.IndexOf(Me.DynPictures.Item(i).Name) >= 0 And FuncPara.IndexOf("SUBSTI") < 0 And Me.RtFunctions.Item(Func).Type = 3 Then

'Bildumschaltung durchführen
Me.RtFunctions.Item(Func).Start()

End If

Next

End If

Next


Vielen Dank im Voraus.

Mit freundlichen Grüßen

Massinger

markclemens
29th February 2012, 05:25
Hallo Massinger,

Darf ich fragen, was mit diesem Makro genau beabsichtigt wird? Warum sollen alle Elemente, aller Bilder in der Runtime durchlaufen werden?

Das ist nicht unbedingt effizient. Möglicherweise gibt es andere Möglichkeite das zu machen, was eigentlich gewünscht wird.

VSTA ist in diesem Hinsicht etwas unterschiedlich zu VBA. Wenn man genau aufpasst bei der Ausführung dieses Makros, wird man sehen, dass nach Ablauf des Makros, alle Funktionen sequenziell ausgeführt werden.

Mfg
Mark

massinger
29th February 2012, 13:30
Hallo,

den Effekt nach dem Ablaufen des Makros hatte ich gestern selber erleben dürfen :).

Da ich ja leider nicht auf die Objektliste in der Runtime zugreifen kann (Bild nicht geöffnet), wollte ich jedes Bild einmal öffnen und auf gewisse Elemente durchsuchen. Sind diese vorhanden, so sollte das Script den Elementnamen und den Namen des Bildes in eine Oracle Datenbank schreiben.

Dadurch ist es später möglich eine Suchfunktion in der Runtime zu nutzen, die die Daten aus der Datenbank ausliest und mir das exakte Bild öffnet und zum Element springt.

Aber anscheinend muss ich die Funktion in VBA realisieren, die die Bilder durchsucht und die nüzlichen Informationen in der Datenbank abspeichert.

Zenon Version im Einsatz: 6.51

Mit freundlichen Grüßen

Massinger

markclemens
1st March 2012, 02:19
Hallo Massinger,

Wenn diese Funktion zum Schreiben der Elemente in der Datenbank nur einmal ausgeführt wird, und nicht im Echtbetrieb der Runtime auf der Anlage gemacht wird (zB. mit Treiber auf Simulation, auf einen seperaten Rechner) könnte man versuchen für dieses eine Mal das Öffnen der Bilder innerhalb der Schleife erzwingen, allerdings ohne Garantie dass es nicht sonst wo anders zu Probleme kommt, durch rekursive Events bei Bilder / ungültige Referenzen.

Die Funktion in VB.NET zum Schreiben in der Datenbank ist ja vielleicht schon fertig und in .NET ist es prinzipiell leichter realisierbar als in VBA.:)

Wenn die Referenz "System.Windows.Forms" zum ProjectAddin hinzugefügt ist, kann mittels dem Aufruf: "System.Windows.Forms.Application.DoEvents()" nach dem Starten vom Bild im Makro, in der Schleife, das Bild geöffnet werden.

Dieser Aufruf sollte allerdings unter keinen Umstände im normalen Betrieb verwendet werden, da es die Stabilität der Runtime gefährden kann.

Mfg
Mark

massinger
1st March 2012, 15:48
Vielen Dank für den Tipp mit DoEvents, hätte ich eigentlich auch drauf kommen können.

Wieder mal zu kompliziert gedacht :)

Das Macro funktioniert soweit einwandfrei.

Mit freundlichen Grüßen

Massinger