Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Controale ActiveX si Dialoguri

visual basic


Controale ActiveX si Dialoguri


Proiectele create īn Visual Basic for Applications pot fi completate cu o interfata utilizator evoluata, sub forma unor cutii de dialog la nivelul celor existente deja īn Microsoft Office. Performantele si aspectul dialogurilor utilizator sunt īmbunatatite prin posibilitatea de plasare a unor controale ActiveX (numite anterior controale OLE).



Un control ActiveX trebuie gāndit ca un obiect caruia i se pot stabili atribute (prin proprietati) si care recunoaste evenimente (este "viu").

Aceste controale, cu proprietati ajustabile, recunosc multiple evenimente. Astfel, prin scrierea procedurilor eveniment, interfata cu utilizatorul proiectului poate fi personalizata si diferentiata corespunzator.

Controalele ActiveX pot fi plasate si direct īn documentele aplicatiilor: documente Word, foi de calcul Excel, diapozitive PowerPoint. Inserarea acestora este facilitata de cutia de unelte Control Toolbox, care poate fi afisata la fel cu orice alta bara de unelte.

Aplicatiile din Office 97 utilizeaza aceleasi unelte pentru proiectarea dialogurilor, astfel īncāt prezentarea care urmeaza este valabila pentru toate proiectele VBA (din Word, Excel, PowerPoint si, cu unele exceptii, pentru Access).

Proiectarea boxelor de dialog utilizator

Crearea unui dialog utilizator (termenul utilizator este adaugat pentru diferentierea de dialogurile built-in, īncorporate mediului si se refera la cel care scrie codul si nu la cel care īl va utiliza, confuzia nefiind atāt de mare īncāt sa trebuiasca o denumire speciala) necesita parcurgerea mai multor etape:

    • crearea unei forme (form sau UserForm), care constituie suportul pe care sunt adaugate controalele;
    • plasarea controalelor pe forma;
    • stabilirea proprietatilor pentru controale;
    • scrierea procedurilor de raspuns la evenimentele formei si controalelor plasate pe ea.

Atunci cānd se proiecteaza un dialog, īn Visual Basic Editor, suntem īn modul de proiectare (design mode). Īn acest mod se pot edita controalele si controalele nu reactioneaza la evenimente. La executia boxei de dialog, deci la afisarea dialogului exact cum va fi vazut de un utilizator, suntem īn modul de executie (run mode). Controalele raspund evenimentelor īn modul executie.

Crearea unui nou dialog

Orice boxa de dialog utilizator din proiect este o forma (sau UserForm). O UserForm noua contine o bara de titlu si o zona goala īn care se pot plasa controale.

    • Din meniul Insert, īn Visual Basic Editor, se alege UserForm.

Este afisata o forma noua ale carei proprietati se stabilesc īn fereastra Properties (vezi figurile atasate, īn figura cu forma sunt plasate si doua controale).

Proprietatile formei sunt clasificate īn categoriile:

    • aparenta (Appearence);
    • comportare (Behaviour);
    • font (Font);
    • Diverse (Misc);
    • imagine (Picture);
    • pozitie (Position);
    • defilare (Scrolling).

dupa cum se vizualizeaza alegānd fisa Categorized din fereastra Properties.

Proprietatile de aparenta se refera la culorile utilizate, la efectele vizuale de umplere etc.

Proprietatile de comportare descriu modul de continuare a actiunilor la parasirea ultimului control de pe forma (Cycle) sau accesul utilizatorului la obiect (Enabled).

Prin Font se specifica fontul utilizat implicit pe forma (poate fi modificat pentru fiecare control īn parte).

Īn Misc se gasesc proprietatile care stabilesc numele formei, memoria utilizata la afisare, imaginea mouse-ului etc.

Īn Picture se dau specificatiile imaginii utilizate pentru pavarea formei.

Īn Position sunt specificatiile de pozitie si dimensiuni.

Īn Scrolling se fixeaza vizibilitatea si pozitia barelor de defilare.

Concomitent cu afisarea formei, īn Design Mode, devine vizibila si cutia cu controale, Toolbox, (vezi figura).

Pentru a adauga un control pe forma, se trage controlul dorit pe forma si se ajusteaza dimensiunile īn mod uzual, sau se click-eaza controlul dorit, cursorul devine cursor cruce si se īntinde pe forma cu dimensiunile dorite.

Operatiunea de dragare din cutie pe forma poate fi efectuata si īn sens invers: tragerea unui control, sau a unui grup de controale, de pe forma īn cutie de unelte creeaza un template care poate fi reutilizat.

Dupa adaugarea controalelor pe forma, se utilizeaza comenzile din meniul Format sau butoanele de pe bara de unelte UserForm din VBE pentru a ajusta alinierea si spatierea controalelor. Se utilizeaza dialogul Tab Order (din meniul View) pentru a modifica ordinea de parcurgere a controalelor la tastari succesive de Tab (īn executie – run time).

VBE stabileste proprietatea TabIndex a controloalelor pentru a determina ordinea la Tab-uri.. Daca se doreste ca utilizatorul sa nu aiba acces prin Tab la un control, se va stabili proprietatea TabStop la False. Pentru aceasta, se actioneaza butonul drept al mouse-ului pe control si selectarea comenzii Properties din meniul contextual.

Scrierea procedurilor de raspuns la evenimente

Fiecare forma sau control recunoaste un set predefinit de controale, care pot fi declansate fie de utilizator, fie de sistem. De exemplu, un buton de comanda recunoaste evenimentul Click declansat de actionarea cu mouse-ul, iar forma recunoaste evenimentul Initialize care apare atunci cānd este initializata.

Pentru a scrie o procedura eveniment, se deschide fereastra Code prin dublu click pe UserForm sau pe controlul respectiv, selectarea numelui evenimentului īn boxa Procedure a ferestrei Code. Procedurile eveniment au denumiri create īntr-un mod standard: numele formei sau controlului, liniuta de subliniere si numele evenimentului, de exemplu Command1_Click, UserForm_Deactivate etc.

Evenimentele recunoscute de un obiect sunt listate īn boxa Procedure a ferestrei Code asociate, cele care au deja atasate proceduri fiind scrise īn bold.

La scrierea codului de raspuns la evenimente, controalele sunt numite cu denumirile existente la acel moment. Cum aceste denumiri pot fi modificate oricānd īn dezvoltarea proiectului, procedurile eveniment atasate nu se redenumesc īn mod automat. Se recomanda astfel ca denumirile sa fie acordate īnainte de scrierea procedurilor respective, īn caz contrar orice modificare a numelor trebuie sa fie īnsotita de modificarile denumirilor procedurilor.

Controale

Īn aceasta sectiune se explica, pe scurt, principalele controale disponibile īn proiectarea dialogurilor.

Label Control

Un control Label este utilizat pentru afisarea unui text, descriptiv, cum ar fi titluri, captari, instructiuni de ajutor. Textul afisat nu este si nu poate fi legat de surse de date.

Proprietatea implicita este Caption, reprezentānd textul afisat.

Evenimentul implicit este Click, declansat la actionarea butonului stāng mouse pe control.

TextBox Control

Afiseaza informatie scrisa de utilizator sau primita dintr-o multime organizata de date.

Daca TextBox este legata de o sursa de date, atunci modificarea informatiei afisate produce si modificarea informatiei din sursa de date (de exemplu un cāmp dintr-o tabel). Informatia afisata poate fi formatata doar unitar (acelasi font, acelasi stil).

Proprietatea implicita este Value, reprezentānd continutul boxei.

Evenimentul implicit este Change, declansat la modificarea proprietatii Value.

ListBox Control

Afiseaza o lista de valori si permite selectarea unei sau mai multor intrari din lista.

Īntr-o ListBox cu o singura coloana se poate adauga o intrare prin metoda AddItem.

Daca ListBox este legata de o sursa de date, atunci este memorata valoarea selectata īn sursa.

Controlul ListBox poate sa apara ca o lista ori ca un grup de controale OptionButton sau CheckBox. Pentru aceasta din ultima optiune se va stabili proprietatea ListStyle la Option; proprietatea MultiSelect va determina atunci intrarile: Single – butoane radio, Multi sau Extended – boxe de control.

Proprietatea implicita este Value, reprezentānd valoarea selectata curent (din coloana data de proprietatea BoundColumn).

Evenimentul implicit este Click.

ComboBox Control

Combina posibilitatile de la ListBox si TextBox: utilizatorul poate introduce o valoare noua (ca la TextBox), sau poate selecta o valoare dintr-o lista (ca la ListBox). Grafic, un control ComboBox arata ca o lista ascunsa (doar o linie este afisata).

Daca se leaga controlul la o sursa de date (celule dintr-o foaie de calcul) va fi afisata valoarea selectata īn sursa. Pentru un control cu mai multe coloane, proprietatea BoundColumn determina unde se afiseaza sursa de date.

Proprietatea implicita este Value, reprezentānd valoarea selectata.

Evenimentul implicit este Change.

CheckBox Control

Afiseaza starea selectat / neselectat a unui element. Este utilizat pentru alegeri īntre doua alternative (Yes/No, True/False sau On/Off.).

Selectarea este afisata prin prezenta unui X īn caseta corespunzatoare si starea curenta este Da, Adevarat, Prezent etc. Neselectarea este aratata printr-o caseta vida si indica starea Nu, Fals, Absent etc. Īn functie de valoarea proprietatii TripleState, controlul poate sa aiba si valoarea Null.

La legarea de o sursa de date, schimbarea starii se reflecta īn modificarea valorii sursei. Un CheckBox suspendat (disabled) afiseaza starea dar nu poate fi modificat.

Proprietatea implicita este Value, , adica Null – starea null (nici selectat nici deselectat), (–1) – True (selectat), 0 – False (deselectat).

Evenimentul implicit este Click.

OptionButton Control

Permite afisarea elementului selectat dintr-un grup de optiuni. Controlul este cunoscut si ca buton radio (apasarea unui buton de selectare a unei game de lungimi de unda le deselecteaza pe celelalte). Este de observat ca butoanele de optiune dintr-un frame sunt mutual exclusive. Figura este capturata din modul Design.

Daca un OptionButton este legat la o sursa de date, controlul poate sa arate valori Yes/No, True/False sau On/Off, corespondentele īntre valori si starea controlului fiind evidente. Schimbarea starii butonului modifica si sursa.

Un control inhibat este desenat sters si nu arata nici o valoare. Īn functie de proprietatea TripleState, controlul poate avea si valoarea Null.

ToggleButton Control

Arata starea de selectare a unui element (similar unui checkbox) prin imaginea grafica a unui buton apasat sau nu.

Daca un control ToggleButton este legat de o sursa de date, controlul arata valoarea curenta a sursei ca Yers/No, True/False, On/Off sau ceva similar. Butonul apasat reprezinta Yes, True sau On. Daca ToggleButton este legat de o sursa de date, schombarea starii controlului se reflecta si īn valoarea sursei.

Un control ToggleButton inhibat (disabled) este desenat neclar, arata totusi valoarea dar nu poate fi modificat.

Proprietatea implicita este Value, adica Null – starea null (nici selectat nici deselectat), (–1) – True (selectat), 0 – False (deselectat).

Evenimentul implicit este Click.

CommandButton Control

Este utilizat pentru indicarea īnceperii, terminarii sau īntreruperii unei actiuni. Este reprezentat grafic precum butoanele uzuale OK, Cancel etc. din dialogurile aplicatiilor din Office (si nu numai).

Īn general, pentru realizarea scopului este utilizata procedura (sau macro) asociat evenimentului Click. Pe un CommandButton se poate afisa text (proprietatea Caption), imagine (proprietatea Picture) sau ambele.

Proprietatea implicita este Value, īntotdeauna False. Stabilind proprietatea Value drept True (īntr-o procedura), initiaza evenimentul Click al butonului de comanda.

Evenimentul implicit este Click.

TabStrip Control

Este utilizat, de obicei, pentru prezentarea unor seturi de informatii (ca valori ale unor controale grafice), fiecare grup de informatii apartinānd altei entitati. Prin urmare structura informatiei afisate este īntotdeauna aceeasi, dar se refera la entitati diferite (persoane, fapte etc.).

Din punct de vedere grafic, se poate confunda acest control cu MultiPage, diferenta fiind aceea ca la TabStrip zona de afisare (client region) este comuna tuturor fiselor (doar informatia se modifica), pe cānd la MultiPage fiecare fisa (pagina) are o zona proprie, cu controale proprii.

Se poate spune ca daca se pastreaza structura informatiei, atunci se va utiliza un control TabStrip, un tab definind purtatorul informatiilor. Daca informatia este structurata īn categorii, atunci se poate utiliza controlul MultiPage, fiecare categorie avānd propria zona client.

Observatie. TabStrip este implementat ca un container a unei colectii Tabs de obiecte Tab.

Proprietatea implicita pentru TabStrip este SelectedItem, care returneaza obiectul Tab selectat si este folosit la controlarea programatica a obiectului.

Evenimentul implicit este Change, declansat la selectarea altui Tab.

MultiPage Control

Prezinta mai multe pagini de informatii distincte. Spre deosebire de controlul TabStrip, selectarea altei pagini poate prezenta o alta structura de informatii.

Īn acest mod se pot afisa seturi consistente (categorii) de informatii, pastrānd īn acelasi timp unitatea īntregii īnregistrarii.

Observatie. MultiPage este implementat ca un container a unei colectii Pages de obiecte Page.

Proprietatea implicita este Value, care returneaza indexul paginii avtive curente (īn colectia Pages).

Evenimentul implicit este Change, declansat la schimbarea paginii.

Frame Control

Reprezentat grafic ca un chenar cu o denumire, controlul serveste la gruparea unor controale. Grupul poate fi unit doar prin categoria de informatii, permitānd utilizatorului o identificare rapida a controalelor, dar, pentru anumite controale cum ar fi OptionButton, gruparea are efect si īn comportarea controalelor din grup. Exemplul de la OptionButton arata un Frame care include butoane radio: acestea sunt mutual exclusive. Exemplul de la ToggleButton arata un Frame similar, dar butoanele pot fi actionate īn orice configuratie.

Evenimentul implicit este Click.

Image Control

Permite afisarea unui imagini (poze) pe o forma, ca element al datelor reprezentate pe forma si nu ca un simplu element decorativ. De exemplu fotografia unui angajat īn forma cu informatiile personale ale angajatului. Cu alte cuvinte, nu se controleaza aspectul grafic al imaginii, ci modul cum ea apare īn control (de unde, cāt de mare etc.).

Controlul permite taierea (retezarea) imaginii, dimensionare, mariri, dar nu permite editarea propriu-zisa (care va fi efectuata printr-un program de grafica).

Daca se da controlului o dimensiune egala cu cea a formei, atunci Image poate furniza un fundal pe care se pot pozitiona alte controale.

Sunt suportate formatele .bmp, .cur, .gif, .ico, .jpg, .wmf de fisiere grafice.

Evenimentul implicit este Click.

Utilizarea dialogurilor utilizator

Pentru a schimba informatii cu utilizatorul proiectului printr-o cutie de dialog utilizator, trebuie ca

    • dialogul sa fie afisat,
    • sa se accepte actiunile utilizatorului asupra controalelor din dialog si, la īnchiderea dialogului,
    • sa se dispuna de informatia introdusa de utilizator (pentru a fi procesata, pentru a controla actiunile ulterioare etc.).

Afisarea unui dialog

Afisarea unui dialog pentru testare, deci īn Design Mode, se realizeaza prin comanda Run Sub/UserForm (meniul Run din VBE). Afisarea dialogului īn mod programatic se realizeaza utilizānd metoda Show dupa modelul

[object.]Show

daca object nu este specificat, atunci se va considera implicit dialogul asociat modulului activ UserForm.

Daca obiectul specificat nu este īncarcat la apelarea metodei, atunci VB īl īncarca automat. O cutie de dialog utilizator este īntotdeauna modala, deci utilizatorul trebuie sa raspunda (chiar daca prin īnchidere) īnainte de a utiliza altceva din aplicatie. Nu se executa alte instructiuni pāna cānd dialogul nu este ascuns sau īnchis (descarcat – unloaded). Este posibil totusi sa se lucreze īn alte aplicatii.

Obtinerea si stabilirea proprietatilor īn executie

Pentru modificari ale proprietatilor unui control este necesar ca valorile acestora sa fie citite si redefinite īn timpul executiei (Run time sau Run Mode).

Asemenea actiuni sunt, de exemplu, utile atunci cānd pentru un control se dau valori implicite (default), deci valori cu care dialogul sa se afiseze indiferent de actiunile de la alte afisari anterioare. Īn acest caz, se va adauga codul corespunzator īn procedura de eveniment Initialize a dialogului. Afisarea formei declanseaza evenimentul Initialize si astfel au loc si atribuirile de valori specificate.

Exemplul urmator presupune existenta unei forme UserForm, denumita frmPhoneOrders, care are

    • un control TextBox, denumit txtCustomerName,
    • un control ListBox, denumit lstRegions,
    • un control CheckBox, denumit chkSendExpress.

Codul urmator realizeaza initializarea valorilor de pe forma, īncāt orice aratare a formei se realizeaza īn aceeasi configuratie:

Private Sub UserForm_Initialize()
With frmPhoneOrders
.txtCustomerName.Text = "Mamma S.R.L." 'se initializeaza TextBox
.chkSendExpress.Value = True 'se initializeaza CheckBox
With .lstRegions
.AddItem "Iasi" 'se initializeaza ListBox
.AddItem "Suceava"
.AddItem "Botosani"
.ListIndex = 2 'se selecteaza ultima intrare
End With
End With
End Sub

Este de remarcat ca desi īn modelele de obiecte Word, Excel si PowerPoint colectiile sunt indexate de la 1, īn tablourile si colectiile asociate formelor se foloseste indexarea de la 0. De aici selectarea ultimei intrari (cu numarul de ordine 3) din lista prin instructiunea ListIndex = 2.

Daca se doreste stabilirea valorilor initiale pentru un control, dar apelurile ulterioare sa retina modificarile efectuate, se vor da aceste valori īnainte afisarii dialogului. Urmatorul exemplu arata o procedura care afiseaza forma dupa atribuirea valorilor implicite.

Private Sub GetUserName( )
With UserForm1
.lstRegions.AddItem "North"
.lstRegions.AddItem "South"
.lstRegions.AddItem "East"
.lstRegions.AddItem "West"
.txtSalesPersonID.Text = "0000"
.Show
End With
End Sub

Prin setarea proprietatilor unui control si aplicarea metodelor īn timpul executiei, se pot efectua modificari īntr-un dialog utilizator care se executa, modificari aparute ca raspuns la actiunile si alegerile utilizatorului. De exemplu, accesibilitatea unor controale poate fi controlata prin modificarea proprietatii Enabled. Daca proprietatea este setata pe False, atunci utilizatorul nu poate accesa controlul: cum ar fi interzicerea accesului la butonul OK pāna cānd o anumita informatie nu este completata īn dialog.

Exemplul urmator arata cum accesul la un grup de butoane radio nu este permis decāt daca o CheckBox este marcata:

Private Sub CheckBox1_Change()
With Me ' Me se refera la forma curenta
If .CheckBox1.Value = True Then
.OptionButton1.Enabled = False
.OptionButton2.Enabled = False
.OptionButton3.Enabled = False
Else
.OptionButton1.Enabled = True
.OptionButton2.Enabled = True
.OptionButton3.Enabled = True
End If
End With
End Sub

Prin intermediul metodei SetFocus se controleaza focalizarea. Un control care are focusul este cel care raspunde la intrarile din tastatura. De exemplu

Private Sub Image1_Click ()
Me.CheckBox1.SetFocus
End Sub

realizeaza trecerea focusului la CheckBox1 atunci cānd imaginea din controlul Image1 (unde este scrisa procedura eveniment) este click-ata.

Īn timpul executiei se pot manevra si proprietatile/metodele formei. Īn acest mod se modifica dinamic aspectul formei.

Astfel, o utilizare frecventa este aceea cānd se modifica portiunea afisata a formei, vizualizānd (deci dānd acces) controale suplimentare, sau ascunzāndu-le (nu mai pot fi accesate, desi nu sunt inhibate). Īn acest scop se opereaza cu proprietatea Height.

Presupunem ca o forma, cu un buton radio, este dimensionata īn proiectare cu Height = 120 si se adauga un control, de exemplu un CheckBox, la baza formei, controlul fiind pozitionat prin proprietatea Top setata la mai mult de 120 (deci īn afara zonei afisate din forma). Se adauga urmatoarele proceduri eveniment:

Private Sub UserForm_Initialize ()
Me.Height = 120 'Orice afisare a formei readuce īnaltimea la 120
End Sub
Private Sub OptionButton1_Click ()
With Me
.Height = 300 – .Height
'Modificarea butonului radio basculeaza īntre cele doua dimensiuni ale formei
End With
End Sub

Pentru ca exemplul sa functioneze corect se presupune ca forma extinsa la 180 afiseaza si boxa de control.

Īn exemplul urmator se arata cum putem parcurge informatii printr-un obiect TabStrip. Valoarea afisata īntr-o boxa text este modificata dupa indexul tab-ului selectat:

Private Sub TabStrip1_Click (ByVal Index As Long)
If Index = 0 Then
Me.TextBox1.Text = "7710 Park Lane"
ElseIf Index = 1 Then
Me.TextBox1.Text = "5520 5th Avenue"
End If
End Sub

De amintit ca numerotarea īncepe de la 0 īntr-o colectie de pe o forma.

Validarea informatiilor introduse de un utilizator este un alt subiect important īn procesarea unui dialog. Pentru efectuarea verificarilor ca utilizatorul a introdus tipul corect de informatii printr-un control, se va testa valoarea atunci cānd controlul pierde focusul sau cānd īntregul dialog este īnchis. Evenimentele Enter si Exit pot fi utilizate īn acest scop.

Enter apare imediat īnainte ca un control sa primeasca efectiv focusul de la alt control de pe aceeasi forma. Exit apare imediat īnainte ca un control sa piarda focusul īn favoarea altui control de pe aceeasi forma. Sintaxa procedurilor eveniment respective este

Private Sub object_Enter( )

Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)

unde

object este un nume valid de control care recunoaste evenimentul

Cancel este starea evenimentului: False arata procesarea evenimentului de catre control (optiunea implicita); True arata ca evenimentul este tratat de aplicatie si focusul ramāne pe controlul curent.

Deoarece evenimentul Enter se declanseaza īnainte ca focusul sa fie dat unui control, poate fi utilizat pentru afisarea unui text explicativ, de procesare a respectivului obiect.

Īn scrierea procedurii pentru Exit nu trebuie uitata atribuirea valorii True argumentului pentru ca focusul sa ramāna pe controlul curent.

De studiat si metoda SetFocus prin care un anumit control de pe forma primeste focusul.

Urmatorul exemplu previne utilizatorul sa paraseasca o zona text īn care trebuie sa introduca neaparat o valoare numerica:

Private Sub txtCustAge_Exit (ByVal Cancel As MsForms.ReturnBoolean)
If Not IsNumeric(txtCustAge.Text) Then
MsgBox "Vārsta trebuie sa fie numerica"
Cancel = True
End If
End Sub

Pentru verificarea datelor īnainte de īnchiderea dialogului, se include codul corespunzator (prin care se pot verifica valorile mai multor controale de pe forma) īn aceeasi procedura care descarca (īnchide) dialogul. Daca exista erori de completare se va parasi procedura, prin Exit Sub, īnainte de executarea instructiunii Unload si se va da focusul primului control eronat.

Exemplul urmator se executa la actionarea butonului de comanda, denumit cmdOK, si previne parasirea dialogului prin actionarea acestui buton daca boxa text txtCustAge nu este numerica:

Private Sub cmdOK_Click ()
If Not IsNumeric (txtCustAge.Text) Then
MsgBox "Vārsta trebuie sa fie numerica"
txtCustAge.SetFocus 'Controlul reprimeste focusul
Exit Sub 'Se paraseste procedura
End If
custAge = txtCustAge.Text 'Se salveaza valoarea controlului
Unload Me 'Se descarca forma
End Sub

Este de mentionat ca pentru trecerea valorii īn alt modul de cod, variabila custAge trebuie calificata, de exemplu ThisDocument.custAge.

La īnchiderea unui dialog, toate datele introduse de utilizator se pierd. Returnarea valorilor controalelor dintr-o forma dupa ce forma a fost descarcata conduce la valorile implicite īn locul celor introduse/selectate de utilizator. Din acest motiv, informatia necesara trebuie sa fie salvata īn variabile de la nivelul modul, īnaintea descarcarii formei. Exemplul precedent utilizeaza īn acest scop variabila custAge, care trebuie sa fie declarata la nivel de modul prin

Public custAge As Integer

de exemplu.

Cutiile de dialog utilizator sunt afisate īntotdeauna drept modale. Prin urmare utilizatorul trebuie sa īnchida dialogul īnainte de a se īntoarce īn aplicatia principala.

Īnchiderea (descarcarea) formei se realizeaza prin instructiunea Unload. Īn mod uzual se va include īn forma cel putin un buton de comanda prin actionarea caruia se īnchide forma.

Exemplul urmator insereaza īn documentul Word textul introdus de utilizator īn boxa txtUserName si īnchide forma, la actionarea butonului de comanda denumit cmdOK:

Private Sub cmdOK_Click ()
ActiveDocument.Content.InsertAfter txtUserName.Text
Unload UserForm1
End Sub

Pentru a utiliza aceeasi boxa de dialog īn mai multe aplicatii (Word, Excel, PowerPoint accepta aceleasi dialoguri). Daca dialogul contine totusi referiri la obiecte specifice unei aplicatii, atunci utilizarea īn alta aplicatie nu este lipsita de erori.

Pentru reutilizarea dialogurilor proiectate se exporta ca un fisier .frm care poate fi importat īn alte aplicatii:

  • Īn VBE unde s-a proiectat forma, right-click pe UserForm din Project Explorer, click Export File.
  • Se alege un nume si Save. Se obtine un fisier nume.frm.
  • Īn VBE unde se doreste reutilizarea formei, right-click pe proiectul respectiv din Project Explorer, click pe Import File.
  • Selectarea numelui formei si Open.

Utilizarea controalelor īn
documente Word, foi de calcul Excel sau
diapozitive PowerPoint

Īn acelasi mod īn care controalele se adauga unei forme, acestea pot fi adaugate unui document, foi de calcul sau slide pentru a le transforma īn obiecte interactive. De exemplu, se pot adauga boxe text, lista, butoane radio etc. unui document, pentru a-l transforma īntr-un formular online. Se pot adauga butoane de comanda pe o foaie de calcul pentru a executa proceduri macro uzuale etc.

Desi modul de operare este foarte asemanator, exista deosebiri precum

    • adaugarea controalelor se realizeaza cu ajutorul cutiei de unelte Control Toolbox (si nu Toolbox ca īn VBE). Afisarea acestei cutii se realizeaza din View - Toolbars - Control Toolbox.
    • bascularea īntre Design mode si Run mode se efectueaza īn Word sau Excel prin actionarea butoanelor Exit Design Mode si Design Mode de pe bara Visual Basic. Īn PowerPoint se trece īn Slide Show pentru a fi īn Run Mode si se revine īntr-o viziune de editare pentru Design Mode.
    • un control poate avea multimi diferite de evenimente īntr-un document, foaie sau slide īn raport cu acelasi control de pe o forma. De exemplu, un buton de comanda dintr-o forma are evenimentul Exit, īn timp ce un buton de comanda dintr-un document nu recunoaste acest eveniment.

Controale ActiveX īn documente Word

La adaugarea si operarea cu controale īntr-un document Word sunt importante urmatoarele idei:

  • Controalele ActiveX se pot adauga fie stratului (layer-ului) de text fie stratului de desen. Pentru plasarea controlului īn text, se va actiona simultan tasta SHIFT si click-ul pe controlul din Control Toolbox. Īn acest caz, controlul se va insera ca un caracter, pentru un aspect bun trebuie sa se lucreze la atributele liniei si paragrafului. Pentru plasarea unui control īn layer-ul de desen se actioneaza unealta din Control Toolbox fara a actiona si tasta SHIFT. Īn acest caz, controlul este similar unui obiect Picture din documentul Word.
  • Un control adaugat pe stratul text este un obiect InlineShapes la care se obtine acces programatic prin colectia InlineShapes. Un control adaugat pe stratul de desen este un obiect Shape la care se ajunge programatic prin colectia Shapes.
  • Controalele din stratul text sunt tratate precum caracterele si sunt pozitionate īn linia de text, se muta o data cu textul sau cu inserarea de caractere etc.
  • Controalele din Control Toolbox nu pot fi aduse prin dragare īn document. La click pe un control, acesta este inserat la punctul de insertie (pe stratul text) sau īntr-o pozitie bazata pe aceasta (pe startul de desen). Inserarea consecutiva a mai multor obiecte īn aceeasi pozitie pe stratul de desen poate sa produca o stiva din care vedem doar ultimul control plasat, de aici controalele trebuiesc duse īn locuri distincte din document.
  • Īn Design Mode, controalele ActiveX sunt vizibile doar īn viziunile Page Layout sau Online Layout.
  • Controalele ActiveX din stratul de desen sunt īntotdeauna īn Run Mode īn viziunile Page Layout sau Online Layout.
  • Daca se intentioneaza ca utilizatorul sa fie capabil sa se mute īntre controalele unui formular online prin actionarea tastei TAB, controalele se vor plasa pe stratul text si se va proteja forma prin click pe butonul Protect Form de pe bara de unelte Forms.
  • Daca, la crearea unui formular online, se doreste adaugarea de cāmpuri de formular īn locul controalelor ActiveX, se va utiliza bara de unelte Forms.

Controale ActiveX īn foi de calcul Excel

Se pot adauga controale, la caiete sau foi de calcul, lānga datele pe care le controleaza, astfel īncāt operarea īn foaia de calcul sa se efectueze cāt mai cursiv si mai pe īnteles.

Urmatoarele afirmatii puncteaza principalele aspecte ale plasarii controalelor ActiveX pe o foaie de calcul Excel.

  • Īn plus fata de proprietatile standard ale controalelor, se pot utiliza pentru controalele dintr-o foaie Excel proprietatile: BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell si ZOrder. La aceste proprietati se ajunge īn mod uzual. Urmatorul exemplu arata cum se poate realiza, prin program, o defilare a ferestrei active pāna cānd controlul CommandButton1 ajunge īn coltul din stānga sus:
Set t = Sheet1.CommandButton1.TopLeftCell
With ActiveWindow
.ScrollRow = t.Row
.ScrollColumn = t.Column
End With
  • Anumite metode si proprietati din Microsoft Excel Visual Basic sunt inhibate atunci cānd un control ActiveX este activat. De exemplu, metoda Sort nu poate fi utilizata cānd un control este activ. Īn acest caz se va activa īn prealabil un alt element de pe foaie, dupa modelul:
Private Sub CommandButton1_Click
Range("a1").Activate
Range("a1:a10").Sort Key1:=Range("a1")
CommandButton1.Activate
End Sub

Se observa revenirea la activarea butonului de comanda dupa ce s-a efectuat sortarea.

  • Controalele dintr-un workbook Excel scufundat īntr-un document al altei aplicatii nu vor functiona daca utilizatorul va utiliza dublu click pentru editarea caietului. Controalele vor functiona daca utilizatorul va deschide caietul prin right-click si Open din meniul direct.
  • La salvarea unui workbook Excel 97 īn format Microsoft Excel 5.0/95, toata informatia asociata cu controalele ActiveX se pierde.
  • Cuvāntul cheie Me dintr-o procedura eveniment a unui control ActiveX de pe o foaie de calcul se refera la foaia de calcul si nu la control.

Controale ActiveX īn diapozitive PowerPoint

Adaugarea controalelor ActiveX la diapozitive PowerPoint pot produce un schimb de informatii cu utilizatorul, de exemplu personalizari ale prezentarii dupa optiunile privitorului.

Principalele aspecte care trebuie urmarite sunt:

  • Un control de pe un slide este īntotdeauna īn Design Mode, cu exceptia viziunii Slide Show.
  • Pentru ca un control particular sa apara pe toate diapozitivele, se va plasa pe Slide Master.
  • Cuvāntul cheie Me dintr-o procedura eveniment a unui control dintr-un slide, se refera la slide. Daca evenimentul este a unui control de pe master, atunci Me se refera la master si nu la slide-ul afisat īn momentul cānd s-a declansat evenimentul.
  • Scrierea codului eveniment pentru slide-uri este similara scrierii de cod pentru controalele de pe o forma. Exemplul urmator stabileste culoarea de fundal a diapozitivului pe care se gaseste butonul de comanda:
Private Sub cmdChangeColor_Click()
With Me
.FollowMasterBackground = Not .FollowMasterBackground
.Background.Fill.PresetGradient msoGradientHorizontal, 1, msoGradientBrass
End With
End Sub
  • Se pot dota diapozitivele cu unelte de navigatie. Daca acestea sunt pozitionate din Master, vor fi disponibile pe toate diapozitivele. De exemplu, adaugānd la Slide Master doua butoane denumite, respectiv, cmdBack si cmdForward, si scriind procedurile de eveniment urmatoare, demonstratia poate fi condusa actionānd respectivele butoane.
Private Sub cmdBack_Click ()
Me.Parent.SlideShowWindow.View.Previous
End Sub
Sub cmdForward_Click ()
Me.Parent.SlideShowWindow.View.Next
End Sub
  • Pentru a lucra cu toate controalele ActiveX de pe un slide anume fara a afecta celelalte forme desenate (Shapes) de pe slide, se poate construi o colectie ShapeRange care contine doar controalele. Se pot aplica apoi metode si proprietati īntregii colectii sau parcurge, īn mod uzual, colectia pentru a procesa fiecare control īn parte. Exemplul urmator aliniaza controalele de pe primul diapozitiv din prezentarea activa si le aranjeaza vertical.
With ActivePresentation.Slides(1).Shapes
numShapes = Count
If numShapes > 1 Then
numControls = 0
ReDim ctrlArray(1 To numShapes)
For i = 1 To numShapes
If .Item(i).Type = msoOLEControlObject Then
numControls = numControls + 1
ctrlArray(numControls) = .Item(i).Name
End If
Next
If numControls > 1 Then
ReDim Preserve ctrlArray(1 To numControls)
Set ctrlRange = .Range(ctrlArray)
ctrlRange.Distribute msoDistributeVertically, True
ctrlRange.Align msoAlignLefts, True
End If
End If
End With

Lucrul, prin program, cu controale din documentele aplicatiilor

Accesul programatic la un control se poate obtine prin numele controlului sau prin intermediul colectiei careia īi apartine. Denumirea unui obiect este cea specificata drept valoare a proprietatii (Name) īn fereastra Properties a controlului.

Urmatoarele exemple prezinta principalele actiuni care implica controale si documente.

Stabilirea titlului (caption) unui control:

CommandButton1.Caption = "Run"

Daca numele controlului se utilizeaza īn afara modulului clasa asociat documentului, foii de calcul sau diapozitivului care contine controlul, atunci numele controlului trebuie calificat cu numele documentului respectiv:

Sheet1.CommandButton1.Caption = "Run"

Se poate accesa un control ActiveX si prin colectia Shapes, OLEObjects sau InlineShapes, dupa caz.

    • Controalele adaugate la stratul de desen al unui document, foaie sau slide sunt continute īn obiectele Shape si pot fi gestionate programatic prin intermediul colectiei Shapes.
    • Īn Excel, controalele ActiveX sunt continute de asemenea īn obiectele OLEObject si pot fi programate prin colectia OLEObjects.
    • Īn Word, controalele ActiveX adaugate īn stratul text sunt continute īn obiectele InlineShape si pot fi controlate prin colectia InlineShapes.

Pentru accesul prin intermediul colectiilor, se utilizeaza numele obiectului Shape care contine un control particular si nu numele din cod al controlului. Īn Excel si PowerPoint, numele obiectului care contine un control este numele de cod implicit al controlului (cum ar fi CommandButton1). Īn Word, numele obiectului (de forma implicita Control 1) care contine un control nu este legat de numele de cod al controlului. Pentru a schimba numele de cod al unui control se selecteaza controlul si se schimba valoarea proprietatii (Name). Pentru a schimba numele unui obiect Shape, OLEObject sau altui obiect care contine un control se va schimba valoarea proprietatii Name.

    • Adaugarea unui buton de comanda la prima foaie de calcul:
Worksheets(1).OLEObjects.Add "Forms.CommandButton.1" _
Left:=10, Top:=10, Height:=20, Width:=100
    • Instructiunea urmatoare stabileste proprietatea Left a controlului:
Worksheets(1).OLEObjects("CommandButton1").Left = 10
    • Urmatorul exemplu stabileste titlul obiectului:
Worksheets(1).OLEObjects("CommandButton1").Object.Caption = "Run"
    • Adaugarea unei boxe de control la documentul activ, pe stratul text:
ActiveDocument.InlineShapes.AddOLEControl ClassType:="Forms.CheckBox.1"
    • Stabilirea unor atribute ale controalelor dintr-un document Word:
ActiveDocument.InlineShapes(1).Width = 200
ActiveDocument.InlineShapes(1).OLEFormat.Object.Value = True
    • Adaugarea unui control ComboBox la stratul de desen:
ActiveDocument.Shapes.AddOLEControl ClassType:="Forms.ComboBox.1"
    • Fixarea unor proprietati ale unui ComboBox de pe stratul de desen
ActiveDocument.Shapes("Control 1").Left = 100
ActiveDocument.Shapes("Control 1").OLEFormat.Object.Text = "Reed"
    • Adaugarea si modificarea unui buton de comanda la un diapozitiv:
ActivePresentation.Slides(1).Shapes.AddOLEObject Left:=100, Top:=100, _
Width:=150, Height:=50, ClassName:="Forms.CommandButton.1"
ActivePresentation.Slides(1).Shapes("CommandButton1").Left = 100
ActivePresentation.Slides(1).Shapes("CommandButton1") _
.OLEFormat.Object.Caption = "Run"

Document Info


Accesari: 934
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )