Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Etichete statice si casete de editare


Etichete statice si casete de editare


Etichete statice si casete de editare

Casetele de dialog sunt interfete utilizate la introducerea si afisarea datelor programelor. Prin intermediul acestora, utilizatorii pot sa introduca, sa confirme sau sa anuleze introducerea datelor in program. Prin confirmarea datelor, in general se executa actiuni de legare a datelor de variabile existente in program.

Crearea casetelor de dialog implica doua etape: 1.crearea machetei pentru caseta de dialog si adaugarea de controale; 2. stabilirea legaturilor intre caseta de dialog si controalele sale si respectiv clasele si functiile din codul C++;

Etichetele statice sunt componentele casetei de dialog care afisaza texte simple. Intr-un control tip eticheta statica se pot afisa pana la 255 caractere. Pentru scrierea acestora pe mai multe randuri, se poate utiliza secventa de evitare "n". Prin intermediul optiunilor de stil, se pot da diferite aparente grafice etichetelor statice.



In marea majoritate a cazurilor, etichetele statice sunt utilizate ca si etichete descriptive pentru casetele de editare, deoarece acestea din urma nu dispun de etichete proprii.

Casetele de editare - sunt utilizate pentru receptionarea si afisarea textului introdus. Prin efectuarea unui click cu mouse-ul in interiorul casetei, aceasta va prelua implicit focusul, putand fi introdus textul. Asupra textului introdus, se pot efectua prin intermediul meniului contextual (click butonul drept) urmatoarele operatii: Undo, Cut, Copy, Paste, Delete si Select All. La definirea unei casete de dialog, sunt accesibile mai multe optiuni de stil, cum ar fi:

Password: mascheaza textul introdus, prin inlcuirea caracterelor cu "*";

Uppercase, Lowercase: transforma automat textul introdus in majuscule, respectiv minuscule;

Number: permite introducerea doar a caracterelor numerice;

Read-only: utilizeaza caseta de editare doar pentru afisare. Ea este colorata la culoarea de fond a casetei de dialog in care apare;

In general, preluarea textului introdus intr-o caseta de editare se face la apasarea unui buton de acceptare. In acest moment, textul este preluat din caseta si memorat intr-o variabila de tip CString a programului, sau intr-un camp al unei baze de date. Pentru asocierea unei variabile cu un control de tip caseta de editare, se foloseste ClassWizard. Acesta va realiza declararea variabilei si va genera macrourile care fac schimbul de date intre variabila si control.

La fel ca si in cazul butoanelor, in cazul casetelor de editare pot fi asociate functii de tratare a evenimentelor caracteristice. Evenimentele caracteristice controalelor, sunt puse in evidenta prin trimiterea catre sistemul de operare a unor mesaje de informare. Aceste mesaje sunt:

Eveniment

Descriere

EN_CHANGE

EN_UPDATE

EN_SETFOCUS

EN_KILLFOCUS

EN_MAXTEXT

EN_HSCROLL

EN_VSCROLL

EN_ERRSPACE

Trimis pentru a informa ca textul s-a modificat dupa afisarea acestuia;

Trimis pentru a informa ca textul s-a modificat inainte de afisarea acestuia;

Trimis cand controlul primeste focusul;

Trimis atunci cand controlul pierde focusul;

Trimis cand textul depaseste lungimea permisa si este trunchiat;

Trimis cand se efectueaza click pe bara de derulare orizontala, pentru casetele multi-linie;

Trimis cand se efectueaza click pe bara de derulare verticala, pentru casetele multi-linie;

Trimis in cazul in care controlul nu poate aloca memorie;

MFC incapsuleaza functionalitatea casetelor de editare in clasa CEdit, derivata din clasa CWnd. Pointerii CWnd intorsi de functia GetDlgItem() vor trebui convertiti la CEdit, pentru a putea specifica un obiect de tip caseta de dialog. Clasa CEdit ofera in plus fata de CWnd o serie de functii, cum ar fi:

Create() - permite crearea controalelor de editare la momentul executiei;

GetSel() - furnizeaza pozitia primului si ultimului caracter din textul selectat curent;

SetSel() - selecteaza o secventa de caractere;

ReplaceSel() - inlocuieste textul selectat curent;

LimitText() - Stabileste numarul maxim permis de caractere;

Exista situatii, in care textele introduse in casetele de editare, trebuie sa satisfaca anumite conditii suplimentare. Astfel, in momentul introducerii lor, asupra textelor trebuie facute o serie de validari. In acest sens, este nevoie de o extindere a functionalitatii casetelor de editare, realizandu-se o subclasare a clasei CEdit. Subclasarea este in esenta construirea unei noi clase, care sa fie derivata din clasa CEdit si a carei obiecte, pe langa atributele mostenite de la clasa de baza, sa aiba asociate noi atribute, care sa rezolve functiile pentru care au fost create.

Coduri pentru caracterele de control sunt:

Definitie

Tasta asociata

VK_BACK

VK_TAB

VK_LEFT

VK_RIGHT

VK_UP

VK_DOWN

VK_RETURN

VK_ESCAPE

VK_CONTROL

Backspace

Tab

Sageata stanga

Sageata dreapta

Sageata in sus

Sageata in jos

Enter

Esc

Ctrl

Exemple.

Sa se realizeze un proiect a carui caseta de dialog contine o caseta de editare IDC_NUME cu o eticheta statica asociata, Caption: Nume, un buton de afisare la apasarea caruia sa se afiseze textul introdus in caseta de editare. Lungimea maxima a textului introdus va fi stabilita la 10 caractere.

a.       Se insereaza butonul IDC_AFISARE, Caption:Afisare, caseta de editare IDC_NUME cu o eticheta statica asociata, Caption: Nume.

b.      in ClassWizard->MemberVariables se va asocia lui IDC_NUME variabila m_strNume avand grija ca la Category sa fie selectat Value iar la VariableType sa fie selectat Cstring. Lungimea maxima se stabileste la 10 caractere.

c.       Se asociaza butonului IDC_AFISARE functia OnAfisare de forma:

void CProj1Dlg::OnAfisare()

Observatii:

Primul apel UpdateData() se face implicit cu valoarae TRUE, ceea ce are ca efecttransferul textului de la control, la variabila asociata m_strNume. Valoarea FALSE ar transmite textul de la variabila la control. Daca a fost introdus vreun nume, deci m_strNume nu este un sir vid, se afiseaza continutul variabilei in caseta de dialog.

S-a utilizat functia CString::IsEmpty de forma BOOL IsEmpty() const; Functia returneaza valoarea FALSE daca variabila CString nu contine nici un caracter si TRUE in caz contrar.

Se va realiza o caseta de dialog care sa contina doua casete de editare cu etichete statice corespunzatoare: Editat si Afisat (de tip Read-only). La completarea casetei IDC_EDITAT, la transmiterea mesajului EN_CHANGE va fi completata simultan si caseta IDC_AFISAT cu acelasi text. In final, la pierderea focusului de catre caseta IDC_EDITAT se va completa textul de la IDC_AFISAT cu majuscule.

a.       Se realizeaza caseta de dialog care contine cele 2 etichete statice si cele 2 casete de editare.

b.      Se asociaza variabilele de tip CString m_strEditat si m_strAfisat utilizand CassWizard, ca in exemplul precedent.

c.       Se lanseaza Class Wizard si se selecteaza Message Maps, se selecteaza la ObjectIDs controlul IDC_EDITAT, se selecteaza mesajul care va activa functia, in acest caz EN_CHANGE; se apasa AddFunction, se accepta numele OnChangeEditat();

d.      Se editeaza functia OnChangeEditare astfel:

void CProj2Dlg::OnChangeEditat()

e.       Analog, pentru acelasi control se selecteaza evenimentul EN_KILLFOCUS, se apasa AddFunction si se accepta numele OnKillfocusEditare() pentru functie.

f.        Se editeaza functia OnKillfocusEditat() de forma:

Void Cproj2Dlg::OnKillfocusEditat()

Observatii:

1. A fost utilizata functia CString::MakeUpper de forma void MakeUpper() care transforma un obiect CString in majuscule.

Sa se realizeze proiectul Proj3 pentru care caseta de dialog contine o caseta de editare IDC_INITIALE cu eticheta statica Initiale in care se introduc initialele unui nume, fiecare caracter fiind scris cu litere mari si urmat de caracterul '.' (punct).

a.       Se realizeaza caseta de dialog ceruta.

b.      Se lanseaza ClassWizard, se selecteaza clasa CProj3Dlg in clasa Class Name, se apasa Add Class, apoi New, si in caseta Name se introduce Cinitiale; in caseta Base Class se selecteaza clasa CEdit. Se apasa OK.

c.       In Class Wizard se selecteaza Member Varaibles, in caseta Class Name se selecteaza Cproj3Dlg, in lista Object Ids se selecteaza IDC_EDIT_INITIALE, se apasa Add Variable, astfel incit sa apara caseta Add Member variable. Se introduce numele variabilei m_editInitiale in cimpul Member Variable Name, in caseta Category se selecteaza Control, in caseta Variable Type se selecteaza Cinitiale, se apasa OK.

d.      Se adauga linia #include "Initiale.h" la inceputul fisierului Cproj3Dlg.h

e.       Se lanseaza Class Wizard, se selecteaza Message Maps, in caseta Class Name se selecteaza CInitiale, in caseta Object Id's se selecteaza CInitiale, in caseta Messages se selecteaza WM_CHAR, se apasa Add Function. In caseta Member Functions va apare functia OnChar. Se apasa Edit Code.

f.        Se editeaza functia OnChar() astfel:

void CInitiale::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)

//daca a fost apasat 'backspace' se apeleaza de doua ori functia din clasa de baza pentru a sterge

//litera si punctul

if (nChar==VK_BACK)

Observatii

Pentru validarea informatiei introduse in casetele de editare este necesara extinderea functionalitatii acestora prin subclasarea clasei CEdit. Subclasarea presupune implementarea unei clase noi, derivata din clasa CEdit a carei obiecte pe linga atributele mostenite de la clasa de baza sa rezolve functiile pentru care au fost create.

Noua clasa se introduce cu ajutorul Class Wizard. In proiect sunt automat generate doua fisiere noi care in cazul de fata sunt denumite Initiale.h si Initiale.cpp. Cum clasa Cproj3Dlg contine variabila m_editInitiale de tipul CInitiale este absolut necesara introducerea directivei #include la punctul d. de mai sus, pentru ca tipul acestei variabile este declarat in Initiale.h.

Actiunile necesare aplicatiei sunt implementate in interiorul unei functii care trateaza mesajul WM_CHAR. Acest mesaj este transmis de fiecare data cind o tasta din blocul tastelor alfanumerice este apasata, in timp ce controlul de editare detine focusul. Avantajul acestui mesaj fata de mesajul EN_CHANGE este ca, spre deosebire de cel de-al doilea, a carui functie de tratare primeste caracterele dupa afisarea lor, primul ofera functiei caracterele inainte de afisare, fiind posibile validari asupra lor. Daca caracterul introdus este corect el este transmis controlului de editare, altfel va fi ignorat.

Se utilizeaza functiile:

int isalpha(int c); - intoarce TRUE daca c este o reprezentare intr-un anumit standard al unui caracter alfanumeric;

int islower(int c); - intoarce TRUE daca c este o reprezentare intr-un anumit standard al unui caracter mic.

Functia OnChar descrisa mai sus verifica daca a fost introdusa o litera. Daca s-a introdus o litera mica atunci aceasta este transformata in majuscula. (Codul ASCII al caracterului A este 65 iar codul ASCII al caracterului a este 97, 97-32=65).

Functia DefWindowProc() este apelata pentru afisare. Daca ar fi fost apelata functia CEdit::OnChar() a clasei de baza aceasta nu ar percepe modificarile aduse parametrului nChar.

Functia OnChar este implementata astfel incit la apasarea caracterului Backspace sa fie sterse atit punctul cit si caracterul introdus. De aceea functia CEdit::OnChar() a clasei de baza va fi apelata de doua ori.

Sa se realizeze proiectul Proj4 care presupune o caseta de dialog care contine o caseta de editare in care se introduc cifre intre 0 si 8 si se afiseaza cifrele respective incrementate cu o unitate.

a.       Se realizeaza caseta de dialog care contine o caseta de editare IDC_NUMERE care are validat la Properties->Styles flagul Number.

b.      Se lanseaza Class Wizard, se introduce clasa CValidare ca in exemplul anterior.

c.       Se introduce variabile m_editValidare de tipul CValidare ca in cazul anterior

d.      Se include #include "Validare.h" in CProj4Dlg.h

e.       Se genereaza functia care raspunde mesajului WM_CHAR ca in cazul anterior

f.        Se editeaza functia OnChar() astfel:

void CValidare::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate