Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
software:qpaint:qpaint51 [2019/08/29 17:01] – modifica esterna 127.0.0.1 | software:qpaint:qpaint51 [2024/07/12 15:51] (versione attuale) – [QPaint 5.1] qem214 | ||
---|---|---|---|
Linea 1: | Linea 1: | ||
+ | ====== QPaint 5.4 ====== | ||
+ | |||
+ | ===== - Introduzione ===== | ||
+ | QPaint 5 è un ambiente di sviluppo grafico per la programmazione di una interfaccia operatore QEM. In questo documento sono riportate le caratteristiche principali del programma QPaint. Durante la descrizione dell' | ||
+ | Il progetto realizzato con QPaint può accedere a tutte le variabili, parametri e altre strutture dati dichiarate nel progetto realizzato con QView. Il meccanismo per " | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Al momento della compilazione del progetto QView, viene generato un file con lo stesso nome del progetto ed estensione " | ||
+ | Il QPaint è un ambiente di sviluppo che permette di creare un' | ||
+ | |||
+ | ===== - Quick Start ===== | ||
+ | Diamo alcune informazioni fondamentali per un rapido avvio di un nuovo progetto QPaint. | ||
+ | |||
+ | ==== - Nuovo Progetto ==== | ||
+ | Si deve selezionare | ||
+ | * File - New Project... | ||
+ | |||
+ | e il QPaint chiedere subito di specificare il modello del prodotto per cui si vuole realizzare il progetto: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== - Symbols file importing ==== | ||
+ | Una delle prime operazioni da fare è importare il file che permette di accedere ai simboli dichiarati nel progetto QView associato. Selezionare: | ||
+ | |||
+ | * Project - QMove Syumbols File... | ||
+ | |||
+ | Appare la seguente finestra di dialogo | ||
+ | |||
+ | {{: | ||
+ | |||
+ | dopo avere premuto il bottone //Import//, si deve specificare il file dei simboli. Questo file viene generato da QView dopo la compilazione di un progetto. Esso ha lo stesso nome del progetto QView, ma con estensione " | ||
+ | |||
+ | ==== - Pagine ==== | ||
+ | Un progetto QPaint è composto da un certo numero di //Pagine// che sono le visualizzazioni che appaiono sul display e con cui l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Esiste il menù //Page// per poter gestire le pagine del progetto: | ||
+ | * inserire, | ||
+ | * aggiungere, | ||
+ | * togliere, | ||
+ | * copiare, | ||
+ | * incollare, | ||
+ | * importare, | ||
+ | * esportare, | ||
+ | * impostare il colore dello sfondo, | ||
+ | * programmare gli eventi e le azioni di una pagina. | ||
+ | |||
+ | ==== - Oggetti ==== | ||
+ | Nelle pagine è possibile inserire un certo numero di oggetti grafici per vari scopi. Per selezionare quale oggetto inserire nella pagina si usa la barra verticale indicata nella seguente figura: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === - Value Object === | ||
+ | È l' | ||
+ | |||
+ | === - String Object === | ||
+ | È l' | ||
+ | |||
+ | === - ValString Object === | ||
+ | Con questo oggetto è possibile far apparire un messaggio variabile dipendente dal valore di una variabile del progetto QView. | ||
+ | |||
+ | === - UniString Object === | ||
+ | È un oggetto con la stessa funzionalità del //String Object// ma con la possibilità di usare i font installati sul PC ed in particolare i font Unicode che permettono l'uso di alfabeti diversi da quello latino: cirillico, greco, arabico, cinese, ... | ||
+ | |||
+ | === - UniValString Object === | ||
+ | È un oggetto con la stessa funzionalità del //ValString Object// ma con la stessa caratteristica del //UniString Object//. | ||
+ | |||
+ | === - Image Object === | ||
+ | Questo oggetto permette di inserire un' | ||
+ | |||
+ | * Graphics - Image Manager | ||
+ | |||
+ | L'// | ||
+ | |||
+ | === - ValImage Object === | ||
+ | Questo oggetto permette di aggiungere sulla pagina una immagine variabile in funzione del valore di una variabile del progetto QView. Tutte le immagini utilizzate in un oggetto di questo tipo deveno essere delle stesse dimensioni. Le immagini devono essere scelte dalla libreria delle immagini già inserite in //Image Manager//. | ||
+ | |||
+ | === - Vector Image Object === | ||
+ | Questo oggetto permette di riservare un' | ||
+ | |||
+ | === - Box Object === | ||
+ | È un oggetto che permette di realizzare delle cornici di forma rettangolare. | ||
+ | |||
+ | === - Touch Area === | ||
+ | L' | ||
+ | |||
+ | * **On Touch Press**, è il momento in cui il dito entra in contatto con lo schermo; | ||
+ | * **On Touch Release**, è il momento in cui il dito rilascia lo schermo, | ||
+ | * **On Touch Press Double**, è un doppio tocco ravvicinato nel tempo. | ||
+ | |||
+ | ad ognuno di questi eventi possono essere associate delle azioni. Le azioni sono di tipo generico e non legate al concetto di touch screen e quindi verranno descritte in seguito. | ||
+ | |||
+ | ==== - Eventi e Azioni ==== | ||
+ | Oltre alla composizione della grafica, è possibile anche implementare nel progetto una semplice programmazione. | ||
+ | Il principio è quello di avere a disposizione una serie di //eventi// da cui scegliere. Ad ogni evento io posso associare delle //azioni//. Inoltre posso programmare queste associazioni // | ||
+ | |||
+ | - Project - Global Events Editor | ||
+ | - Page - Page Events Editor | ||
+ | |||
+ | Entrambi gli //Editors// sono composti di due aree come mostrati in figura | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A sinistra si inseriscono gli //eventi// e a destra si inseriscono le //azioni// associate all' | ||
+ | |||
+ | === - Eventi === | ||
+ | La lista degli eventi possibili sono: | ||
+ | * **On Key**, evento che si ripete continuamente finché è premuto il tasto specificato; | ||
+ | * **On Press**, evento che si attiva alla pressione del tasto specificato; | ||
+ | * **On Release**, evento che si attiva al rilascio del tasto specificato; | ||
+ | * **On Always**, evento che si ripete continuamente; | ||
+ | * **On Page In**, evento che si attiva all' | ||
+ | * **On Time**, evento che si attiva in un certo momento specificato da una data e un' | ||
+ | * **On Change Var**, evento che si attiva quando la variabile specificata cambia valore; | ||
+ | * **On Var**, evento che si attiva quando la variabile specificata assume il valore specificato. | ||
+ | |||
+ | === - Azioni === | ||
+ | Ad ogni //evento// è possibile associare più di una //azione//. Le //azioni// possibili sono: | ||
+ | * **Goto Page**, vai alla pagine specificata; | ||
+ | * **Next Page**, vai alla pagina successiva; | ||
+ | * **Previus Page**, vai alla pagina precedente; | ||
+ | * **Begin Data Entry**, attiva l' | ||
+ | * **Send Command**, invia un comando ad un device dichiarato nel progetto QView; | ||
+ | * **Set Variable**, assegna un valore ad una variabile del progetto QView; | ||
+ | * **Led On**, attiva il LED specificato (solitamente i LED sono associati ai tasti funzione); | ||
+ | * **Led Off**, disattiva il LED specificato; | ||
+ | * **Led Blink**, attiva il lampeggio del LED specificato; | ||
+ | * **Backup**, invia un comando di Backup (verificare se questo comando è supportato dall' | ||
+ | * **Restore**, | ||
+ | |||
+ | ==== - Variabili di terminale ==== | ||
+ | Ogni progetto QPaint contiene delle variabili sempre presenti che forniscono una serie di informazioni relative al terminale stesso. Queste variabili hanno già un nome prefissato, alcune sono in sola lettura e altre sono anche scrivibili. Facciamo un breve elenco delle variabili più importanti: | ||
+ | |||
+ | ^Nome^Tipo^ Read/Write ^Descrizione^ | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |< | ||
+ | |||
+ | Ce ne sono molte altre ma queste sono le più utilizzate ed essenziali per poter sviluppare i progetti. | ||
+ | |||
+ | |||
+ | ====== - Controllo da QView ====== | ||
+ | La gestione dell' | ||
+ | |||
+ | * rilevare la pressione di un tasto, | ||
+ | * capire che pagina è visualizzata in quel momento, | ||
+ | * comandare un cambio di una pagina, | ||
+ | * verificare se l' | ||
+ | |||
+ | Spesso si preferisce gestire l' | ||
+ | |||
+ | ===== - Rilevare la pressione di un tasto ===== | ||
+ | Le variabili che permettono di conoscere se un tasto è premuto sono < | ||
+ | |||
+ | <code QCL> | ||
+ | GLOBAL | ||
+ | Key L ;This will be match to $KEY | ||
+ | KeyF | ||
+ | KeyF2 L ;This will be match to $KEYF2 | ||
+ | </ | ||
+ | |||
+ | Nel progetto QPaint si seleziona: | ||
+ | |||
+ | * Project - Global Events Editor | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Si deve inserire un evento // | ||
+ | |||
+ | <code QCL> | ||
+ | CONST | ||
+ | KEY_1 268435456 ; | ||
+ | KEY_2 1048576 ; | ||
+ | KEY_3 4096 ; | ||
+ | KEY_4 536870912 ; | ||
+ | KEY_5 2097152 ; | ||
+ | KEY_6 8192 ; | ||
+ | KEY_7 1073741824 ; | ||
+ | KEY_8 4194304 ; | ||
+ | KEY_9 16384 ; | ||
+ | KEY_0 8388608 ; | ||
+ | KEY_CLR -2147483648 ; | ||
+ | KEY_ENTER 128 ; | ||
+ | KEY_HELP 64 ; | ||
+ | KEY_DECPT 32 ; | ||
+ | KEY_SIGN 16 ; | ||
+ | KEY_ESC 33554432 ; | ||
+ | KEY_UP 131072 ; | ||
+ | KEY_PGUP 512 ; | ||
+ | KEY_LEFT 67108864 ; | ||
+ | KEY_NEXT 262144 ; | ||
+ | KEY_RIGHT 1024 ; | ||
+ | KEY_INS 134217728 ; | ||
+ | KEY_DOWN 524288 ; | ||
+ | KEY_PGDN 2048 ; | ||
+ | |||
+ | KEY_F1 33554432 ; | ||
+ | KEY_F2 67108864 ; | ||
+ | KEY_F3 134217728 ; | ||
+ | KEY_F4 268435456 ; | ||
+ | KEY_F5 536870912 ; | ||
+ | KEY_F6 131072 ; | ||
+ | KEY_F7 262144 ; | ||
+ | KEY_F8 524288 ; | ||
+ | KEY_F9 1048576 ; | ||
+ | KEY_F10 2097152 ; | ||
+ | KEY_F11 1 ; | ||
+ | KEY_F12 2 ; | ||
+ | KEY_F13 | ||
+ | KEY_F14 | ||
+ | KEY_F15 | ||
+ | KEY_F16 | ||
+ | KEY_F17 | ||
+ | KEY_F18 | ||
+ | KEY_F19 | ||
+ | KEY_F20 | ||
+ | KEY_F21 1024 ; | ||
+ | KEY_F22 2048 ; | ||
+ | KEY_F23 4096 ; | ||
+ | KEY_F24 8192 ; | ||
+ | KEY_F25 16384 ; | ||
+ | KEY_F26 32768 ; | ||
+ | |||
+ | </ | ||
+ | |||
+ | Quindi il codice per eseguire una certa azione se viene premuto un tasto sarà | ||
+ | |||
+ | <code QCL> | ||
+ | IF Key EQ KEY_1 | ||
+ | ;Put here the code to do when the operator press " | ||
+ | ENDIF | ||
+ | </ | ||
+ | |||
+ | ===== - Capire quale pagina è visualizzata ===== | ||
+ | Analogamente al capitolo precedente, anche in questo caso devo predisporre una variabile nel progetto Qview per poter accogliere la variabile < | ||
+ | |||
+ | <code QCL> | ||
+ | GLOBAL | ||
+ | Page L ;This will be match to $PAGE | ||
+ | </ | ||
+ | |||
+ | e poi aggiungo un' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | In questo modo posso eseguire operazioni diverse a seconda di quale pagina è visualizzata: | ||
+ | |||
+ | <code QCL> | ||
+ | IF Page EQ MENU_PAGE | ||
+ | IF Key EQ KEY_1 | ||
+ | ;Put here the code to do when the operator press " | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | </ | ||
+ | |||
+ | ===== - Comandare un cambio pagina ===== | ||
+ | Per comandare un cambio pagina dell' | ||
+ | |||
+ | <code QCL> | ||
+ | GLOBAL | ||
+ | PageIn | ||
+ | </ | ||
+ | |||
+ | è necessario poi aggiungere un evento // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Quindi quando il valore della variabile //PagIn// viene cambiato in una riga di codice del progetto QView, viene attivata l' | ||
+ | |||
+ | Il codice QCL sarà quindi: | ||
+ | |||
+ | <code QCL> | ||
+ | IF Page EQ MENU_PAGE | ||
+ | IF Key EQ KEY_1 | ||
+ | PageIn = PAGE_1 | ||
+ | WAIT(Page EQ PAGE_1) | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | </ | ||
+ | |||
+ | Come si può osservare, viene aggiunta una istruzione //WAIT// per attendere che effettivamente il cambio di pagina richiesto sia avvenuto prima di procedere con il resto delle linee di codice. | ||
+ | ===== - Dataentry attivo ===== | ||
+ | Per conoscere lo stato dell' | ||
+ | |||
+ | <code QCL> | ||
+ | GLOBAL | ||
+ | DEOn F ;This will match to $DATAENTRYON | ||
+ | </ | ||
+ | |||
+ | aggiungere un ulteriore azione // | ||
+ | |||
+ | {{: | ||
+ | |||
+ | quindi se non posso cambiare pagine durante l' | ||
+ | |||
+ | <code QCL> | ||
+ | IF Page EQ MENU_PAGE | ||
+ | IF (Key EQ KEY_1) AND (DEOn EQ 0) | ||
+ | PageIn = PAGE_1 | ||
+ | WAIT(Page EQ PAGE_1) | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | </ | ||
+ | |||
+ | ====== - Esempi ====== | ||
+ | Forniamo degli esempi di programmazione del QPaint 5 per le operazioni più diffuse. Spesso queste operazioni sono ottenute tramite la cooperazione tra la programmazione in QPaint 5 e alcune righe di codice scritte in QView. | ||
+ | |||
+ | * Pulsante grafico. | ||
+ | |||
+ | ===== - Pulsante grafico ===== | ||
+ | Un pulsante grafico è una immagine a forma di bottone che una volta toccata modifica la sua forma per dare l' | ||
+ | Per la costruzione di un pulsante grafico sono necessarie due immagini (tif, gif, jpg, pcx, bmp, ico): | ||
+ | {{: | ||
+ | * Grafica - Gestore delle immagini (Graphics - Image Manager) | ||
+ | |||
+ | Per creare il bottone è necessario utilizzare due oggetti: | ||
+ | * un ValImage object e | ||
+ | * un TouchArea object. | ||
+ | |||
+ | Selezionare il ValImage e posizionare sulla pagina del progetto: \\ | ||
+ | {{: | ||
+ | inserire come //Prima Immagine (First Image)// il valore 0 e come //Numero Immagini (Max Images)// il valore 2. Associare, quindi al valore 0 l' | ||
+ | {{: | ||
+ | La variabile //@BUTTON// deve essere dichiarata in | ||
+ | * Progetto - Variabili Interne (Project - Internal variables) | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A questo punto è necessario aggiungere l' | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Quindi alla pressione dell' | ||
+ | |||
+ | A questo punto il pulsante grafico è fatto. Per l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | si vede che al rilascio del bottone, viene comandato il cambio pagina con l' | ||
+ | |||
+ | {{: | ||