1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Sax Basic Kentnisse gesucht

Dieses Thema im Forum "Visual Basic, Visual Basic for Applications (VBA) " wurde erstellt von ITZler, 6. März 2017.

  1. ITZler

    ITZler New Member

    Hallo,

    ich bräuchte Hilfe beim Basic Dialekt "Sax Basic". Leider sind die Hilfen (in der Software und im Netz) sehr begrenzt was diese Sprache angeht.
    Ich muss eine kleine Oberfläche in der Software "SpecWinPro" programmieren, um ein externes Netzgerät zu steuern. Die Verbindung konnte ich zum Glück herstellen, sodass ich auf das Netzgerät zugreifen kann. Doch macht mir die grundsätzliche Programmierung mit Sax Basic Probleme.
    Ich möchte jetzt einen Spannungswert in ein Textfeld eingeben und wenn ich auf einen Button drücke, soll dieser Wert an das Netzgerät gesendet werden.

    Definiton des Dialog-Fensters:

    Code:
    Begin Dialog UserDialog 680,392,.DialogFunc ' %GRID:10,7,1,1
            PushButton 20,14,160,28,"Ausgang An",.AusgangAn
            PushButton 210,14,150,28,"Ausgang Aus",.AusgangAus
            PushButton 410,14,160,28,"Abbrechen",.Abbrechen
    
            GroupBox 210,70,170,91,"Parameter",.Parameter
            Text 220,91,80,14,"Strom",.Stromtxt
            Text 220,126,70,14,"Spannung",.Spannungtxt
            TextBox 290,91,80,21,.TextBox1
            TextBox 290,126,80,21,.TextBox2
            PushButton 410,91,120,21,"Strom",.Strom
            PushButton 410,126,120,21,"Spannung",.Spannung
    
        End Dialog
        Dim dlg As UserDialog
        Dialog dlg
        spannwert = dlg.TextBox2$
        Debug.Print spannwert
    Über einen weiteren Funktionsaufruf sende ich den Wert an das Gerät.
    Code:
    ElseIf DlgItem$ = "Spannung" Then
               Call CheckError(SetStrProp(pidSendCommand, ":VOLT" &Space(1) & CStr(spannwert) & "V"))
    Das Problem aktuell:
    Der Wert den man in die TextBox 2 eingibt, wird erst nach dem schließen des Dialogfensters in die Variable "spannwert" übernommen, das heißt ich muss erst den Wert eingeben, dann das Fenster schließen und neu öffnen, um dann über den Button den Wert an das Netzgerät zusenden.

    Ich bekomme es nicht hin, dass innerhalb des Dialogfensters der Wert in die Variable übergeben wird. und wenn ich den befehl "hoch ziehe in den "Dialog-Befehl", muss ich die Variable erst neu definieren, obwohl ich sie als globale Variable zuvor definiert habe. Doch dann ist diese Variable nur in dem "UserDialog" bekannt.

    Kennt sich jemand aus, wie man korrekt mit dem "UserDialog" umgeht?
  2. Mat

    Mat Active Member c-b Experte

    Keine Ahnung von Sax Basic.. brauchst du Spannwert als Variable? Also machst du noch was damit? Wenn nicht, dann probier mal das hier:

    Code:
    ElseIf DlgItem$ = "Spannung" Then
               Call CheckError(SetStrProp(pidSendCommand, ":VOLT" &Space(1) & CStr(dlg.TextBox2$) & "V"))
    Ist ein Direktaufruf der Dialog-Variable. TextBox2 ist übrigens ein wirklich schöner und aussagekräftiger Name. :D
  3. ITZler

    ITZler New Member

    Am Ende bräuchte ich den Wert der Variable noch für den Messbericht, der automatisch mit den eingestellten Parametern gefüllt werden soll.
    Ich habe bereits versucht die Werte der TextBox direkt zu übergeben, doch auch wie beim Vorschlag oben kommt die Fehlermeldung ("Keine Objektreferenz") und ohne dem "dlg" davor heißt die Fehlermeldung "Nicht in einem With-Block". .. bin zwar kein Programmierprofi, aber das heißt für mich, dass die Werte der TextBox nur im gleichen Funktionsblock verfügbar sind, wo sie deklariert worden sind. Deshalb habe ich auch den Weg mit der globalen Variable ausprobiert. Das klappt ja im Prinzip auch, nur wird der Wert der TextBox leider "zuspät" (nach dem UserDialog) übergeben.
  4. Mat

    Mat Active Member c-b Experte

    Dann versuche ich es mal weiter, bis sich jemand findet, der das Sax kennt

    Arbeitet dieser Dialekt mit Form-Events? Es scheint ja zumindest ein Event an "PushButton Spannung" gebunden zu sein. Und bei diesem Klick-Event nehme ich mal an, wird der Button als DlgItem$ übergeben?

    1. Könntest versuchen, den Parent von DlgItem anzusprechen (den Dialog selbst) und von da aus auf seine Felder zugreifen, falls das möglich ist
    2. Oder du verknüpftst eine Änderung des Textfeldes "TextBox2" mit einer Aktion..in diesem Fall würde die Aktion deine globale Variable verändern, was ja soweit funktioniert hatte.
    ITZler gefällt das.
  5. ITZler

    ITZler New Member

    Herzlichen Dank!
    Obwohl ich diesen Weg bereits probiert habe... bin ich dem nochmal nach gegangen und eine andere Formulierung getestet. Jetzt geht es!

    Code:
    ElseIf DlgItem$ = "Spannung" Then
                  Call CheckError(SetStrProp(pidSendCommand, ":VOLT" &Space(1) & CStr((DlgText("Spannwert")) & "V"))
    Damit geht es dann... top! :)

    Einen kleinen Schritt weiter zum Endprogramm ;)
    Mat gefällt das.
  6. ITZler

    ITZler New Member

    Evlt jemand ne Idee, wie man den Schließen "X-Button" des UserDialogs anspricht?
    Aktuell kann ich nur über einen extra programmierten "Abbrechen"-Button das Fenster schließen, jedoch nicht über den üblichen "X-Button".
    Leider bringt mir das "FormClosing" aus VBA nichts.
    Gibts für den Button evtl. weitere Bezeichnungen?