Richiamo di una finestra di dialogo in una visualizzazionePermalink

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

  1. Configurare un input utente per la visualizzazione principale con l'azione «OpenDialog» per la finestra di dialogo.

    L'apertura della finestra di dialogo è configurata.

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

  1. Selezionare l'oggetto nella vista «Dispositivi», aprire il menu contestuale e selezionare il comando «Proprietà».

  2. Selezionare la scheda «Visualizzazione».

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

  1. Impostare il tipo di visualizzazione di ‎dlgCalender‎ su Dialog.

  2. Trascinate un rettangolo nella visualizzazione ‎visMain‎.

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

  4. Trascinare un pulsante nella visualizzazione.

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

  6. Fare doppio clic sulla finestra di dialogo ‎dlgCalender‎.

  7. Trascinare l'elemento «Date picker» nell'editor di visualizzazione.

  8. Configurare la proprietà «Testi  Testo» con ‎Due Date: %t[yyyy-MM-dd]‎.

    Configurare la proprietà «Variabile» con ‎PLC_PRG.dateCalender‎.

    L'elemento è configurato.

  9. Trascinare un pulsante nell'editor di visualizzazione.

  10. Configurare la proprietà «Testi  Testo» con ‎OK‎:

  11. Configurare la proprietà «Configurazione degli ingressi  OnMouseClick»per l'azione «Close Dialog »con ‎dlgCalender, Result: OK‎.

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

  13. Trascinare un altro pulsante nell'editor di visualizzazione.

  14. Configurare la proprietà «Testi  Testo» con ‎Cancel‎:

  15. Configurare la proprietà «Configurazione degli ingressi  OnMouseClick» per l'azione «Close Dialog »con ‎dlgCalender, Result: Cancel‎.

  16. L'input dell'utente per la cancellazione della finestra di dialogo è configurato.

  17. Compilare, caricare e avviare l'applicazione.

    _visu_img_dlg_calendar

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.

  1. Inserire una nuova visualizzazione ‎visMain‎ sotto l'applicazione.

    Si apre l'editor di visualizzazione.

  2. Trascinare un pulsante nell'editor di visualizzazione.

  3. Inserire la proprietà «Text»‎Login‎.

    Il pulsante è contrassegnato dall'etichetta.

  4. Fare clic su «Configurare »nella proprietà «Configurazione degli ingressi  OnMouseDown».

  5. Selezionate l'azione di input «Execute ST-Code» e fate clic su _visu_icon_arrow_right.

  6. 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 ‎Login‎ e viene richiamata la funzione ‎OpenLoginDialog()‎.

  7. Fare clic su «Configurare »nella proprietà «Configurazione degli ingressi  OnDialogClosed».

  8. Selezionate l'azione di input «Execute ST-Code» e fate clic su _visu_icon_arrow_right.

  9. Inserire la seguente chiamata di funzione nell'editor ST: ‎OnLoginDialogClosed(pClientData);‎

    Se l'utente chiude la finestra di dialogo, viene richiamata la funzione ‎OnLoginDialogClosed()‎.

    login_dialog.png

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