È possibile configurare un input utente per una visualizzazione che causa l'apertura di una visualizzazione di riferimento come finestra di dialogo. Ad esempio, l'utente fa clic su un pulsante e si apre una finestra di dialogo che richiede l'immissione di valori. Una finestra di dialogo viene utilizzata per raccogliere gli input dell'utente e, se è modale, può portare al blocco degli input esterni alla finestra.
Solo le visualizzazioni con il tipo di visualizzazione «Dialog» possono essere aperte come dialogo. Il tipo di visualizzazione viene configurato nella finestra di dialogo «Proprietà» di un oggetto di visualizzazione.
Procedura di base:
Requisiti: Il progetto contiene una visualizzazione principale e una finestra di dialogo.
-
Configurare un input utente per la visualizzazione principale con l'azione «OpenDialog» per la finestra di dialogo.
L'apertura della finestra di dialogo è configurata.
-
Configurare un input utente per un elemento della finestra di dialogo con l'azione «CloseDialog».
Suggerimento: nel caso di finestre di dialogo non modali, è possibile configurare l'input dell'utente per la chiusura al di fuori della finestra di dialogo.
La chiusura della finestra di dialogo è configurata.
È anche possibile utilizzare le finestre di dialogo della libreria invece di quelle
create in proprio. Ad esempio, se la libreria VisuDialogs è integrata nel progetto, è possibile utilizzare le finestre di dialogo VisuDialogs.Login o VisuDialogs.FileOpenSave in essa contenute.
Vedi anche
Configurazione di un oggetto di visualizzazione come finestra di dialogo
-
Selezionare l'oggetto nella vista «Dispositivi», aprire il menu contestuale e selezionare il comando «Proprietà».
-
Selezionare la scheda «Visualizzazione».
-
Attivare l'opzione «Dialog» e chiudere la finestra di dialogo con «OK».
La visualizzazione ha il tipo di visualizzazione «Dialog» e può essere chiamata come tale.
Configurazione di una chiamata di dialogo
Quando si richiama una finestra di dialogo, l'utente normalmente fa clic su un pulsante, dopodiché si apre una finestra di dialogo che richiede un input.
Nell'esempio seguente, una finestra di dialogo che rappresenta un calendario consente di inserire una data.
Requisiti: Il progetto contiene le visualizzazioni visMain e dlgCalender.
-
Impostare il tipo di visualizzazione di
dlgCalendersu Dialog. -
Trascinate un rettangolo nella visualizzazione
visMain. -
Configurare la proprietà «Testi Testo» con il testo
Due Date: %t[yyyy-MM-dd].Configurare la proprietà «Variabili di testo Variabile di testo» con
PLC_PRG.dateDue. -
Trascinare un pulsante nella visualizzazione.
-
Configurare la proprietà «Testi Testo» con il testo
Open dialog.Configurare la proprietà «Configurazione degli ingressi OnMouseClick» per l'azione «Aprire la finestra di dialogo» con
dlgCalender.L'input dell'utente per l'apertura della finestra di dialogo è configurato.
-
Fare doppio clic sulla finestra di dialogo
dlgCalender. -
Trascinare l'elemento «Date picker» nell'editor di visualizzazione.
-
Configurare la proprietà «Testi Testo» con
Due Date: %t[yyyy-MM-dd].Configurare la proprietà «Variabile» con
PLC_PRG.dateCalender.L'elemento è configurato.
-
Trascinare un pulsante nell'editor di visualizzazione.
-
Configurare la proprietà «Testi Testo» con
OK: -
Configurare la proprietà «Configurazione degli ingressi OnMouseClick»per l'azione «Close Dialog »con
dlgCalender, Result: OK. -
Configurare un'ulteriore proprietà «Configurazione degli ingressi OnMouseClick» per l'azione «Eseguire il codice ST» con
PLC_PRG.dateDue := PLC_PRG.dateCalendar;.L'input dell'utente per la chiusura della finestra di dialogo è configurato.
-
Trascinare un altro pulsante nell'editor di visualizzazione.
-
Configurare la proprietà «Testi Testo» con
Cancel: -
Configurare la proprietà «Configurazione degli ingressi OnMouseClick» per l'azione «Close Dialog »con
dlgCalender, Result: Cancel. -
L'input dell'utente per la cancellazione della finestra di dialogo è configurato.
-
Compilare, caricare e avviare l'applicazione.
Dichiarazione della variabile:
PROGRAM PLC_PRG
VAR
dateDue : DATE := DATE#2000-01-01;
dateCalendar : DATE;
END_VAR
Implementare l'accesso di un'applicazione a una finestra di dialogo
Nel codice dell'applicazione è possibile implementare l'accesso a una finestra di dialogo gestita nel gestore delle finestre di dialogo. Il gestore delle finestre di dialogo istanzia e gestisce automaticamente tutte le visualizzazioni del tipo «Dialog». L'accesso avviene tramite il gestore di visualizzazione interno.
Per prima cosa, implementare l'accesso al gestore delle finestre di dialogo richiamando
il metodo GetDialogManager() del gestore interno della visualizzazione. È quindi possibile utilizzare i metodi
del gestore delle finestre di dialogo per programmare la sequenza di programma di
una finestra di dialogo.
Nell'esempio seguente un pulsante è configurato in modo da aprire la finestra di dialogo
preconfigurata Login quando vi si fa clic. L'utente può inserire un nome e una password nella finestra
di dialogo. La finestra di dialogo Login è contenuta nella libreria VisuDialogs. Allo stesso modo è possibile richiamare una finestra di dialogo autoprodotta.
Implementazione di un accesso applicativo alla finestra di dialogo Login dalla libreria VisuDialogs:
Requisiti: La biblioteca VisuDialogs è integrata nel progetto.
-
Inserire una nuova visualizzazione
visMainsotto l'applicazione.Si apre l'editor di visualizzazione.
-
Trascinare un pulsante nell'editor di visualizzazione.
-
Inserire la proprietà «Text»
Login.Il pulsante è contrassegnato dall'etichetta.
-
Fare clic su «Configurare »nella proprietà «Configurazione degli ingressi OnMouseDown».
-
Selezionate l'azione di input «Execute ST-Code» e fate clic su
. -
Inserire la seguente chiamata di funzione nell'editor ST:
OpenLoginDialog(pClientData);La visualizzazione principale contiene un pulsante. Se l'utente fa clic sul pulsante, si apre la finestra di dialogo
Logine viene richiamata la funzioneOpenLoginDialog(). -
Fare clic su «Configurare »nella proprietà «Configurazione degli ingressi OnDialogClosed».
-
Selezionate l'azione di input «Execute ST-Code» e fate clic su
. -
Inserire la seguente chiamata di funzione nell'editor ST:
OnLoginDialogClosed(pClientData);
Implementazione della funzione 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() definisce la reazione alla chiusura di una finestra di dialogo.
Implementazione della funzione 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
Vedi anche

