Konsolenbenutzerschnittstelle erstellen

Basis der Konsolenbenutzerschnittstelle ist die Anweisung openUI. Sie definiert, welche Formulare und Felder in der Schnittstelle angezeigt werden, an welche Variablen diese Formulare und Felder gebunden sind und welche Aktionen stattfinden, wenn der Benutzer in der Schnittstelle Tasks ausführt.

Fenster öffnen und füllen

Das einfachste Verfahren zur Erstellung einer Konsolenbenutzerschnittstelle besteht darin, eine Fenstervariable zu erstellen, die ein Benutzerschnittstellenfenster darstellt, und das Formular im Fenster mittels einer Funktion wie beispielsweise consoleLib.displayForm() zu öffnen.
program basicConsole type BasicProgram 
    
    function main()
        myWindow Window {name = "My Window", 
            position = [1,1]};
        myConsoleRec CustomerConsoleRecord{name = "myForm"};
        
        ConsoleLib.openWindow(myWindow);
        ConsoleLib.displayForm(myConsoleRec);
        
    end
    
end


Record CustomerConsoleRecord type consoleForm 
                        {formSize = [10,40],name = "Customer Record"}
  *        consoleField {position = [1,4], 
                         value = "Welcome to my console."};
  ID       consoleField {fieldLen = 5, position = [3,4], 
                         name="customer_id"};
  Fname    consoleField {fieldLen = 20, position = [4,4], 
                         name="first_name"};
  Lname    consoleField {fieldLen = 20, position = [5,4], 
                         name="last_name"};
  PhoneNum consoleField {fieldLen = 20, position = [6,4], 
                         name="phone"};
end

Diese Schnittstelle ist jedoch nicht sehr praktikabel, weil der Benutzer überhaupt nicht in der Lage ist, mit dem Formular oder dem Fenster zu interagieren. Da dieses Formular keine Interaktion ermöglicht, wird das Fenster geschlossen, sobald es geöffnet wird. Sie müssen EGL-Variablen mit der Anweisung openUI an die Felder binden, damit die Felder in der Schnittstelle aussagekräftig sind und das Fenster geöffnet bleibt, während der Benutzer mit der Schnittstelle arbeitet.

Daten an Felder im Fenster binden

Wie viele andere Typen von Anwendungen mit Benutzerschnittstellen trennen auch Anwendungen für die Konsolenbenutzerschnittstelle die Schnittstelle von den Daten, die über die Schnittstelle verwaltet werden. Beim Erstellen einer Konsolenbenutzerschnittstelle in EGL erstellen Sie die Schnittstelle mit Abschnitten wie Konsolformularen (ConsoleForm) und verwenden anschließend die Anweisung openUI, um diese Abschnitte mit Variablen in Ihrem Programm zu verknüpfen. Dies wird auch als Binden bezeichnet. Wenn anschließend ein Benutzer der Schnittstelle einen Wert im Konsolformular ändert, ändert sich auch der Wert der Variablen entsprechend. Wird der Wert der Variablen durch den Code geändert, ändert sich analog auch der Wert im Formular entsprechend.

Das folgende Beispiel führt das vorherige Beispiel fort. Es werden vier Variablen an vier bearbeitbare Felder im Konsolformular gebunden:
program basicConsole type BasicProgram 
    
    function main()
        myWindow Window {name = "My Window", position = [1,1]};
        myConsoleRec CustomerConsoleRecord{name = "myForm"};
        
        ConsoleLib.openWindow(myWindow);
        ConsoleLib.displayForm(myConsoleRec);
        
        customer_id int;
        first_name, last_name, phone char(30);

        openUI myConsoleRec
            bind customer_id, first_name, last_name, phone
        end
        
    end
    
end


Record CustomerConsoleRecord type consoleForm 
                        {formSize = [10,40],name = "Customer Record"}
  *        consoleField {position = [1,4], 
                         value = "Welcome to my console."};
  ID       consoleField {fieldLen = 5, position = [3,4], 
                         name="customer_id"};
  Fname    consoleField {fieldLen = 20, position = [4,4], 
                         name="first_name"};
  Lname    consoleField {fieldLen = 20, position = [5,4], 
                         name="last_name"};
  PhoneNum consoleField {fieldLen = 20, position = [6,4], 
                         name="phone"};
end

Wenn Sie dieses Programm jetzt ausführen, bleibt das Fenster geöffnet. Der Benutzer kann somit per Tabulatortaste in den Feldern navigieren und Werte eingeben. Die Verbindungzeile, die mit openUI myConsoleRec bind customer_id... beginnt, gibt an, dass die Felder im Formular myConsoleRec an die Variablen gebunden sind, die in der Klausel bind aufgelistet sind.

Auf Ereignisse im Fenster reagieren

Damit die Konsolenbenutzerschnittstelle auf Aktionen reagieren kann, die der Benutzer im Formular ausführt, müssen Sie Ereignishandler definieren, die EGL mitteilen, wie die Aktion beantwortet werden soll. Ein Ereignishandler enthält EGL-Anweisungen wie beispielsweise eine Funktion. Er beginnt jedoch mit der Beschreibung eines Ereignisses (z. B. Drücken einer Taste oder Eingabe eines Wertes in einem Feld). Wenn der Benutzer eine Taste drückt oder einen Wert in einem Feld eingibt, wird der Ereignishandler aufgerufen, der dieser Aktion zugeordnet ist.

Im folgenden Beispiel wird das vorherige Beispiel durch einen Ereignishandler ergänzt. Dieser Ereignishandler wird aufgerufen, wenn der Benutzer einen Wert im Feld customer_id eingibt und den Cursor aus dem Feld herausbewegt.
program basicConsole type BasicProgram 
    
    function main()
        myWindow Window {name = "My Window", position = [1,1]};
        myConsoleRec CustomerConsoleRecord{name = "myForm"};
        
        ConsoleLib.openWindow(myWindow);
        ConsoleLib.displayForm(myConsoleRec);
        
        customer_id int;
        first_name, last_name, phone char(30);

        openUI myConsoleRec
            bind customer_id, first_name, last_name, phone
            onEvent(AFTER_FIELD:"customer_id")
                if (customer_id == 3)
                    first_name = "John";
                end
        end
        
    end
    
end


Record CustomerConsoleRecord type consoleForm 
                        {formSize = [10,40],name = "Customer Record"}
  *        consoleField {position = [1,4], 
                         value = "Welcome to my console."};
  ID       consoleField {fieldLen = 5, position = [3,4], 
                         name="customer_id"};
  Fname    consoleField {fieldLen = 20, position = [4,4], 
                         name="first_name"};
  Lname    consoleField {fieldLen = 20, position = [5,4], 
                         name="last_name"};
  PhoneNum consoleField {fieldLen = 20, position = [6,4], 
                         name="phone"};
end
Um eine Reaktion auf die Auswahl einer Option in einem Menü durch den Benutzer zu definieren, verwenden Sie den Ereignishandler MENU_ACTION:
program menuTest type BasicProgram 
    
    function main()
        openUI
        new Menu {labelText = "Choose an option", 
            menuItems = [
            new MenuItem{name = "One",labelText = "Option One"},
            new MenuItem{name = "Two",labelText = "Option Two"},
            new MenuItem{name = "Exit",labelText = "Exit"}
        ]}
        
        onEvent(MENU_ACTION:("Exit"))
            exit openUI;
        onEvent(MENU_ACTION:("One"))
            consolelib.displayAtLine("You chose option One", 5);
        onEvent(MENU_ACTION:("Two"))
            consolelib.displayAtLine("You chose option Two", 5);
        end
        
    end
    
end

In diesem Beispiel gibt das Fenster eine Nachricht zurück, wenn der Benutzer eine der ersten beiden Optionen auswählt, und es wird geschlossen, wenn der Benutzer die Menüoption 'Exit' (= Beenden) auswählt.

Informationen zu anderen Typen von Ereignishandlern finden Sie unter openUI.


Feedback