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.
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.
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.
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.
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.
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
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.