INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.




Unsere Partner:

DIAdem-Forum.de Partner

DIAdem-Forum.de Partner






Stellenangebote:
Big Data Scientist / Analyst (m/w) Messdatenmanagement
Ingolstadt

Ingenieur (m/w) Qualitätsmanagement Datenanalyse
Aurich

Testingenieur (m/w) im Bereich Versuch
Eching bei München

Softwareentwickler (m/w) Java Entwicklung
Gaimersheim

Entwicklungsingenieur Gelenk- und Seitenwellen (m/w)
Affalterbach





.
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

Parameterübergabe per Objekt vom Script an Dialog und zurück
03.08.2013, 19:13,
#1
DIAdem-Version: 2015
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
Parameterübergabe per Objekt vom Script an Dialog und zurück

Guten Abend in die Runde,

und ehe mich einer erschlägt - ich habe das Tutorial von CarpeDIAdem und auch alle relevanten Beispiele und Hilfetexte aus DIAdem gelesen.

Ich versuche gerade, mich in DIAdemScript einzuarbeiten und habe mir folgendes Problem gestellt: Ich möchte in einem Dialog einen Parameterwert eingeben, der dann z. B. für eine DAC-Einstellung benutzt wird. Außerdem soll im Hauptscript dieser Parameter initialisiert werden, und dieser Default-Wert soll im Dialog schon zu sehen sein. Und genau das funktioniert nicht!

Meine Vorgehensweise:
1. Im Unterprogramm deklariere ich die Klasse 'cSUDParameter' und dimensioniere die Variable 'dSpeicherrate'.

2. Im Hauptprogramm deklariere ich das Objekt 'oSUDParameter' und erzeuge ein Objekt der Klasse. Die (einzige) Variable dieses Objekts, also 'oSUDParameter.dSpeicherrate' initialisiere ich mit 80.

3. Zur Kontrolle zeige ich mir mit MsgBoxDisp (Default Speicherrate) diesen Wert an - funktioniert.

4. Ich Mit SUDDlgShow rufe ich den Dialog auf und übergebe als Parameter 'oSUDParameter'.

5. Im Dialogeditor ziehe ich ein Textfeld 'tSpeicherrate', eine EditBox 'ebSpeicherrate' sowie Default-Buttons OK und Abbrechen auf die grafische Oberfläche.

6. Im SUD-Script deklariere ich als Übergabeparameter das Objekt 'oSUD_Parameter'.

7. Wenn im Dialog das Ereignis EventInitialize auftritt, wird dem Übergabeobjekt 'oSUD_Parameter' mittels 'Dialog.GetArgument' das Objekt 'oSUDParameter' aus dem Hauptprogramm übergeben.

8. Zur Kontrolle zeige ich mir mit MsgBoxDisp (Übergabe Default) diesen Wert an - funktioniert NICHT.

9. Danach sollte 'ebSpeicherrate.Text' mit 'str(oSUD_Parameter.dSpeicherrate)' den Defaultwert übernehmen und in der EditBox anzeigen - kann nicht funktionieren, da die Übernahme aus dem Hauptprogramm nicht funktioniert hat (vgl. Punkt 7 und 8). An dieser Stelle erscheint eine Fehlermeldung, die nach einem Objekt fragt Huh . Sorry, es gelingt mir nicht, hier einen Screenshot einzufügen.

10. Anschließend sollte dann der Defaultwert in der EditBox überschrieben werden und an das Hauptprogramm zurückgegeben und mit MsgBoxDisp (Neue Speicherrate) angezeigt werden - das funktioniert, wenn ich Zeilen 17 (= Anzeige Übergabe Default) und 19 (Text-Eigenschaft der EditBox soll Übergabewert übernehmen) im SUD-Script auskommentiere.

Wo liegt der Hund begraben??

Danke, Eduard



PS: Die einfachen Hochkommas sollen nur Hervorhebungen sein, da anderes Markieren (fett) nicht klappt.



Angehängte Dateien
.vbs   Parameter_Hauptprogramm.VBS (Größe: 1,68 KB / Downloads: 295)
.vbs   Parameter_Unterprogramm.VBS (Größe: 1.016 Bytes / Downloads: 287)
.sud   Parameter_Dialog.SUD (Größe: 6,4 KB / Downloads: 304)
Antworten
06.08.2013, 16:30,
#2
DIAdem-Version: 2014SP1, 2015SP2, 2017SP1 und DIAdem 2018 / dabei seit DIA/DAGO 2
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 1995
RE: Parameterübergabe per Objekt vom Script an Dialog und zurück

Hallo Eduard,

bei mir funktioniert deine Lösung.
Allerdings wird der Defaultwert im Dialog erst angezeigt nachdem dieser Wert beim Initialisieren des Textfeldes übergeben wird:

Sub ebSpeicherrate_EventInitialize(ByRef This) 'Erzeugter Event-Handler
This.Text = oSUD_Parameter.dSpeicherrate
End Sub

Antworten
06.08.2013, 20:07,
#3
DIAdem-Version: 2015
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
RE: Parameterübergabe per Objekt vom Script an Dialog und zurück

Guten Abend Voyager,

erst mal lieben Dank für Deine Antwort - 'Initialisieren des Textfelds' hat bei mir den Knoten durchschlagen.

Allerdings:

1. Ich nehme mal an, dass die Zeile 'Set oSUD_Parameter = Dialog.GetArgument' immer noch an erster Stelle in der Sub mit EventInitialize vorhanden sein muss.

2. Deine zusätzliche Zeile mit This.Text = ... führt bei mir zu einer Fehlermeldung: Das Objekt unterstützt diese Eigenschaft oder Methode nicht: 'This.Text'.

3. Wenn ich aber 'This.Text' durch 'ebSpeicherrate.Text' ersetze, ist alles ok. Ich nehme mal an, dass dieses 'This' automatisch ein Synonym für den Namen des gerade aktuellen Objekts (in diesem Fall = ebSpeicherrate) ist, das immer benutzt wird, wenn ein Ereignis zu einem Objekt aufgerufen wird. Stimmt das so?

4. Kann ich denn die Eigenschaft 'ebSpeicherrate.Text' nur innerhalb der Sub verwenden, in der sie initialisiert wurde, also nur in 'Sub Dialog_EventInitialize(ByRef This)'? Denn wenn ich 'MsgBoxDisp("Übergabe Default " & ebSpeicherrate.Text)' aus der Sub rausnehme, sehe ich bei Ablauf nur 'Übergabe Default', aber nicht der Wert von 'ebSpeicherrate.Text'.

Die funktionierende SUD habe ich noch mal angehängt.

Danke für die Nachhilfe, Eduard



Angehängte Dateien
.sud   Parameter_ok_Dialog.SUD (Größe: 6,37 KB / Downloads: 301)
Antworten
07.08.2013, 07:08,
#4
DIAdem-Version: 2014SP1, 2015SP2, 2017SP1 und DIAdem 2018 / dabei seit DIA/DAGO 2
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 1995
RE: Parameterübergabe per Objekt vom Script an Dialog und zurück

Hallo Eduard,

zu 1. Die Methode "GetArgument" des Dialogs muss immer bei der Initialisierung des Dialogs aufgerufen werden.
zu 2. Üblicherweise wird die Vorbelegung einer Objekteigenschaft bei der Initialisierung des jeweiligen Objekts gemacht (hier das Textfeld).
da du die Zuweisung This.Text = ... bei der Initialisierung des Dialogs gemacht hast, geht das schief weil der Dialog (innerhalb der Sub mit This referenziert) keine Eigenschaft Text hat.
zu 3. This wird innerhalb der jeweiligen sub als Alias für das Objekt verwendet. Das spart Schreibarbeit und lässt das Kopieren gleichartiger Funktionen zwischen Objekten zu, ohne auf den Objektnamen aufzupassen.
zu 4. Wo ist bei dir "Aussen". In Dialogen gibt es nur subs, die durch Ereignisse aufgerufen werden. Der Zugriff auf Objekteigenschaften und Methoden is natürlich auch in anderen Eventhandlern (Subs) möglich. Allerdings dann mit dem Objektnamen (nicht This).
Ich habe da mal einen Button eingefügt mit einer MsgBox beim Event Klick.

Gruß
Voyager



Angehängte Dateien
.sud   Parameter_ok_Dialog.SUD (Größe: 7,45 KB / Downloads: 250)
Antworten
08.08.2013, 21:41,
#5
DIAdem-Version: 2015
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: -
RE: Parameterübergabe per Objekt vom Script an Dialog und zurück

Hallo Voyager,

durch Deine Ausführungen habe ich jetzt doch ein grundlegenderes Verständnis, was den Umgang mit Objekten betrifft. Natürlich muss ich das Ganze noch verfestigen.

Ich war ursprünglich der Meinung, dass mit 'Set oSUD_Parameter = Dialog.GetArgument' in der Sub 'Dialog_EventInitialize' ALLE Methoden und Eigenschaften des Klassenobjekts 'cSUDParameter' aus dem Übergabeparameter bei 'SUDDlgShow' im aufrufenden (Haupt)Script dann auch im gesamten SUD-Script unter demselben Namen bekannt sind. Aber offenbar müssen die einzelnen Eigenschaften (hier im Beispiel nur die einzige, nämlich 'oSUDParameter.dSpeicherrate') im Dialog erst den Eigenschaften der einzelnen Dialogobjekte zu gewiesen werden (mit EventInitialize). STIMMT DAS SO?

Deine Frage, was ich mit "Außen" meinte, ist damit eigentlich beantwortet: 'This.xxx' kann ich nur innerhalb einer Sub verwenden, ansonsten muss ich den Namen benutzen.

Zusatzfrage: Du sagst, dass es innerhalb eines Dialogs ‚ NUR Subs gibt. Kann ich in einem Dialogscript keine anderen Anweisungen einfügen (z. B. 'MsgBoxDisp')? Falls doch möglich, spielt die Reihenfolge der Textzeilen im Script dann eine Rolle? Kann ich im SUD-Script auch Kontrollstrukturen verwenden (If, For, Do oder While), wobei ich da noch keine Vorstellung habe, wozu es gut sein sollte – reine Neugier, bin ja erst am Anfang.

Gruß, Eduard

Antworten


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Dialog Editor EditBox Komma-Problem MBT 2 2.541 13.12.2017, 14:51
Letzter Beitrag: MBT
  Script abbrechen: "Not Aus" chaosyeti 0 3.702 12.01.2017, 14:25
Letzter Beitrag: chaosyeti
  Script Manager Dialog erstellen bjoernj 0 4.183 11.09.2015, 13:13
Letzter Beitrag: bjoernj
  2D-Axis mit n-Systemen im Script generieren ThomasGull 0 5.792 07.05.2015, 18:39
Letzter Beitrag: ThomasGull
  Tastendruck über Script erkennen MichiR 1 6.335 07.05.2015, 13:33
Letzter Beitrag: MichiR
  Syntax Formel in Script derschotte 2 8.753 26.03.2015, 08:42
Letzter Beitrag: derschotte
  Mit Flags markierte Bereiche per Script löschen Eber 1 6.742 05.02.2015, 08:07
Letzter Beitrag: grisu
  Parameterübergabe Dialogeditor nikolai.kruckenberg 2 8.114 22.05.2014, 12:12
Letzter Beitrag: nikolai.kruckenberg
  Bufferüberlauf nur bei automatisch gestarteter Messung mittels Script Rookie86 0 4.610 21.05.2014, 10:34
Letzter Beitrag: Rookie86
  Wie eine checkbox aus SUD ins Script einbinden? Monnem89 2 9.768 12.05.2014, 07:36
Letzter Beitrag: Monnem89

Gehe zu: