Sie können eine Benutzereingabe für eine Visualisierung konfigurieren, die bewirkt, dass eine referenzierte Visualisierung als Dialog geöffnet wird. Ein Benutzer klickt zum Beispiel auf eine Schaltfläche, woraufhin sich ein Dialog öffnet, der zur Eingabe von Werten auffordert. Ein Dialog wird verwendet, um Benutzereingaben zu sammeln, und wenn er modal ist, kann er dazu führen, dass Eingaben außerhalb des Dialogs blockiert werden.
Nur Visualisierungen mit dem Visualisierungstyp „Dialog“ können als Dialog geöffnet werden. Der Visualisierungstyp wird im Dialog „Eigenschaften“ eines Visualisierungsobjekts konfiguriert.
Grundlegendes Verfahren:
Erfordernis: Das Projekt enthält eine Hauptvisualisierung und einen Dialog.
-
Konfigurieren Sie eine Benutzereingabe für die Hauptvisualisierung mit der Aktion „OpenDialog“ für den Dialog.
Das Öffnen des Dialogs wird konfiguriert.
-
Konfigurieren Sie eine Benutzereingabe für ein Element des Dialogs mit der Aktion „CloseDialog“.
Hinweis: Bei nicht-modalen Dialogen können Sie die Benutzereingabe zum Schließen auch außerhalb des Dialogs konfigurieren.
Das Schließen des Dialogs wird konfiguriert.
Sie können auch Dialoge aus der Bibliothek anstelle von selbst erstellten Dialogen
verwenden. Wenn zum Beispiel die Bibliothek VisuDialogs
in das Projekt integriert ist, können Sie die darin enthaltenen Dialoge VisuDialogs.Login
oder VisuDialogs.FileOpenSave
verwenden.
Konfigurieren eines Visualisierungsobjekts als Dialog
-
Markieren Sie das Objekt in der Ansicht „Geräte“, öffnen Sie das Kontextmenü und wählen Sie den Befehl „Eigenschaften“.
-
Wählen Sie die Registerkarte „Visualisierung“.
-
Aktivieren Sie die Option „Dialog“ und schließen Sie den Dialog mit „OK“.
Die Visualisierung hat den Visualisierungstyp „Dialog“ und kann als solche aufgerufen werden.
Einen Dialogaufruf konfigurieren
Beim Aufruf eines Dialogs klickt der Benutzer normalerweise auf eine Schaltfläche, woraufhin sich ein Dialog öffnet, der zur Eingabe auffordert.
Im folgenden Beispiel ermöglicht ein Dialog, der einen Kalender darstellt, die Eingabe eines Datums.
Erfordernis: Das Projekt enthält die Visualisierungen visMain
und dlgCalender
.
-
Setzen Sie die Visualisierungsart von
dlgCalender
auf Dialog. -
Ziehen Sie ein Rechteck in die Visualisierung
visMain
. -
Konfigurieren Sie die Eigenschaft „Texte Text“ mit dem Text
Due Date: %t[yyyy-MM-dd]
.Konfigurieren Sie die Eigenschaft „Textvariablen Textvariable“ mit
PLC_PRG.dateDue
. -
Ziehen Sie eine Schaltfläche in die Visualisierung.
-
Konfigurieren Sie die Eigenschaft „Texte Text“ mit dem Text
Open dialog
.Konfigurieren Sie die Eigenschaft „Eingabekonfiguration OnMouseClick“ für die Aktion „Dialog öffnen“ mit
dlgCalender
.Die Benutzereingabe für das Öffnen des Dialogs wird konfiguriert.
-
Doppelklicken Sie auf den Dialog
dlgCalender
. -
Ziehen Sie das Element „Date picker“ in den Visualisierungseditor.
-
Konfigurieren Sie die Eigenschaft „Texte Text“ mit
Due Date: %t[yyyy-MM-dd]
.Konfigurieren Sie die Eigenschaft „Variable“ mit
PLC_PRG.dateCalender
.Das Element ist konfiguriert.
-
Ziehen Sie eine Schaltfläche in den Visualisierungseditor.
-
Konfigurieren Sie die Eigenschaft „Texte Text“ mit
OK
: -
Konfigurieren Sie die Eigenschaft „Eingabekonfiguration OnMouseClick“für die Aktion „Dialog schließen “mit
dlgCalender, Result: OK
. -
Konfigurieren Sie eine weitere Eigenschaft „Eingabekonfiguration OnMouseClick“ für die Aktion „Ausführen von ST-Code“ mit
PLC_PRG.dateDue := PLC_PRG.dateCalendar;
.Die Benutzereingabe für das Schließen des Dialogs wird konfiguriert.
-
Ziehen Sie eine weitere Schaltfläche in den Visualisierungseditor.
-
Konfigurieren Sie die Eigenschaft „Texte Text“ mit
Cancel
: -
Konfigurieren Sie die Eigenschaft „Eingabekonfiguration OnMouseClick“ für die Aktion „Dialog schließen “mit
dlgCalender, Result: Cancel
. -
Die Benutzereingabe für den Abbruch des Dialogs wird konfiguriert.
-
Kompilieren, laden und starten Sie die Anwendung.
Erklärung der Variablen:
PROGRAM PLC_PRG VAR dateDue : DATE := DATE#2000-01-01; dateCalendar : DATE; END_VAR
Globales Öffnen eines Dialogs
Normalerweise erscheint ein Dialog nur auf der Anzeigevariante, auf der der Benutzer das auslösende Ereignis ausgeführt hat.
Sie können das Öffnen des Dialogs jedoch so konfigurieren, dass der Dialog auf allen aktiven Anzeigevarianten, die im Visualisierungsmanager konfiguriert sind, gleichzeitig erscheint. So kann z.B. eine Eingabeaufforderung auf allen Anzeigevarianten gleichzeitig erscheinen, obwohl ein Benutzer nur auf der Seite CODESYS TargetVisu etwas eingegeben hat.
Wenn ein Benutzer den Dialog auf einer Anzeigevariante CODESYS TargetVisu schließt, wird er auf allen Anzeigevarianten geschlossen.
Sie können einen globalen Dialog mit den Funktionen OpenDialog3
und CloseDialog2
aus der Bibliothek VisuElems
öffnen und schließen.
Implementieren eines Anwendungszugriffs auf einen Dialog
Im Anwendungscode können Sie den Zugriff auf einen Dialog implementieren, der im Dialogmanager verwaltet wird. Der Dialogmanager instanziert und verwaltet automatisch alle Visualisierungen vom Typ „Dialog“. Der Zugriff erfolgt über den internen Visualisierungsmanager.
Implementieren Sie zunächst den Zugriff auf den Dialogmanager, indem Sie die Methode
GetDialogManager()
des internen Visualisierungsmanagers aufrufen. Sie können dann die Methoden des Dialogmanagers
verwenden, um den Programmablauf eines Dialogs zu programmieren.
Im folgenden Beispiel wird eine Schaltfläche so konfiguriert, dass sie beim Anklicken
den vorkonfigurierten Dialog Login
öffnet. Der Benutzer kann in dem Dialog einen Namen und ein Passwort eingeben. Der
Dialog Login
ist in der Bibliothek VisuDialogs
enthalten. Auf die gleiche Weise können Sie auch einen selbst erstellten Dialog aufrufen.
Implementierung eines Anwendungszugriffs auf den Dialog Login
aus der Bibliothek VisuDialogs
:
Erfordernis: Die Bibliothek VisuDialogs
ist in das Projekt integriert.
-
Fügen Sie eine neue Visualisierung
visMain
unter der Anwendung ein.Der Visualisierungseditor wird geöffnet.
-
Ziehen Sie eine Schaltfläche in den Visualisierungseditor.
-
Geben Sie in seiner Eigenschaft „Text“
Login
ein.Die Schaltfläche ist beschriftet.
-
Klicken Sie auf „Konfigurieren “in der Eigenschaft „Eingabekonfiguration OnMouseDown“.
-
Wählen Sie die Eingabeaktion „ST-Code ausführen“ und klicken Sie auf
.
-
Geben Sie im ST-Editor den folgenden Funktionsaufruf ein:
OpenLoginDialog(pClientData);
Die Hauptvisualisierung enthält eine Schaltfläche. Wenn ein Benutzer auf die Schaltfläche klickt, öffnet sich der Dialog
Login
und die FunktionOpenLoginDialog()
wird aufgerufen. -
Klicken Sie auf „Konfigurieren “in der Eigenschaft „Eingabekonfiguration OnDialogClosed“.
-
Wählen Sie die Eingabeaktion „ST-Code ausführen“ und klicken Sie auf
.
-
Geben Sie im ST-Editor den folgenden Funktionsaufruf ein:
OnLoginDialogClosed(pClientData);
Wenn ein Benutzer den Dialog schließt, wird die Funktion
OnLoginDialogClosed()
aufgerufen.
Implementierung der Funktion OpenLoginDialog():
FUNCTION OpenLoginDialog : BOOL VAR_INPUT pClientData : POINTER TO VisuStructClientData; END_VAR VAR dialogMan : IDialogManager; loginDialog : IVisualisationDialog; pLoginInfo : POINTER TO Login_VISU_STRUCT; // Login_VISU_STRUCT contains the parameters defined in the interface of visualization "Login". result : Visu_DialogResult; stTitle : STRING := 'Login ...'; stPasswordLabelText: STRING; stUserLabelText: STRING; stUsername: STRING; END_VAR dialogMan := g_VisuManager.GetDialogManager(); // The DialogManager is provided via the implicitly available VisuManager IF dialogMan <> 0 AND pClientData <> 0 THEN loginDialog := dialogMan.GetDialog('VisuDialogs.Login'); // Dialog to be opened is specified IF loginDialog <> 0 THEN pLoginInfo := dialogMan.GetClientInterface(loginDialog, pClientData); IF pLoginInfo <> 0 THEN // In the following the parameters of the login dialog in the Login_VISU_STRUCT will be read pLoginInfo^.stTitle := stTitle; pLoginInfo^.stPasswordLabelTxt := stPasswordLabelText; pLoginInfo^.stUserLabelTxt := stUserLabelText; dialogMan.OpenDialog(loginDialog, pClientData, TRUE, 0); END_IF END_IF END_IF
OnLoginDialogClosed()
definiert die Reaktion auf das Schließen eines Dialogs.
Implementierung der Funktion OnLoginDialogClosed()
:
FUNCTION OnLoginDialogClosed : BOOL VAR_INPUT pClientData : POINTER TO VisuStructClientData; END_VAR VAR dialogMan : IDialogManager; loginDialog : IVisualisationDialog; pLoginInfo : POINTER TO Login_VISU_STRUCT; result : Visu_DialogResult; stPassword: STRING; stUsername: STRING; END_VAR dialogMan := g_VisuManager.GetDialogManager(); // The DialogManager is provided via the implicitly available VisuManager IF dialogMan <> 0 AND pVisuClient <> 0 THEN loginDialog := dialogMan.GetDialog('VisuDialogs.Login'); // Gets the login dialog IF loginDialog <> 0 THEN result := loginDialog.GetResult(); // Gets the result (OK, Cancel) of the dialog IF result = Visu_DialogResult.OK THEN loginDialog.SetResult(Visu_DialogResult.None); // Reset to default (none) pLoginInfo := dialogMan.GetClientInterface(loginDialog, pVisuClient); // Structure Login_VISU_STRUCT gets read; // In the following the structure parameters can be set IF pLoginInfo <> 0 THEN stPassword := pLoginInfo^.stPasswordpLoginInfo^.stPassword := ''; // Reset the passwword stUsername := pLoginInfo^.stUsername; END_IF ELSIF result = Visu_DialogResult.Cancel THEN loginDialog.SetResult(Visu_DialogResult.None); // React on 'Cancel' ELSE // nothing to do END_IF END_IF END_IF
Siehe auch