Quando nel programma si deve mettere l'inserimento di una password con anche la possibilità di cambiare e salvare una nuova password, il modo per gestire queste operazioni è di realizzare una o più pagine grafiche (a seconda del progetto) in cui mettere un edit per l'inserimento della password e una pagina grafica in cui poter effettuare una modifica e salvataggio della password.
Si utilizza anche una serie di funzioni per gestire le operazioni.
Nel seguente esempio vine mostrato la gestione dell' inserimento e della modifca di due password di un progetto.
Più avanti troverai anche le parti di codice scritte nei file .c relativi alle pagine grafiche.
Nel common.h (o comunque in file .h inclusi nel common):
unsigned char superadmin_password[32]; // dichiara la password di accesso del superadmin
unsigned char manutentore_password[32]; // dichiara la password di accesso del manutentore
volatile U8 my_password[32]; // array ralativo alla password che deve essere inserita
volatile char livello_accesso; // variabile che indica chi ha effettuato l' accesso
volatile int flag_visu_msg_password = 0; // flag relativa alla visualizzazione del messaggio di corretta o errata
// dopo l' inserimento della password
// funzione che stampa sulla pagina grafica la scritta se la password è corretta o errata
void stampa_msg_password(void)
{
if (livello_accesso == 1) // se l' accesso è stato effettuato dal manutentore
page_reqPassword->label1->caption = "Password manutentore corretta"; // label1 è la scritta sulla parte grafica della pagina
else if (livello_accesso == 2) // se l' accesso è stato fatto dal super-admin
page_reqPassword->label1->caption = "Password super-admin corretta";
else // se l' accesso non ha avuto successo
page_reqPassword->label1->caption = "Password errata";
}
// funzione relativa alla flag di visualizzazione del messaggio dopo l' inserimento della password
void stop_visu_msg_password(void)
{
flag_visu_msg_password = 0; // dopo 2 sec dall' inserimento della password (vedi page_reqPassword.c)
}
// funzione per impostare i valori di default delle password
void reset_pasword(void)
{
superadmin_password = "1234";
manutentore_password = "5678";
}
Nella pagina (page_reqPassword.c) in cui viene richiesto di inserire la password, la variabile my_password è associata ad un edit nel quale è possibile inserire la password ed è presente un label (label1) che scrive se la password è corretta o errata:
#include "page_reqPassword.h"
// -------------------------------+
// form page_req_password
// -------------------------------+
void form_page_req_password(void)
{
object(TPage,(void **)&page_reqPassword,page_reqPassword_Body,0,0,&Null,None,1,0,"PAGE");
}
// -------------------------------
// methods:
// -------------------------------
void Event(passwordOK_onmouseup)() // quando il pulsante passwordOK viene premuto
{ // (confermando la password inserita)
if (!strcmp(my_password, superadmin_password)) // se la password inserita è uguale alla
// password impostata per il super-admin
livello_accesso = 2;
else if (!strcmp(my_password, manutentore_password)) // se la password inserita è uguale alla
// password impostat per il manutentore
livello_accesso = 1;
else // se la password non è corretta
livello_accesso = 0;
// la flag di visualizzazione messaggio vine messa a 1 e viene rimessa a 0 ogni 2 sec
flag_visu_msg_password = 1;
remove_timer(stop_visu_msg_password);
exec_timer(stop_visu_msg_password, ONCE, 2000);
}
// -------------------------------
void Event(label1_onentry)()
{
// label1 viene visualizzato solo se la flag di visualizzazione messaggio è 1 (ogni 2 sec)
me2->visible = flag_visu_msg_password;
if (flag_visu_msg_password) // se il label è visibile
{
stampa_msg_password(); // stampa la scritta
if (livello_accesso == 3 || livello_accesso == 2 || livello_accesso == 1) // se la password è corretta
me->fontcolor = GREEN; // il label diventa di colore verde
else // se la password è errata
me->fontcolor = RED; // il label diventa di colore rosso
me->rgb_fontcolor=0;
}
}