Visual Basic 0 abc-doar


accepta sau returna valori,corespunzator cu setul de instructiuni din



Yüklə 0,98 Mb.
səhifə3/10
tarix03.11.2017
ölçüsü0,98 Mb.
#29921
1   2   3   4   5   6   7   8   9   10

accepta sau returna valori,corespunzator cu setul de instructiuni din

cele doua proceduri Let si Get.

EXEMPLU: deschideti o fereastra si editati urmatorul cod:

Dim Valoare1 As Variant

Property Let Proprietate1(Valoare2 As Variant)

Valoare1 = Valoare2

End Property

Property Get Proprietate1() As Variant

Proprietate1 = Valoare1

End Property

Private Sub Form_Click()

Valoare1 = "Variabila atribuita="

Form1.Print Proprietate1

Proprietate1 = 53,755

Form1.Print Proprietate1

End Sub

Executati fereastra cu Run si apoi efectuati un click de mouse.

In exemplul de mai sus se remarca urmatoarele:

-toate datele sunt de tip Variant,asa ca sunt perfect compatibile si

pot accepta orice fel de valori

-declaratia Property Let are un parametru suplimentar (Valoare 2),

compatibil cu valoarea returnata de Property Get.

-cele doua proceduri sunt inlantuite prin variabila publica Valoare1

-proprietatea astfel definita (Proprietate1) poate accepta valori,

sau poate returna valoarea continuta

-pentru setarea proprietatii se poate utiliza si variabila publica

utilizata pe post de tampon de memorie (Valoare1)

-in exemplul de mai sus,cele doua proceduri nu efectueaza nici un

fel de operatii asupra datelor.In realitate,procedurile obiectelor vor fi

astfel concepute incat sa realizeze fie o selectie,fie o restrictie sau

o conversie a datelor,fie sa efectueze un set oarecare de operatii.Este

posibil sa execute seturi diferite de operatii pentru cele doua proceduri.


-13-

EVENIMENTE (Events) - sunt mesaje emise de catre un obiect,sau un modul,

prin care semnalizeaza faptul ca s-a intamplat ceva.De obicei un astfel

de mesaj este determinat de o actiune oarecare la nivelul obiectului

respectiv : click de mouse,deplasarea indicatorului mouse,apasarea unei

taste,activarea sau dezactivarea obiectului etc.Exista si situatii in

care se poate elibera un astfel de mesaj si ca urmare a unei inactiuni:

de exemplu se utilizeaza un Timer (cronometru) care semnalizeaza perio-

dic faptul ca indicatorul mouse este amplasat deasupra unui anumit obiect.

Pentru obiectele de tip Windows si pentru toate actiunile ce se desfa-

soara in mediul Windows exista un set de mesaje standardizate,al caror

nume incepe cu WM_ (Exemple: WM_ACTIVATE,WM_CLEAR,WM_COMMAND,WM_CREATE,

WM_ENABLE,WM_LBUTTONDBLCLK,WM_LBUTTONDOWN etc.).Puteti gasi intreaga

lista de mesaje Windows in manualul Help al limbajului Pascal cu obiecte.

Pentru ca aceste mesaje sa poata fi exploatate,este necesara o procedura

speciala,prin care sunt citite in permaneta toate mesajele eliberate in

memoria de operare si apoi sunt filtrate sau interpretate.Dupa identifi-

carea unui mesaj,se utilizeaza o alta procedura,denumita procedura pentru

exploatarea mesajului (EventHandler) in care sunt grupate codurile ce

urmeaza sa fie executate la aparitia mesajului.Practic este ca si cand

se utilizeaza o variabila oarecare,pentru a declansa executia unei pro-

ceduri.Daca variabila primeste o anumita valoare,functia este declansata

cu Call.Diferenta consta in faptul ca mediul de operare Windows lucreaza

cu zeci sau sute de astfel de mesaje.Practic,in fiecare secunda,in mediul

Windows sunt active mai multe astfel de mesaje.Pentru a filtra aceste

mesaje,se utilizeaza niste functii speciale,denumite functii delegate

(delegates).Aceste functii utilizeaza un fel special de pointeri,astfel

incat aparitia unui mesaj de semnalizare,determina executia unei anumite

proceduri.Pentru a realiza legatura dintre mesaj si functia de raspuns la

mesaj,se pot utiliza diferite procedee: tabele de adevar,arii de memorie

parametrizate,tabele de tip .dbf,functii de selectie si filtrare etc.

Mesajul de semnalizare,impreuna cu functa de raspuns la mesaj formeaza

impreuna un eveniment.Evenimentele se utilizeaza pentru a organiza modul

de control al executiei.Daca in mediul BASIC,programul era format dintr-o

lista de coduri in care executia se facea secvential,sau cu salturi de la

un nivel la altul,in mediul Visual Basic codurile sunt compartimentate in

module distincte,iar executia programului se deplaseaza de la un modul la

altul,ca urmare a unui eveniment ce a aparut la nivel de obiect sau modul.

Se spune despre programele visuale ca sunt controlate prin evenimente

(event driven).Asadar,notiunea de eveniment este fundamentala pentru inte-

legerea legaturilor dintre diferitele elemente ce compun un program.

Evenimentele sunt comune pentru toate programele si limbajele de pro-

gramare ce opereaza cu obiecte vizuale de tip Windows (Pascal,Delphi,C++,

OWL,Visual Fox,Visual Java etc.),dar conventiile si denumirile specifice

pot fi usor diferite.In limbajul Visual Basic,functia dare exploateaza un

anumit eveniment se denumeste astfel: numele obiectului care a generat

mesajul,urmat de o liniuta de subliniere si de numele evenimentului.

EXEMPLU: Form_Click() este functia declansata de un click de mouse

in interiorul unei ferestre,iar:

Form_DblClick() este functia declansata de un dublu click de

mouse in aceeasi fereastra.Exista un numar oarecare de evenimente standard

pentru fiecare obiect obiect vizual standard.


-14-

Din punct de vedere practic,exista doua metode prin care puteti sa

alegeti evenimentele cu care doriti sa controlati executia programului.

Prima metoda este sa deschideti manualul Help prin Contents,apoi alegeti

Language Reference si Events pentru a identifica lista evenimentelor

grupate alfabetic.Alegeti evenimentul dorit si apoi editati codul in

fereastra de cod.

Cea de a doua metoda,este mult mai simpla si mai practica si apeleaza

direct la fereastra Code.

EXEMPLU: deschideti o fereastra noua (Form1),apoi executati un click

drept de mouse si alegeti View Code.

Fereastra Form1(Code) contine doua casete de dialog.Alegeti pe cea in

care este inclus codul (General) si apasati butonul de derulare.Apoi

alegeti obiectul dorit.In cazul de fata nu figureaza decat obiectul Form.

Alegeti Form.In fereastra de editare se va edita automat codul:

Private Sub Form_Load()
End Sub

adica scheletul procedurii ce urmeaza sa fie executata automat in moment-

ul in care fereastra este creata.Acest eveniment se va executa automat,

ori de cate ori se lanseaza in executie fereastra respectiva.Sa presupu-

nem ca doriti sa modificati dimensiunile cu care se va deschide fereastra.

Introduceti in procedura urmatoarele instructiuni:

Private Sub Form_Load()

Form1.Height = 7500

Form1.Width = 10000

End Sub

Apoi executati fereastra cu Run si Start.Observati ca fereastra va avea

alte dimensiuni decat cele initiale (initial era de 3600/4800).

Pentru a exploata un alt eveniment,deschideti din nou View Code.

Observati ca in prima caseta de dialog figureaza textul "Form" iar in

cea de a doua figureaza textul "Load".Pentru a alege un alt eveniment,

apasati butonul de derulare din cea de a doua caseta de dilaog (cea in

care figureaza "Load") si alegeti Click.

In fereastra de editare se va edita automat procedura:

Private Sub Form_Click()
End Sub

Puteti utiliza aceasta procedura,pentru a codifica operatiile pe care

doriti sa le declanseze efectuarea unui click de mouse in fereastra.De

exemplu,pentru a verifica evenimentul,editati urmatorul text:

Private Sub Form_Click()

Form1.Print "Click de mouse in fereastra"

End Sub

Apoi alegeti in cea de a doua caseta de editare,DblClick si editati pro-

cedura pentru dublul click astfel:

Private Sub Form_DblClick()

MsgBox("Dublu click in fereastra")

End Sub

Apoi executati fereastra cu Run si Start se executati cate un click si

apoi un dublu click in fereastra.Observati ca operatia de dublu click

antreneaza si procedura de click simplu.


-15-

In exemplul de mai sus,cele doua evenimente Click si DblClick inter-

fereaza,deoarece nu se poate executa un dublu click fara a executa un

simplu click.Acest gen de combinatie de evenimente se va utiliza doar

atunci cand procedura declansata de DblClick executa un set suplimentar

de operatii fata de cele executate de un click simplu.In toate celelalte

situatii,se vor alege evenimente cat mai discriminative,astfel incat sa

nu existe nici o interferenta posibila.

De exemplu,pentru a declansa un eveniment prin apasarea unui taste

oarecare,alegeti evenimentul KeyDown si completati procedura:

Private Sub Form_KeyDown(KeyCode As Integer,Shift As Integer)

MsgBox ("Tasta a fost apasata")

End Sub

Aceasta procedura se va executa indiferent de tasta apasata.Daca doriti

ca procedura sa fie mai selectiva,trebuie sa introduceti una sau mai multe

conditii pentru executie.De exemplu,pentru ca procedura sa returneze un

mesaj doar daca a fost apasata tasta A se va introduce conditia:

Private Sub Form_KeyDown(KeyCode As Integer,Shift As Integer)

If KeyCode = 65 Then

MsgBox ("Tasta A a fost apasata !")

End If

End Sub

In acest caz,procedura nu va returna un mesaj,decat daca se apasa tasta

A.Orice alta tasta nu returneaza nici un mesaj.Pentru lista completa a

tuturor tastelor si a combinatiilor de taste,consultati din Help pagina

Key Code constants.

Nu abuzati de aceasta procedura.Incepatorii au o predilectie bolnavi-

cioasa de a "secretiza" o serie intreaga de actiuni cu ajutorul unor ast-

fel de combinatii de taste.De cele mai multe ori,combinatiile sunt atat

de secrete,incat le uita si autorii lor si pierd accesul la functii impor-

tante din program.Daca este strict necesar sa utilizati astfel de combi-

natii secrete,este bine sa pastrati intr-un loc sigur si o lista clara

a combinatiilor utilizate (peste un an... sau mai multi ani,e posibil sa

aveti nevoie de ele).

Numarul de evenimente standard,pentru fiecare obiect Windows este

destul de mare si acopera necesitatile curente de programare.Observati

lista de evenimente pentru Form.Incercati sa utilizati si singuri un

astfel de eveniment (De exemplu : fereastra sa execute un Beep de averti-

zare in momentul in care este inchisa).

Fiecare obiect are un set propriu de evenimente.De exemplu,pentru a

explora evenimentele unui buton de comanda,alegeti din View optiunea

Toolbox.Se va deschide bara de obiecte vizuale pentru design.Pentru a

adauga un buton in fereastra selectati cu mouse din aceasta bara de

obiecte pe cel care reprezinta un buton (cand amplasati indicatorul mouse

apare textul "CommandButton").Executati un dublu click pe acest buton.

In fereastra Form1,va apare butonul denumit Command1.Selectati cu mouse

butonul,apoi executati un click drept si deschideti View Code:

In fereastra Form1(Code),alegeti in prima caseta de dialog obiectul

Command1 si apoi utilizati cea de a doua caseta de dialog pentru a explo-

ra evenimentele standard conectate la buton.Procedura ce se creaza auto-

mat este procedura Command1_Click().Puteti adauga un text de genul:

MsgBox("Butonul a fost apasat")


-16-

Executati exemplul de mai sus.Observati ca toate procedurile generate

de mouse sunt functionale,in schimb,cele generate de tastatura nu mai

sunt functionale,desi figureaza in fereastra de cod.Acest fapt se dato-

reaza faptului ca butonul Command1 nu poate fi actionat decat prin mouse.

Ca rezultat,aplicatia nu mai asteapta mesaje decat de la mouse (cele

eliberate de tastatura sunt "filtrate").Pentru a reactiva evenimentele

generate de tastatura trebuie sa eliminati butonul din fereastra (selec-

tati butonul,executati un click drept de mouse si apoi alegeti Cut).

Si acest exemplu,ilustreaza faptul ca evenimentele nu pot fi alese

chiar la intimplare.Trebuie sa existe o anumita ordine de prioritati.

Dupa fiecare eveniment nou,este bine sa verificati cu atentie,daca nu

exista nici o interactiune cu celelalte evenimente din program.Uneori

este bine sa desenati pe hartie o schita simpla cu obiectele si modulele

din program si cu spatiul de vizibilitate al fiecarui eveniment sau mesaj.

Exista sute de evenimente standard,majoritatea specializate pentru

fiecare tip de obiect vizual de tip Windows.Toate evenimentele standard

pot fi create automat cu ajutorul ferestrei Code si sunt legate automat

de functia care exploateaza evenimentul,astfel incat nu trebuie decat

sa completati codurile dorite in scheletul de procedura creat automat.

In unele situatii,poate ca doriti sa creati si unele evenimente noi,sau

sa rescrieti unul dintre evenimentele standard.Pentru acest gen de situa-

tii se pot utiliza instructiunile Event si RaiseEvent,la care se va ada-

uga apoi si procedura pentru exploatarea evenimentului.Spre deosebire de

evenimentele standard,aceste evenimente nu pot fi create sau declansate

automat.Dupa declarare,evenimentul trebuie sa fie declansat cu o instruc-

tiune explicita de tip RaiseEvent.

EXEMPLU: atat fereastra cat si butoanele de comanda,au cate un eveniment

de tip Click.Pentru a face diferenta dintre cele trei tipuri de Click,se

poate edita un cod de genul:

1.deschideti o fereastra si adaugati doua butoane de comanda (cu

dublu click in bara de obiecte Toolbox).Apoi deschideti fereastra View

Code si editati urmatorul text:

Event Click(ByVal ButtonNum%)

Private Sub Command1_Click()

RaiseEvent Click(1)

Form1.Print "Buton 1"

End Sub

Private Sub Command2_Click()

RaiseEvent Click(2)

Form1.Print "Buton2"

End Sub

Private Sub Form_Click()

RaiseEvent Click(0)

Form1.Print "fereastra"

End Sub

Lansati cu Run/Start si executati cate un click pe butoane,sau in inte-

riorul ferestrei.Prin acest procedeu,cele trei evenimente Click au fost

grupate intr-un singur eveniment,cu mai multe variante generate de para-

metrul ButtonNum%.

Pe cat posibil,este recomandabil sa utilizati numai evenimentele stan-

dard (cele personalizate acupa memorie,incetinesc executia si depanarea).


-17-

Daca doriti,puteti sa editati si functia dispecer,cea care distribuie

mesajele catre obiectul de destinatie.Daca utilizati mesajele sitemului

Windows,trebuie sa utilizati si functiile Windows pentru prelucrarea si

filtrarea mesajelor.Dintre acestea,cele mai importante sunt: GetMessage,

DispatchMessage,CallWindowProc,PeekMessage,PostMessage,ReplyMessage,Send-

Message,TranslateMessage si WaitMessage si sunt grupate in nucleul de

functii API Windows,in biblioteca Kernel32.dll.Pentru a putea apela aceste

functii,trebuie sa fie declarate extern,impreuna cu fila .Dll sursa.

Prin combinarea acestor functii se poate crea functia responsabila

pentru preluarea,filtrarea si interpretarea mesajelor.De obicei se utili-

zeaza un tampon de memorie de tip stiva,in care mesajele sunt arhivate

in ordinea in care au fost receptionate.Periodic,la interval de cateva

nanosecunde,mesajele din stiva sunt preluate,filtrate si expediate catre

obiectul care asteapta mesajul respectiv.Alternativ,se pot utiliza tipuri

diferite de pointeri,ce apeleaza direct functiile de explotatre a mesaje-

lor (asa numitele functii delegate).Dupa ce mesajele au fost prelucrate,

se apeleaza functia pentru eliberarea tamponului de memorie.Cu cat tampo-

nul de memorie este mai mare si cu cat intervalul dintre doua citiri este

mai mic,cu atat functia de prelucrare a mesajelor este mai performanta.

In cazul aplicatiilor mari,cu multe controale si numeroase operatii per

secunda,numarul de mesaje eliberate este foarte mare.Daca tamponul de

preluare a mesajelor este prea mic,sau intervalul de citire este prea

mare,exista riscul ca unele dintre mesaje sa nu mai poata fi preluate in

tampon,sau sa fie suprascrise,fapt ce poate genera diverse erori de exe-

cutie.Tot la acest nivel,se face si filtrarea mesajelor ce urmeaza sa

determine un raspuns semnificativ (sa apeleze o functie delegat).Pentru

acest scop,se pot utiliza functii de filtrare formate din conditii de

tip IF...Them si Select Case...End Case,sau se pot utiliza tabele de

adevar,selectii de tip SQL,matrice cu solutii preformate,grile de calcul

sau file pentru calcul tabelar,etc.Puteti alege oricare dintre solutii,in

functie de experienta anterioara.

In principiu,mesajele Windows sunt compatibile cu un numar destul de

mare de programe si limbaje de programare.Este posibil sa gasiti diverse

obiecte de tip ActiveX,create special pentru a organiza si gestiona eve-

nimentele Windows.Puteti utiliza aceste obiecte,cu conditia de a testa

compatibilitatea cu mediul Visual Basic.Ori de cate ori un eveniment oare-

care genereaza erori de executie,verificati care este mesajul exploatat si

ce alte functii exploateaza acelasi mesaj.De cele mai multe ori,exista

mai multe obiecte,sau mai multe functii ce raspund simultan la acelasi

mesaj.De obicei,solutia cea mai simpla este sa alegeti un alt eveniment,

astfel incat sa nu existe interactiuni.

Pentru ca un eveniment sa poata fi executat,este necesar ca obiectul

de destinatie sa fie activat si selectat si sa poata prelucra mesajele

din tipul respectiv.

EXEMPLU: butoanele nu pot exploata mesajele transmise de la tastatura,

deoarece nu sunt obiecte destinate pentru editarea datelor.Pentru a uti-

liza evenimentele tastaturii,trebuie ca obiectul ce are "focus", sa fie

un obiect destinat pentru editare (de exemplu o fereastra).

Evenimentele reprezinta o piatra de temelie pentru conceptia si modul

de implementare a oricarui program vizual.Este esential sa intelegeti

toate amanuntele legate de acest concept.


-18-

CONTROLUL FLUXULUI DE EXECUTIE -este modalitatea de organizare a progra-

mului,prin care executia programului sare de la un bloc de date la altul,

in functie de necesitatile de moment.Pentru executia unui program,proce-

sorul principal contine un tampon de memorie,in care preia blocurile de

cod ce urmeaza sa fie executate.Imediat dupa executarea lor,tamponul este

eliberat si preia urmatoarele blocuri de cod.

Pentru a dirija modul in care se executa aceste salturi in program,se

utilizeaza in principal evenimentele generate de actiunile utilizatorului:

apasa un buton,editeaza un text,selecteaza cu mouse un obiect oarecare,etc

Exista si alte modalitati prin care se poate controla fluxul de executie.

Pentru a efectua diverse tipuri de salt,in interiorul unei proceduri sau

a unui modul,se pot utiliza instructiunile: Go Sub...Return,Go To,On Error

On...GoSub,On...Goto.Pentru a executa o iesire fortuita dintr-un program

sau dintr-o procedura,se pot utiliza instructiunile End,Exit si Stop,sau

Functia DoEvents (care intrerupe executia pana cand sistemul de operare

proceseaza toate evenimentele aflate "pe linie de asteptare" in coada

stivei).Pentru a executa diverse tipuri de repetitii,se pot utiliza bucle

de rpetitie de tip: Do...Loop,For...Next,For Each...Next,While...Wend sau

With.Pentru a slecta dintr-un grup de optiuni,se pot utiliza functiile:

Choose si Switch sau instructiunile If...Then...Else si Select Case.Iar

Yüklə 0,98 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   10




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin