|
sati sageata spre dreapta de doua ori)
|
səhifə | 7/10 | tarix | 03.11.2017 | ölçüsü | 0,98 Mb. | | #29921 |
| sati sageata spre dreapta de doua ori).
EXEMPLU: deschideti din nou proiectul precedent si Menu Editor.
Selecati cu mouse submeniul Micsoreaza si apoi apasati butonul Insert
Apasati de doua ori sageata spre dreapta,apoi completati casetele astfel:
Caption = Maximizeaza Name = mnuMax Index = 11 Shortcut = Ctrl + M
Meniul Marime va fi reprezentat in caseta de afisaj astfel:
Marime
....Mareste
........Maximizeaza Ctrl+M
....Micsoreaza
Inchideti fereastra Menu Editor cu Ok,apoi selectati Marime si Mareste,
pentru a afisa noul submeniu.Executati un click in noul submeniu si apoi
editati procedura de raspuns:
Private Sub mnuMax_Click(Index As Integer)
Form1.Width = Form1.Width + 2000
Form1.Height = Form1.Height + 1000
End Sub
Inchideti fereastra Code si verificati fereastra cu Ctrl + F5.Verificati
noul submeniu.Observati ca meniul Mareste nu mai este functional si ca
procedura de raspuns nu mai poate fi apelata ( si nici nu poate accepta
o combinatie de tip shortcut).Prin selectarea cu mouse,meniul Mareste nu
face decat sa afiseze noul submeniu (sau lista de submeniuri).
Daca doriti sa lasati un spatiu gol in lista de submeniuri,apasati o
data sageata spre dreapta (adaugati cele patru puncte) si completati caseta
Name,dar lasati caseta Caption goala (eventual adaugati si un index).
-49-
Meniurile pot fi de doua tipuri: meniuri fixe si meniuri popup,denumite
si meniuri verticale sau meniuri de derulare.Meniurile fixe sunt prezente
in aplicatie in orice moment si in aceeasi pozitie fixa,in timp ce meniu-
rile popup pot fi afisate doar atunci cand este nevoie de ele si pot avea
o localizare variabila.Meniurile de tip popup sunt afisate de obicei cu
ajutorul unui click drept de mouse,la pozitia actuala a indicatorului
mouse,dar pot fi declansate de orice alt eveniment,sau pot fi afisate la
o locatie fixa prestabilita.Pentru a afisa un meniu de tip popup se utili-
zeaza metoda PopupMenu.
EXEMPLU: -deschideti proiectul anterior
-deschideti fereastra View Code si editati urmatoarea procedura
Click:
Private Sub Form_Click()
Form1.PopupMenu mnuCulori(1)
End Sub
Inchideti fereastra Code si verificati fereastra cu Ctrl+F5.Apoi executati
un click de mouse in fereastra Form1.Se va deschide automat meniul Culori,
la pozitia actuala a mouse-ului.
Un meniu de tip Popup se creaza la fel ca si un meniu obisnuit,cu aju-
torul ferestrei Menu Editor.Este esential insa,ca meniul sa contina si
submeniuri si o cifra de indexare ce va fi utilizata ca argument pentru
functia PopupMenu.
In mod conventional,meniurile popup sunt declansate de un click drept
de mouse,dar se poate utiliza orice alt eveniment (in exemplul de mai sus
s-a utilizat evenimentul Click).
Meniurile de tip popup prezinta avanatjul ca nu ocupa din spatiul gra-
fic al aplicatiei si pot fi declansate doar in momentul potrivit.In rest,
meniurile Popup au aceeasi functionalitate ca si meniurile fixe.
Pentru controlul evenimentelor de la nivelul meniurilor,sistemul Win-
dows utilizeaza urmatoarele mesaje interne: WM_INITMENU,WM_INITMENUPOPUP,
WM_MENUCHAR si WM_MENUSELECT.Mesajele nu sunt foarte numeroase si sunt
destul de discriminative,astfel incat operatiile controlate cu ajutorul
meniurilor se executa rapid si fara erori.
Exista o polemica intreaga prin care se recomanda utilizarea meniurilor
ori de cate ori este posibil.Totusi,menurile sunt din ce in ce mai putin
prezente in aplicatii,deoarece un buton este ceva mai simplu de adaugat si
mai direct.In plus,un numar mare de programatori nu utilizeaza un plan
general al aplicatiei,ci incep sa programeze si adauga controalele nece-
sare pe parcurs.Pentru fiecare idee noua,adauga cate un buton,sau un alt
control simplu,fara sa tina cont de aspectul global al aplicatiei.Acest
gen de implementare este valabil atunci cand doriti sa obtineti o solutie
simpla,cat mai rapid.Atunci cand doriti insa sa realizati o interfata
grafica,menita sa dureze un timp indelungat,trebuie sa tineti cont de
fiecare amanunt.
O solutie alternativa,este sa utilizati un singur buton,cu care puteti
deschide o fereastra noua,in care meniul a fost inlocuit cu diverse con-
troale (pentru a obtine un aspect mai performant).In acest mod,se prote-
jeaza si memoria de operare si se obtine si aspectul dorit (butoane cu
diverse imagini de tip BitMap sau arii grafice ce pot activa diferite
functii si operatii).Solutia optima se va alege in functie de experienta
si tabiet-urile programatorului (sau preferintele utilizatorului).
-50-
BARA DE CONTROALE STANDARD (Toolbox)
Este principalul instrument de lucru destinat pentru adaugarea de con-
troale vizuale de tip standard,sau de tip ActiveX.Daca nu este activata,
se poate activa din meniul View,selectand optiunea Toolbox.
Bara de controale standard se afiseaza implicit in partea din stanga
a ferestrei Project si contine o serie de pictograme,prin care sunt repre-
zentate controalele standard.Controalele standard,sunt denumite si con-
troale intrinseci datorita faptului ca definitia lor este inclusa in
nucleul programului.Nu mai este necesar sa derivati aceste obiecte din
clasa de baza,ci pot fi adaugate in proiect cu un simplu click de mouse.
Controalele standard sunt: Pointer,PictureBox,Label,TextBox,Frame,CheckBox
CommandButton,OptionButton,ComboBox,ListBox,HScrollBar,VScrollBar,Timer,
DriveListBox,DirListBox,FileListBox,Shape,Line,Image,Data,OLE.
La aceste controale,puteti adauga in orice moment,un set oarecare de
obiecte de tip ActiveX,pe care le puteti selecta alegand din meniul Pro-
ject optiunea Controls (bifati caseta checkbox din lista si apoi apasati
butonul Apply).
Controalele de tip standard au fost concepute pentru a fi adaugate in
proiect in etapa de design.Proprietatile si metodele lor pot fi apelate
si in etapa de executie,dar includerea lor in proiect se face doar in
etapa de design.Daca doriti sa creati astfel de obiecte cu ajutorul unor
rutine automate,trebuie sa creati o clasa noua,derivata din clasa standard
si apoi sa creati obiecte din noua clasa.
Daca nu sunteti familiarizati cu pictograma fiecarui tip de control,
este suficient sa amplasati indicatorul mouse deasupra pictogramei si se
va afisa automat numele controlului respectiv.
Pentru a adauga un control standard in proiect,executati un dublu click
pe pictograma respectiva (trebuie sa existe un proiect deschis).
EXEMPLU: -deschideti un proiect nou de tip Strandard.exe
-cautati in Toolbox controlul denumit CommandButton
-executati un dublu click pe pictograma CommandButton
In fereastra Form1,se va adauga automat un buton,amplasat in centrul
ferestrei.In fiecare colt,si in centrul laturilor,sunt simbolizate si
niste patratele mici albastre.Puteti utiliza aceste patratele pentru a
redimensiona butonul.Selectati un astfel de patratel albastru cu mouse si
trageti cu butonul mouse apasat,pana cand obtineti dimensiunea dorita.
Acelasi rezutat se poate obtine si utilizand proprietatile Width si
Height din fereastra Properties.
Pentru a putea deplasa butonul in alta pozitie,selectati butonul cu
indicatorul mouse,in mijlocul butonului si apoi trageti cu butonul mouse
apasat,pana cand deplasati butonul in pozitia dorita.Acelasi rezultat se
poate obtine utilizand proprietatile Top si Left din fereastra Properties.
Pentru a elimina un control din proiect,executati un click drept de
mouse pe controlul respectiv si alegeti optiunea Cut.
Pentru a copia (multiplica) un control,executati un click drept de
mouse pe control,alegeti optiunea Copy,apoi executati tot un click drept
de mouse in fereastra Form1,in pozitia in care doriti sa amplasati noul
control si alegeti optiunea Paste.
Pentru a schimba numele butonului,deschideti fereastra Properties,apoi
selectati butonul,alegeti proprietatea Caption si editati textul dorit.
De exemplu editati textul : CULORI.
-51-
Pentru ca butonul sa fie functional,trebuie sa editati o procedura.Cel
mai frecvent se utilizeaza procedura Click().Executati un dublu click de
mouse pe buton (in fereastra de design).Se va deschide automat fereastra
Code cu scheletul procedurii Command1_Click().Completati procedura astfel:
Private Sub Command1_Click(Index As Integer)
Randomize
Form1.BackColor = RGB(Rnd * 250,Rnd * 250,Rnd * 250)
End Sub
Acum puteti verifica exercitiul cu Ctrl+F5.Lansati fereastra si apasati
butonul de cateva ori.Apoi inchideti fereastra (cu butonul X,din colt).
Pentru ca sa puteti inchide fereastra Form1 mai usor,puteti adauga un
buton special.Executati din nou un dublu click pe pictograma CommandButton
din Toolbox si apoi deplasati butonul in pozitia dorita.
Deschideti fereastra Properties si denumiti butonul Exit (setati pro-
prietatea Caption).
Apoi executati un dublu click pe cel de al doilea buton si editati
urmatoarea procedura:
Private Sub Command2_Click()
End
End Sub
Executati din nou fereastra cu Ctrl+F5.Utilizati butonul CULORI pentru
a schimba culoarea ferestrei si iesiti din aplicatie cu butonul EXIT.
Comanda End este special conceputa pentru a intrerupe executia programului
si a reveni la fereastra de design.Puteti utiliza aceasta comanda pentru
intreaga etapa de design a unui proiect (cu un buton specializat).
Executati din nou exercitiul,si observati ca in timpul executiei,buto-
nul CULORI are in interior si un chenar desenat cu linie punctata.Acest
chenar,semnifica faptul ca in momentul respectiv,acela este contrulul care
are focus (adica programul asteapta comenzi sau instructiuni de la contro-
lul respectiv).Intr-o interfata cu mai multe controale,in momentul in
care selectati cu mouse unul dintre controale,fluxul de executie va astep-
ta mesaje de la controlul respectiv (asteapta un eveniment declansat de
controlul respectiv).Automat,controlul care are focus,va fi semnalizat cu
ajutorul unui astfel de chenar format din linii punctate.Pentru a deter-
mina activ controlul pe care doriti sa il activati la un anumit moment
dat (fara sa fie selectat cu mouse),se poate utiliza metoda SetFocus.
Acest gen de marcaj,are importanta mai ales in cazul programelor ce
executa automat o serie intreaga de operatii.De exemplu,sa presupunem ca
intr-o aplicatie oarecare programul va cauta o anumita data,dintr-o serie
de controale de tip lista.Daca exista o rutina de cautare automata,utili-
zatorul nu va trebui decat sa urmareasca in fereastra chenarul format din
linii punctate pentru a sti in ce lista cauta procesorul in momentul res-
pectiv.
Un control poate fi activat sau inactivat,cu ajutorul proprietatii
Enable.In exemplul de mai sus,puteti seta pentru butonul CULORI proprieta-
tea Enable = False.Executati din nou aplicatia si observati ca butonul
este colorat complet in gri,titlul este sters si este nefunctional.Pentru
ca butonul sa poata fi utilizat trebuie sa resetati proprietatea Enable
la valoarea True.
Prin acest procedeu,controalele pot fi activate sau inactivate si in
timpul executiei (De exemplu: -in functie de o parola de acces).
-52-
Un control inactivat nu primeste si nu emite mesaje.Ca rezultat nu este
implicat in nici unul dintre evenimentele ce au loc in program.Atunci cand
interfata grafica este foarte incarcata,se pot inactiva temporar o parte
dintre controale,tocmai pentru a limita numarul de evenimente posibile.O
alta solutie este ca activarea controalelor sa se faca succesiv,sau in
cascada,in etape.Un control poate fi inactivat si in etapa de depanare a
unui program,pentru a putea localiza mai usor sursa erorilor.
O alta proprietate interesanta este proprietatea Default.Daca este
setata True,butonul respectiv poate fi activat si de la tastatura,prin
simpla apasare a tastei Enter.Intr-o fereastra poate exista un singur
buton de tip Defalut (implicit).Daca setati unul dintre butoane Default,
restul butoanelor din fereastra vor fi setate automat Default = False.
Pentru a prezenta la un anumit moment dat doar o parte dintre controale
se poate utiliza si proprietatea Visible.Daca se seteaza Visible = False,
controlul respectiv nu va mai fi prezent in timpul executiei.Pentru a
afisa obiectul,la un moment dat oarecare,se va utiliza un eveniment oare-
care si o comanda pentru resetarea proprietatii.
EXEMPLU: in exemplul anterior (cel cu doua butoane) setati pentru cel
de al doilea buton (Exit) proprietatea Visible = False.Apoi adaugati
in fereastra de cod si urmatoarea procedura:
Private Sub Form_Click()
Command2.Visible = True
End Sub
Executati exercitiul cu Ctrl+F5.Butonul Exit nu se va afisa decat dupa ce
executati un click in fereastra.
Si acest procedeu se poate utiliza pentru a descongestiona spatiul
grafic din fereastra aplicatiei.Setarea proprietatii Visible are acelasi
efect ca si utilizarea metodelor Hide si Show.Practic,se pot realiza doua
sau mai multe interfete grafice,in aceeasi fereastra,aspectul grafic fiind
controlat de unul sau mai multe evenimente din fereastra (Exemplu: se pot
afisa seturi diferite de butoane,in functie o selectarea unei optiuni).
Pentru ca un buton sa afiseze un desen oarecare,sau o imagine de tip
BITMAP,se poate utiliza proprietatea Picture,conjugata cu proprietatea
Style.In prima etapa,schimbati proprietatea Style la valoarea Graphical,
apoi selectati proprietatea Picture,apasati butonul cu trei puncte si
navigati pana cand deschideti fila de tip .bmp dorita.Apoi confirmati cu
butonul Open.Daca doriti ca butonul sa afiseze o alta imagine atunci cand
este apasat,selectati proprietatea DisabledPicture si alegeti o alta
imagine de tip .bmp (navigati tot cu butonul cu trei puncte).
Pentru restul de proprietati,deschideti manualul Help,alegeti categoria
"command buttons,described" si apoi studiati cu atentie intreaga lista.
Pentru o orientare rapida se poate utiliza si fereastra Properties.Fiecare
dintre proprietatile unui control permite dezvoltarea unui set diferit de
solutii,iar prin combinarea lor se pot obtine practic o infinitate de
implementari.Pentru utilizator,este important doar ce text este afisat pe
buton si ce anume se executa in momentul in care este apasat butonul.Insa
pentru programator,exista o infinitate de nuante,ce nu pot fi descrise
exhaustiv in nici un manual.Trebuie sa exersati cat mai mult aceste tipuri
de solutii,pana cand va formati o experienta proprie.
Controalele de tip CommandButton au un numar relativ redus de metode,
insa pot controla un numar destul de mare de evenimente.
-53-
Pentru a creste cat mai mult performanta programelor d-voastra,este
bine sa exploatati cat mai judicios toate facilitatile oferite de fiecare
control.De exemplu,in cazul butoanelor de tip CommandButton,utilizatorul
nu constata decat rezultatul actiunilor efectuate in momentul in care
apasa pe buton.Programatorul poate insa sa execute si un numar complex de
operatii,asociate cu apasarea butonului respectiv,dar fara nici o legatura
cu actiunea principala.De exemplu,butonul care confirma alegerea unei
anumite optiuni,poate executa in background si o serie de operatii de
cleaning si management al memoriei,poate inregistra optiunea selectata,
sau poate comunica date pe un port paralel,etc.Uneori,simpla apasare a
unui buton,poate declansa doua sau mai multe evenimente,fiecare dintre
ele cu un rezultat diferit.
EXEMPLU: -deschideti un nou proiect de tip Standard.exe
-adaugati un buton in Form1 (dublu click in ToolBox)
-deschideti fereastra View Code si editati procedurile:
Private Sub Command1_Click()
Beep
End Sub
Private Sub Command1_MouseDown(Button As Integer,Shift As Integer, _
X As Single,Y As Single)
Form1.BackColor = RGB(250,0,0)
Command1.Caption = "ACTIVAT"
End Sub
Private Sub Command1_MouseUp(Button As Integer,Shift As Integer, _
X As Single,Y As Single)
Form1.BackColor = RGB(0,0,250)
Command1.Caption = "INACTIV"
End Sub
Executati exemplul cu Ctrl + F5.Apasati butonul si mentineti putin apasat,
apoi eliberati butonul.Observati ca in momentul in care este apasat,ferea-
stra se coloreaza in rosu si butonul afiseaza textul "ACTIVAT",iar in mo-
mentul in care se elibereaza butonul,fereastra se coloreaza in albastru si
butonul afiseaza textul "INACTIV".In plus,la terminarea unui ciclu complet
(apasat/eliberat) se executa si un sunet de tip Beep.
Practic,actiunea de a apasa butonul a fost descompusa in trei eveni-
mente diferite :1.-apasarea butonului 2.-eliberarea butonului si 3.-click
Pentru fiecare dintre cele trei evenimente se pot asocia un numar oarecare
de instructiuni,astfel incat codul sa fie cat mai compact si sa se execute
un numar cat mai mare de operatii/unitatea de timp.Prin acest gen de so-
lutie se elimina erorile accidentale generate de eventualele mesaje redun-
dante,preluate de la un alt control de acelasi tip.In plus,cu un singur
control se pot organiza mai multe seturi de operatii distincte.
Pentru a alege evenimentele cu care doriti sa lucrati,cel mai simplu
este sa utilizati fereastra View Code.Alegeti in caseta Object (prima)
optiunea Command1 iar in caseta Procedure (cea de a doua) se vor afisa
automat evenimentele controlului respectiv.Apasati butonul de derulare si
apoi alegeti evenimentul dorit.
O alta viziune asupra proiectului va poate oferi fereastra Project Ex-
plorer,sau fereastra Object Browser.Ambele se deschid din meniul View si
ofera o imagine de ansamblu a tuturor obiectelor,proprietatilor,metodelor
si evenimentelor din proiect.
-54-
Butoanele pot fi actionate si cu ajutorul liniilor de cod.Daca se ape-
leaza procedura Click,rezutatul este acelasi ca si atunci cand se apasa
butonul respectiv,cu diferenta ca fluxul de executie nu se va mai deplasa
la butonul respectiv ( nu primeste focus ).
EXEMPLU: -deschideti un proiect nou de tip Standard.exe
-adaugati doua butoane,denumite Rosu si Verde
-adaugati pentru fiecare buton cate o procedura:
Private Sub Command1_Click()
Form1.BackColor = RGB(250,0,0)
End Sub
Private Sub Command_Click()
Form1.BackColor = RGB(0,250,0)
End Sub
Pentru a controla cele doua butoane cu ajutorul unor linii de cod,putem
utiliza evenimentele Click si DblClick ale fereastrei Form1.Adaugati si
urmatoarele proceduri:
Private Sub Form_Click()
Command1_Click
End Sub
Private Sub Form_DblClick()
Command2_Click
End Sub
Executati exemplul cu Ctrl+F5.Observati diferenta: daca apasati cele doua
butoane,sau daca executati un click sau un dublu click in fereastra.In
cazul in care apasati un buton,acesta primeste focus (observati chenarul
format din linii punctate).In cazul in care apelati direct procedura,fara
sa apasati pe buton,chenarul format din linii punctate nu se deplaseaza
Dostları ilə paylaş: |
|
|