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




Meniuri si bare de unelte

visual basic


Meniuri si bare de unelte

Interfata cu utilizatorul este o parte foarte importanta a oricarei aplicatii. Acest fapt are o pondere mult mai mare în proiectele dezvoltate în VBA deoarece aplicatiile gazda (Microsoft Office, Visio, Autocad etc.) dispun de interfete utilizator sofisticate de care trebuie sa se apropie orice noua componenta.



Problematica poate fi despartita în:

    • Personalizarea/modificarea interfetei aplicatiei de baza
    • Dialogurile create de utilizator.

În acest capitol se discuta prima categorie de actiuni: tehnicile prin care se poate adapta, completa sau modifica interfata cu utilizatorul propusa în mod standard în aplicatiile Microsoft Office 97. Se prezinta atât actiunile permise de mediu (prin dialogul Customize – comun aplicatiilor Word, Excel, PowerPoint, Access) asupra meniurilor si barelor de unelte afisate, cât si actiunile programatice, din Visual Basic, asupra obiectelor respective.

Modificarea interfetei cu utilizatorul

Interfata cu utilizatorul prezenta în programele din Microsoft Office este formata din bare de meniu si bare de unelte. Ca raspuns la activarea unei comenzi din meniu sau a unei unelte se va realiza o actiune a aplicatiei gazda sau se va deschide un dialog pentru fixarea unor atribute ale actiunii dorite.

Exista doua posibilitati de adaptare a barelor de unelte si a meniurilor: dialogul Customize si Visual Basic. Desi dialogul difera usor de la o aplicatie la alta, obiectele programabile sunt aceleasi în toate aplicatiile Microsoft Office (cu exceptia Outlook).

Dialogul Customize

Prin intermediul casetei de dialog Customize se pot efectua modificari ale interfetei utilizator în timpul proiectarii aplicatiei Visual Basic (pentru simplitatea exprimarii utilizam formularea design-time). Cu alte cuvinte, modificari efectuate înainte ca aplicatia sa se execute. Modificarile includ: adaugarea, stergerea, mutarea, restaurarea componentelor meniurilor si barelor de unelte. De asemenea stabilirea proprietatilor acestor componente, care nu se vor modifica în timpul executiei (cu formularea mai concisa run-time). Aceste modificari pot fi efectuate si în Visual Basic, dar daca exista ambele posibilitati de modificare, cele din design-time, direct în mediul aplicatiei gazda, se realizeaza mai usor.

Pentru afisarea dialogului Customize se urmeaza succesiunea: meniul View — Toolbars — Customize. Acelasi efect se obtine prin punctarea unei bare de unelte si click dreapta. Din meniul contextual se alege apoi Customize. Dialogul afisat este, cu mici diferente specifice, acelasî în toate aplicatiile Office 97. Forma afisata de Microsoft Word este data în figura alaturata.

Se observa cele trei fise si grupul de butoane din dreapta.

Particularitatile importante ale dialogului sunt:

    • în Access, fisa Toolbars contine un buton Properties care afiseaza dialogul Toolbar Properties prin care se fixeaza proprietatile barelor de meniu sau de unelte,
    • în Excel, fisa Toolbars contine un buton Attach care afiseaza dialogul Attach Toolbars prin care se pot copia (atasa) la caietul activ bare de unelte/meniu din spatiul de lucru al aplicatiei,
    • în Word, fisa Commands contine o lista derulanta Save in în care se alege contextul modificarilor din design-time (template, document etc.) si un buton Keyboard care initiaza un dialog de stabilire a cheilor directe. Dialogul NewToolbar, care apare la click pe New (fisa Toolbars), contine de asemenea optiunea Make toolbar available to pentru fixarea domeniului de vizibilitate.

Dupa deschiderea dialogului Customize se urmeaza aceeasi procedura pentru modificarea oricarui meniu sau toolbar, indiferent daca este predefinit sau construit de utilizator. Pasii uzuali sunt

    • în lista Toolbars din fisa Toolbars se selecteaza boxele de control alaturate denumirilor acelor bare care se afiseaza; orice bara nou creata este afisata în mod automat;
    • click pe orice intrare de meniu (inclusiv captarile de meniu/submeniu) sau control de pe o bara de unelte pentru a o selecta; în timpul afisarii dialogului Customiza meniurile si uneltele nu sunt active/executabile, pot fi doar selectate;
    • click dreapta pe obiectul selectat si utilizarea comenzilor din meniul contextual pentru transformarile dorite.
    • În timpul afisarii dialogului Customize se pot rearanja prin drag-and-drop toate intrarile din meniuri/unelte. Tragerea în caseta dialogului elimina o intrare din meniu/bara de unelte, iar operatiunea inversa adauga noi intrari.

Visual Basic

Personalizarea meniurilor si barelor de unelte se poate efectua programatic utilizând portiunea reprezentând barele de comanda din modelul de obiecte, comuna tuturor aplicatiilor din Microsoft Office. Nivelul cel mai înalt este colectia CommandBars, returnata de proprietatea CommandBars în toate aplicatiile din Office. Fiecare bara de meniu, meniu contextual sau bara de unelte este reprezentata printr-un obiect CommandBar în aceasta colectie. Un obiect CommandBar contine o colectie CommandBarControls reprezentând elementele de control ale barei respective.

Ierarhia acestor obiecte, pentru cazul Microsoft Word (similara în toate celelalte aplicatii din Office), este prezentata în figura alaturata.

Utilizarea acestor obiecte este explicata, pentru principalele actiuni, în continuarea acestui capitol.

Se poate scrie cod care, executat o singura data, produce crearea sau modificarea elementelor de control din interfata utilizator. Codul simuleaza modificarile din design-time prin caseta Customize. Sunt si situatii în care este nevoie de o combinatie programare + personalizare pentru a realiza configurarea dorita a mediului aplicatiei:

    • Daca nu se poate utiliza dialogul Customize pentru crearea unei bare noi de meniu, aceasta se va crea prin program si dupa aceea se poate configura prin dialogul Customize.
    • Daca aplicatia gazda nu ofera posibilitatea de afisare simultana a dialogului Customize si a meniurilor contextuale predefinite sau utilizator, modificarea acestora trebuie realizata în Visual Basic.
    • Daca aplicatia gazda nu ofera o interfata pentru adaugarea sau modificarea boxelor text, listelor derulante drop-down sau combo box, trebuie utilizat codul Visual Basic pentru adaugarea si proiectarea acestor controale.

Se poate scrie cod si pentru modificarea meniului sistem în timp ce aplicatia se executa (de exemplu inhibarea unor comenzi sau adaugarea unui meniu etc.). Aceste modificari sunt cunoscute drept modificari în run-time.

Domeniul schimbarilor asupra interfetei utilizator

Fiecare aplicatie Microsoft Office utilizeaza reguli usor diferite privind unde si cum se salveaza modificarile aduse interfetei utilizator. Pentru un control corect al interfetei proiectate în aplicatia Visual Basic este importanta întelegerea domeniului de valabilitate al schimbarilor.

Microsoft Access

Se pot utiliza bare de meniu proprii sau meniuri contextuale proprii în trei moduri

    • Atasate de o forma sau de un raport. Microsoft Access afiseaza meniurile proprii la deschiderea formei sau la afisarea raportului în print preview. Pentru informatii suplimentare se va studia subiectul "MenuBar Property" în Help.
    • Drept un meniu contextual atasat unei forme, unui raport sau unui control dintr-o forma. Microsoft Access afiseaza un asemenea meniu la click dreapta pe forma, raport sau control. Pentru informatii suplimentare se va studia subiectul "ShortCutMenuBar Property" în Help.
    • Ca o bara meniu globala, a aplicatiei. Microsoft Access afiseaza aceasta bara proprie în toate ferestrele, cu exceptia formelor sau rapoartelor care au propria bara definita. Se poate specifica bara de meniu utilizata în aplicatie prin dialogul Startup.

Se pot utiliza una sau mai multe bare de unelte proprii într-o aplicatie. Se creeaza barele de unelte necesare si se alege pentru afisare una dintre metodele urmatoare:

    • Daca aplicatia are doar o bara de unelte utilizator, se va utiliza commanda Toolbars (din meniul View) pentru a o afisa; bara respectiva va apare de fiecare data când se porneste aplicatia.
    • Daca aplicatia are bare diferite pentru forme sau rapoarte, se va specifica bara necesara în proprietatea Toolbar a formei sau raportului. Bara indicata se va afisa si ascunde împreuna cu forma.
    • Daca sunt necesare mai multe bare de unelte proprii pentru o forma sau raport, sau daca se doreste ascunderea/afisarea barelor predefinite, se va utiliza proprietatea Visible a obiectului CommandBar în Visual Basic sau actiunea ShowToolbar în macro-uri.
    • Daca se doreste ca aplicatia sa afiseze doar barele proprii, se pot ascunde barele de unelte built-in prin comanda Startup (meniul Tools) si se deselecteaza boxa de control Allow Built-in Toolbars.

Microsoft Excel

Barele de meniu sau/si barele de unelte proprii pot fi salvate cu spatiul de lucru sau cu caietul. La parasirea aplicatiei Excel, barele de unelte din spatiul de lucru sunt salvate automat în fisierul Username8.xlb (unde Username este numele utilizatorului curent utilizat la intrarea în Windows 95). Daca utilizatorul nu este logged on, fisierul este Excel8.xlb. Barele de unelte salvate în caiet sunt memorate în fisierul caietului respectiv.

Meniurile si barele de unelte de la nivelul workbook permit proiectarea unei interfete pe masura oricarei a 424h74e plicatii (de exemplu un add-in) si distribuirea barelor si procedurilor atasate. Pentru distribuire, obiectele proiectate se vor atasa caietului, care contine aplicatia, încât barele de unelte sa fie memorate în acelasi fisier cu aplicatia.

Mutarea unui meniu sau bara de unelte din spatiul de lucru în caiet

  • Daca dialogul Customize nu este deschis, se va afisa prin View - Toolbars - Customize.
  • În fisa Toolbars a dialogului, click pe Attach. Ca urmare a actiunii se afiseaza dialogul Attach Toolbars.
  • În caseta din stânga Custom toolbars se selecteaza numele meniului sau barei de unelte care se copie în caietul activ.
  • Click Copy. Numele obiectului copiat apare în lista din dreapta Toolbars in workbook.

Obiectul original, de la nivelul spatiu de lucru, poate fi eliminat în mod uzual actionând butonul Delete din dialogul Customize, fisa Toolbars.

Daca versiunea de la nivelul saptiului de lucru (workspace) nu este eliminata, aceasta poate fi modificata fara afectarea versiunii de la nivelul caietului. În aceasta situatie, obiectul este modificat la nivelul spatiului de lucru, aducerea versiunii din caiet la aceeasi configurare se realizeaza doar prin repetarea procedurii descrise, adica prin copierea versiunii din spatiu peste versiunea din caiet.

Dupa copierea unui obiect (meniu sau bara de unelte) în caiet, obiectul devine disponibil numai dupa ce utilizatorul în deschide. O versiune salvata în caiet retine nu numai numele si continutul, ci si asignarile de cod, locul, dimensiunea, forma, pozitia în ecran si atributul de vizibilitate (ascuns sau vizibil).

Eliminarea unui meniu/bara de unelte salvat în caiet

Versiunea salvata în caiet poate fi eliminata prin:

  • Daca dialogul Customize nu este deschis, se va deschide dupa procedura uzuala.
  • În fisa Toolbars click pe Attach. Se afiseaza dialogul Attach Toolbars.
  • În zona Toolbars in workbook click pe numele obiectului care se elimina.
  • Click Delete.

Observatie. Nu se poate utiliza Visual Basic pentru a atasa sau elimina obiecte bare de meniu sau de unelte la un caiet.

La deschiderea unui caiet care contine obiecte de interfata pe masura, Microsoft Excel determina mai întâi daca exista deja un obiect cu aceeasi denumire în spatiul de lucru. Daca nu, este creata un nou meniu sau bara de unelte în spatiul de lucru si se copie în acest nou obiect bara de meniu sau de unelte din caiet. În acest mod se dispune de un obiect care poate fi modificat, ascuns etc., obiect care îsi salveaza modificarile în spatiul de lucru la parasirea aplicatiei Excel.

Nu exista nici un mijloc prin care sa se redenumeasca un meniu sau toolbar, încât la redeschiderea caietului spatiul de lucru contine deja obiectul cu numele respectiv si Microsoft Excel utilizeaza copia creata anterior în locul obiectului din caiet. Procedurile atasate ramân totusi cele din caiet, adica aplicatia distribuita traieste în continuare prin intrarile de meniuri sau unelte pastrate în spatiul de lucru. Acest mod de operare are accentul pus pe actiunile utilizatorului, care are dreptul sa-si organizeze spatiul de lucru dupa voie.

Pentru a restaura versiunea originala distribuita, utilizatorul trebuie sa elimine copia din spatiul de lucru prin procedura explicata anterior.

Microsoft Word

Word memoreaza meniurile si barele de unelte în sabloane, similar macrourilor. La modificarea unui meniu sau toolbar, modificarile sunt memorate implicit în template-ul Normal si modificarile sunt accesibile în mod global, adica un asemenea obiect poate fi afisat chiar daca documentul este bazat pe un alt sablon.

Un toolbar memorat într-un alt template este disponibil doar daca sablonul respectiv este atasat documentului activ sau daca sablonul este încarcat ca un template global (a se vedea meniul Tools, comanda Templates and Add-ins).

Daca se memoreaza o bara de unelte în document, afisarea ei este posibila doar daca documentul respectiv este activ.

La distribuirea unei aplicatii Visual Basic cu meniuri si bare de unelte personale, aceste trebuie memorate într-un sablon propriu sau într-un document. Deoarece fiecare utilizator are propriul template Normal, aplicatiile Visual Basic nu trebuie sa modifice sablonul Normal. Este recomandat de asemenea sa se elimine obiectele personale din interfata la parasirea aplicatiei.

Daca doua obiecte toolbar cu acelasi nume sunt disponibile simultan (unul într-un sablon, altul în document), ambele sunt listate în dialogul Customize si pot fi afisate separat sau împreuna în acelasi timp.

În Visual Basic se poate adauga, modifica sau elimina bare meniu sau de unelte în orice document sau template. Totusi, deoarece proprietatea CommandBars se aplica doar obiectului Application, contextul trebuie fixat înainte de efectuarea modificarilor. Similar utilizarii zonei Store in din fisa Commands, dialogul Customize, în Visual Basic se va stabili valoarea proprietatii CustomizationContext pentru a specifica un obiect Document sau Template, reprezentând locul unde se executa modificari. Proprietatea CustomizationContext se fixeaza înaintea utilizarii proprietatii CommandBars ceea ce asigura returnarea unei referinte la colectia corecta (din document sau din template).

Microsoft PowerPoint

Obiectele personale sunt memorate întotdeauna în spatiul de lucru. La parasirea aplicatiei PowerPoint, barele de unelte din spatiul de lucru sunt salvate în fisierul Username.pcb (unde Username este numele logon al utilizatorului). Daca utilizatorul nu este logged on, fisierul este Powerpnt.pcb.

Deoarece obiectele din interfata nu sunt vizibile în timpul prezentarii, customizarea este limitata la schimbarea meniurilor si uneltelor accesibile în design mode. Se poate utiliza fie dialogul Customize, fie Visual Basic. Daca aplicatia Visual Basic ofera o interfata modificata pentru proiectarea prezentarilor, se va utiliza Visual Basic pentru modificarea interfetei si este o buna idee aceea ca la parasirea aplicatiei sa se elimine modificarile efectuate.

Componente ale interfetei utilizator

Meniurile sunt liste cu comenzi din care utilizatorul poate sa aleaga. Meniurile ofera un mod convenabil si consistent de a grupa comenzi asociate dupa functiuni si un mod simplu de acces al utilizatorului. Anumite comenzi pot sa determine afisarea unor submeniuri, pe diferite nivele de organizare. Exista de asemenea meniuri contextuale (shortcut menus) care ofera o modalitate de grupare a comenzilor uzuale aplicabile în contextul limitat al unei actiuni specifice.

Se pot asigna chei de acces pentru a permite afisarea imediata a unui meniu, ca si asignarea unor taste directe la comenzi. În plus, meniurile ocupa mai putin loc decât barele de unelte (nu toate comenzile sunt afisate permanent).

Barele de unelte contin controale care permit executarea comenzilor des utilizate. Barele de unelte sunt adecvate pentru prezentarea atributelor individuale (cum ar fi bold, italic etc.), pentru comenzile care se pot reprezenta vizual (cum ar chenare, dimensiunile liniilor etc.) si pentru comenzile pentru care se doreste accesul printr-un simplu click. Barele de unelte ramân mereu vizibile si acest fapt conduce la o parcurgere mai usoara pentru determinarea comenzii dorite. Dezavantajele includ necesitatea mouse-ului (controalele nu pot fi accesate din tastatura) si ocuparea spatiului de lucru în detrimentul documentului principal.

Pentru prezentarea unui set complex de optiuni se va utiliza o caseta de dialog. Daca se doreste plasarea unei unelte mai aproape de datele asociate, cea mai buna solutie poate fi plasarea unui control direct în document.

Mai multe informatii pot fi gasite în capitolul Controale ActiveX si dialoguri.

Sistemul de meniuri

În fiecare aplicatie Microsoft Office, sistemul de meniuri este compus dintr-o multime de meniuri si câte o multime de intrari în fiecare meniu. Fiecare menu este fie un meniu, un submeniu sau un meniu contextual. În continuare termenul de componenta se refera în mod generic la un meniu sau o intrare într-un meniu.

O bara de meniu este o bara asezata în partea superioara a ferestrei active si care afiseaza numele tuturor meniurilor care sunt permise în aplicatie la un moment dat. O aplicatie din Microsoft Office poate sa modifice bara de meniu afisata ca urmare a modificarii ferestrei active (de exemplu editarea unui obiect chart) sau ca raspuns la instructiuni Visual Basic.

Un meniu este o lista de intrari care apare (se deruleaza) la click pe numele meniului din bara de meniu.

Un submeniu (child menu) este un meniu atasat de o latura a altui meniu (parent menu), adiacent unei captari particulare a submeniului, localizata în meniul parinte. Fiecare captare de submeniu este marcata cu o sageata punctând spre dreapta. Submeniurile se pot adauga si la meniurile contextuale. Un submeniu este afisat atunci când se puncteaza captarea corespunzatoare din meniul parinte.

Un meniu contextual este un meniu flotant în document si care contine un grup de comenzi adecvate pentru o anume actiune (de exemplu procesarea unui paragraf). Meniul contextual este afisat atunci când utilizatorul executa un click dreapta pe un obiect care are atasat un asemenea meniu.

Actiuni de adaptare a sistemului de meniuri

Sistemul de meniuri se poate modifica într-o aplicatie Microsoft Office în diferite moduri:

    • crearea de noi bare de meniu
    • adaugarea de noi meniuri la barele preconstruite sau personale
    • adaugarea de noi intrari (comenzi sau captari de submeniuri) la meniuri si submeniuri existente (built-in sau custom)
    • adaugarea si modificarea meniurilor contextuale
    • atribuirea de macrouri la intrari din meniuri.

În plus, în orice moment se poate restaura meniul sistem predefinit la starea implicita (cea afisata la instalarea aplicatiei).

Adaugarea de componente personale sau
modificarea componentelor built-in

Fiecare aplicatie din Office are un meniu sistem propriu. Componentele acestuia pot fi modificate sau se pot crea si modifica componente personale.

Se alege modificarea unui meniu predefinit atunci când interventia este minima (de exemplu includerea unui meniu care este legat de o macro).

Daca este necesara o interventie masiva, atunci se prefera crearea unei noi bare de meniu si adaugarea componentelor proprii pe aceasta bara.

Utilizarea submeniurilor

Daca un meniu devine prea populat, atunci se impune împartirea comenzilor pe submeniuri. În acest mod se ofera utilizatorului mai putina informatie la un moment dat si aplicatia creste în claritate.

Organizarea submeniurilor se poate baza pe entitatile procesate (comenzi, clienti etc.) sau pe actiunile suportate de entitati (adaugare, editare etc.).

Utilizarea meniurilor contextuale

Daca se doreste ca utilizatorul sa aiba acces la comenzile (macar cele mai uzuale) aplicabile în contextul unui obiect selectat, comenzi care, în mod uzual, sunt dispersate în mai multe meniuri, solutia este oferita de meniurile contextuale. Comenzile dorite se vor adauga meniurilor contextuale built-in. În Microsoft Access se pot crea si meniuri contextuale proprii asociate unor obiecte din aplicatie.

Utilizarea controalelor Text Box, List Box si Combo Box

Desi este posibil sa se adauge, prin cod Visual Basic, controale predefinite, sau proprii, de tip textbox, listbox sau combo, la meniuri de orice fel, asemenea controale sunt mai adecvate pentru plasarea în bare de unelte.Casetele text din meniuri pot fi utile în anumite situatii pentru afisarea sau returnarea unei proprietati. Aceeasi utilitate o poate avea un control de tip lista sau combo. Neajunsul principal este acela ca selectarea unei intrari dintr-o lista închide meniul (utilizatorul trebuie sa redeschida meniul pentru a revedea alegerea etc.).

Daca se doreste adaugarea controalelor de tipurile enumerate (built-in sau proprii) se vor utiliza tehnici descrise în sectiuni ale acestui capitol.

Modificarile sistemului de meniuri în timpul proiectarii (design-time)

Modificarile descrise aici sunt cele efectuate înainte ca aplicatia sa se execute. Sunt incluse adaugarea, stergerea, mutarea, restaurarea componentelor din meniuri, ca si fixarea proprietatilor acestora.

Adaugarea unei bare de meniu proprii

În Microsoft Access exista posibilitatea adaugarii unei bare proprii de meniu atât în Visual Basic, cât si prin dialogul Customize. În Microsoft Excel, Word si PowerPoint adaugarea se poate efectua doar prin Visual Basic.

Dialogul Customize (doar Microsoft Access)

  • Deschiderea dialogului Customize,
  • Fisa Toolbars, click New
  • În boxa Toolbar name se tasteaza numele noii bare si click OK.
  • Click Properties pentru afisarea dialogului Toolbar Properties.
  • În zona Type se alege Menu Bar.

Noua bara de meniu este adaugata listei din caseta Toolbars a fisei Toolbars (caseta Customize).

Visual Basic

Prin metoda Add a colectiei CommandBars se creeaza o noua bara de meniu; argumentul MenuBar al metodei Add determina când obiectul CommandBar creat poate fi afisat ca o bara de meniu. Exemplul urmator realizeaza aceasta operatiune:

Set cstm = CommandBars.Add(Name:="Custom Menu Bar", Position:=msoBarTop, _
MenuBar:=True, Temporary:=False)

Adaugarea meniurilor

Se poate adauga un meniu la orice bara de meniu built-in sau proprie. Deoarece o aplicatie Office poate afisa diferite bare de meniu built-in în contexte diferite, este necesar uneori ca adaugarea sa aiba loc la mai multe bare de meniu, pentru ca utilizatorul sa aiba acces la meniul adaugat indiferent de contextul curent al aplicatiei.

La adaugarea unui meniu se poate specifica o cheie de acces, litera care apare subliniata la afisarea meniului.

Observatie.Desi o aplicatie Microsoft Office poate sa listeze barele de unelte cu meniurile contextuale din fisa Toolbars a dialogului Customize, utilizatorul nu poate nici adauga meniuri contextuale, nici sa stearga meniuri contextuale. Se pot doar adauga noi intrari, modifica intrarile existente sau elimina unele intrari din meniurile contextuale. Anumite operatiuni suplimentare sunt posibile totusi în Access si Excel, actiuni descrise ulterior.

Dialogul Customize

  • Afisarea dialogului Customize.
  • Vizualizarea barei de meniu dorite prin selectarea în lista Toolbars.
  • În fisa Commands click New Menu în lista Categories.
  • Se trage itemul New Menu din cutia Commands la pozitia dorita de pe bara de meniu.
  • Click dreapta pe noul menu si completarea numelui în zona Name. Un ampersand (&) situat înaintea unui caracter din nume îl transforma în cheie de acces la meniu.

Adaugarea comenzilor este descrisa ulterior în acest capitol.

Dialogul Customize ofera si posibilitatea de adaugare a unui meniu built-in la o bara de meniu proprie sau built-in. Comenzile adaugate pot fi personalizate fara ca originalul sa fie afectat.

  • Afisarea dialogului Customize.
  • Vizualizarea barei de meniu dorite prin selectarea în lista Toolbars.
  • În fisa Commands click Built-in Menus în boxa Categories.
  • Se trage un meniu built-in din boxa Commands în pozitia dorita.

Visual Basic

Pentru adaugarea unui meniu se utilizeaza metoda Add a colectiei CommandBarControls. Prin aceasta se adauga un meniu la bara reprezentata de obiectul CommandBar implicat. Argumentul Type al metodei Add trebuie dat drept msoControlPopup pentru a indica afisarea unui meniu activarea controlului adaugat. Controalele care afiseaza meniuri sunt cunoscute drept controale pop-up. Argumentul Before indica pozitia noului meniu între cele deja existente.Proprietatea Caption a obiectului CommandBarPopup returnat de metoda Add este utilizata pentru stabilirea numelui si cheii de acces la noul meniu. Exemplul urmator adauga un nou meniu la bara meniu a unui caiet Excel:

Set cstmAccounting = CommandBars ("Worksheet Menu Bar").Controls _
.Add(Type:=msoControlPopup, Before:=9)
cstmAccounting.Caption = "&Accounting")

Dupa specificarea tastei de acces (prin &), numele poate fi specificat pentru referinta fie cu sau fara caracterul ampersand.

Adaugarea submeniurilor

Un meniu (child menu) este un meniu atasat de o latura a altui meniu (parent menu), adiacent unei intrari din meniul parinte (titlul submeniului – submenu caption), afisat la selectarea titlului. Se pot adauga submeniuri la meniuri, alte submeniuri sau la meniurile contextuale. Similar cu definirea unui meniu, mai întâi se defineste un submeniu vid la care se adauga apoi intrarile dorite.

Dialogul Customize

  • Se afiseaza dialogul Customize
  • Daca bara de meniu care contine meniul la care se face atasarea nu este vizibila se activeaza prin Toolbars.
  • În fisa Commands click New Menu în boxa Categories.
  • Se trage New Menu din boxa Commands în pozitia de pe meniu unde se ataseaza. Daca atasarea este pe un nivel inferior, se trage mai întâi pe meniu si pe urma din titlu în titlu pâna se deschide nivelul unde are loc atasarea.
  • Click dreapta pe noul submeniu pentru a-i fixa numele în zona Name. Se va utiliza caracterul & pentru stabilirea cheii de acces.

Adaugarea intrarilor se discuta în continuarea capitolului.

Visual Basic

Adaugarea programatica este similara adaugarii unui meniu la o bara de meniu, difera doar nivelul din ierarhia de obiecte:

Set cstmAcctProduct = CommandBars("Worksheet Menu Bar").Controls("Accounting") _
.Controls.Add(Type:=msoControlPopup)
cstmAcctProduct.Caption = "&Product"

adaugarea are loc la meniul Accounting creat în exemplul de la meniuri. Cheia directa este litera "P". Se observa ca valoarea argumentului Type este tot msoControlPopup, argumentul Before, neutilizat în exemplu, permite fixarea pozitiei noului submeniu între intrarile meniului parinte. Este de remarcat ca titlul submeniului se insereaza o data cu submeniul si nu exista anterior.

Dupa definirea titlului submeniului acesta poate fi utilizat la obtinerea unei referinte atât cu ampersand. cât si fara.

Adaugarea si gruparea comenzilor

Se poat adauga comenzi la orice meniu propriu sau built-in, modifica aspectul lor si separa vizual în grupuri logice.

Desi se pot adauga boxe text, boxe liste sau boxe combo la meniuri/submeniuri, ele nu sunt recomandate. Locul lor este de regula pe barele de unelte. Daca totusi se doreste o asemenea adaugare se va utiliza reteta data la discutarea barelor de unelte.

Dialogul Customize

Pentru adaugarea unei comenzi built-in:

  • Se afiseaza dialogul Customize.
  • Daca bara de meniu care contine meniul la care se face atasarea nu este vizibila se activeaza prin Toolbars.
  • În fisa Commands se selecteaza o categorie de comenzi din boxa Categories. Comenzile din categoria selectata sunt listate în boxa Commands.
  • Se trage comanda dorita din boxa Commands în pozitia adecvata din meniu. Navigarea în cazul unei ierarhii de meniuri se realizeaza prin dragare pe meniu, apoi pe titlul submeniului etc.

Se poate realiza copierea unei comenzi built-in prin afisarea meniului care o contine si tragerea comenzii simultan cu apasarea tastei CTRL.

Dialogul Customize ofera si posibilitatea de adaugare a unei comenzi proprii la o bara de meniu proprie sau biult-in. Cum fiecare aplicatie din Microsoft Office prezinta tehnici diferite pentru realizarea acestei operatiuni, în continuare se discuta separat fiecare aplicatie.

Microsoft Access

Adaugarea la un meniu a unei intrari care executa un macro se realizeaza dupa aceeasi procedura ca la adaugarea unei comenzi built-in la un meniu. În boxa Categories click All Macros. Se trage macro-ul dorit în pozitia sa din meniu.

Pentru adaugarea unei intrari care executa o procedura functie se urmeaza de asemenea aceeasi pasi ca la adaugarea unei comenzi built-in: în Categories se alege orice categorie si se trage o comanda oarecare pe meniul dorit. Dupa aceea, prin click dreapta si selectare Control Properties se deschide dialogul sinonim. În zona Caption se trece noul nume al comenzii iar în On Action se tasteaza o expresie care executa procedura Visual Basic de forma: =functionname().

Microsoft Excel

Se urmeaza aceeasi pasi ca în procedura pentru adaugarea unei comenzi built-in la un meniu:; în caseta Categories click Macros si se trage Custom Menu Item din caseta Commands la pozitia dorita pe meniu. Click dreapta pe noua intrare si apoi click pe Assign Macro. În Macro Name din dialogul Assign Macro se precizeaza numele macroului atasat intrarii.

Microsoft Word

Se urmeaza aceeasi pasi ca în procedura pentru adaugarea unei comenzi built-in la un meniu:; în caseta Categories click Macros, în caseta Commands apare lista procedurilor atasate si se trage macroul dorit în pozitia adecvata din meniu.

Observatie. Daca în Word se scrie o procedura al carui nume coincide cu numele unei comenzi built-in (sau daca o procedura cu numele "MAIN" exista într-un modul cu nume identic comenzii), procedura va înlocui functionalitatea predefinita a comenzii built-in de fiecare data când modulul de cod este disponibil. Orice copie a intrarii de meniu (care activa comanda built-in), de pe orice meniu, va executa procedura înlocuitoare.

Microsoft PowerPoint

Se procedeaza la fel ca în Microsoft Word.

Modificarea aspectului unei comenzi

Pentru orice comanda de pe un meniu se poate afisa o imagine alaturata numelui comenzii. Controlul aspectului este obtinut prin meniul contextual afisat în timp ce dialogul Customize este activ. Stilul intrarii de meniu poate fi doar text sau text si imagine. Actiunile uzuale sunt

    • Utilizarea unui buton predefinit: click dreapta pe comanda, Change Button Image si selectarea imaginii dorite din caseta afisata.
    • Copierea imaginii unui alt buton: click dreapta pe butonul a carui imagine se copie, Copy Button Image, click dreapta pe butonul unde se copie imaginea si Paste Button Image.
    • Copierea unei imagini dintr-un program de grafica: în programul de grafica se deschide imaginea dorita, selectarea si copierea imaginii (preferabil de marime 16×16 pixeli), comutarea la aplicatia Office, click dreapta pe comanda si click Paste Button Image.
    • Editarea imaginii curente a unui buton: click dreapta pe comanda, Edit Button Image, se editeaza imaginea în dialogul afisat si OK.
    • Restabilirea imaginii originale (sau nimic daca nu exista imagine implicita): click dreapta si ResetButton Image.
Gruparea comenzilor

Comenzile asociate dupa functionalitate se pot grupa prin separarea între linii. Liniile însasi nu sunt intrari separate de meniu, aparitia lor fiind un atribut al comenzii care începe un nou grup. Pentru a începe un grup (prima intrare cu o linie deasupra):

    • Se afiseaza dialogul Customize.
    • Se afiseaza bara de meniu pe care se afla meniul dorit.
    • Click dreapta pe intrarea de meniu care începe grupul si click pe Begin Group. La deschiderea ulterioara a meniului contextual comanda Begin Group apare cu marcajul de selectare si un nou click anuleaza linia de început de grup.

Visual Basic

Se utilizeaza metoda Add a colectiei CommandBarControls pentru adaugarea unei noi intrari la obiectul CommandBar care reprezinta un meniu sau un submeniu particular. Pentru adaugarea unei comenzi built-in se va specifica numarul ID al comenzii în argumentul Id al metodei Add.

Urmatorul exemplu adauga comanda Spelling la meniul numit "Quick Tools" de pe bara de meniu "Custom Menu Bar".

Set mySpell = CommandBars("Custom Menu Bar").Controls("Quick Tools") _
.Controls.Add(Id:=2)

Informatii suplimentare se gasesc în sectiunea "Identificarea intrarilor si controalelor din meniuri si bare de unelte".

Pentru adaugarea unei comenzi proprii, se adauga o intrare noua în meniu si se fixeaza proprietatea OnAction la procedura initiata de respectiva intrare. Argumentul Type al metodei Add va avea valoarea msoControlButton indicând o comanda.

Exemplul urmator, pentru Microsoft Excel, adauga un meniu Open Database la meniul File. Comanda adaugata executa procedura OpenDatabaseProc.

Set databaseItem = CommandBars("Worksheet Menu Bar").Controls("File") _
.Controls.Add(Type:=msoControlButton, Before:=3)
With databaseItem
.Caption = "Open Database"
.OnAction = "OpenDatabaseProc"
End With

Exista multe proprietati ale obiectelor reprezentând comenzile din meniuri, proprietati care pot fi fixate în Visual Basic. Pentru mai multe informatii se va studia obiectul CommandBarButton din Help.

Textul descriptiv afisat la punctarea controlului poate fi dat în proprietatea TooltipText. În DescriptionText se poate da un text afisat în bara de stare a aplicatiei etc.

Proprietatea Style stabileste tipul butonului, cu imagine atasata sau nu, constantele predefinite sunt (MsoButtonStyle): msoButtonAutomatic, msoButtonIcon, msoButtonCaption sau msoButtonIconandCaption.

Pentru a începe un grup se va fixa proprietatea BeginGroup a unui obiect CommandBarButton, CommandBarPopup, sau CommandBarComboBox la True. Atribuirea valorii False va elimina linia despartitoare de grupul precedent. Astfel

databaseItem.BeginGroup = True

adauga o linie înaintea intrarii definite în exemplul precedent.

Se utilizeaza Control(index), unde index este titlul sau indexul unei intrari, pentru a returna obiectul care reprezinta intrarea.

Dintre metode mentionam doar metoda SetFocus prin care se stabileste focalizarea pe respectiva comanda (actionarea tastaturii are efect direct asupra controlului) si metoda Execute prin care se executa procedura atasata controlului.

Adaugarea si modificarea meniurilor contextuale

Meniuri contextuale definite de utilizator pot fi create doar în Microsoft Access sau Excel. Aplicatiile Word si PowerPoint nu dispun de aceasta posibilitate.

Crearea meniurilor contextuale se poate efectua prin dialogul Customize (în Access) sau prin Visual Basic (în Access si Excel). În Access, meniurile contextuale pot fi asociate rapoartelor, formelor si controalelor dintr-o forma, un meniu contextual fiind afisat la click dreapta pe obiectul atasat. În Excel exista evenimentul BeforeRightClick la care se poate raspunde prin modificarea unui meniu contextual existent sau prin afisarea unui meniu contextual propriu.

Modificarea meniurilor contextuale predefinite de aplicatii se poate efectua în mod uzual în toate aplicatiile din Microsoft Office.

Dialogul Customize

Pentru Microsoft Access se poate utiliza dialogul Customize pentru adaugarea unui meniu contextual:

    • Se afiseaza dialogul Customize.
    • În fisa Toolbars click New.
    • În boxa Toolbar name se introduce numele noului menu contextual si OK. Este afisat un meniu flotant, vid, cu numele dat.
    • Click Properties pentru afisarea dialogului Toolbar Properties.
    • În Type se selecteaza Shortcut Menu.

Pentru afisarea noului menu contextual din dialogul Customize se va selecta checkboxul de la Shortcut Menus din fisa Toolbars. Meniul creat este listat ultimul în bara afisata.

Visual Basic

Prin metoda Add a colectiei CommandBars se creeaza un nou meniu contextual daca se fixeaza valoarea msoBarPopup pentru argumentul Position al metodei, dupa modelul

Set cstm = CommandBars.Add(Name:="Shortcuts1", Position:=msoBarPopup, _
MenuBar:=False, Temporary:=False

Completarea cu comenzi, modificarea unui meniu contextual se efectueaza prin procedeele descrise la editarea meniurilor/submeniurilor. Prin CommandBars(name), unde name este numele meniului contextual, se returneaza obiectul CommandBar reprezentând meniul contextual. Operând cu elementele colectiei Controls disponibila din obiectul CommandBar se poate personaliza meniul contextual.

Stergerea componentelor meniu

Se poate elimina, cu exceptia meniurilor contextuale si a barelor de meniu built-in, orice componenta de meniu: intrari proprii sau built-in, meniuri proprii sau built-in, bare de meniu proprii.

Prin eliminarea componentelor built-in se poate adapta aplicatia proiectata în Visual Basic la necesitatile utilizatorului atât prin simplificarea interfetei (mai ales pentru utilizatori lipsiti de experienta) cât si prin introducerea accesului direct la fuctionalitatea proiectului.

Este de notat ca se pot restaura componentele built-in eliminate, dar nu si componentele proprii. Acestea trebuiesc create din nou.

Dialogul Customize

Cu dialogul Customize deschis se poate elimina orice componenta de meniu prin

    • Se deschide dialogul Customize
    • Se afiseaza bara de meniu unde se afla componenta dorita.
    • Click dreapta pe componenta respectiva si click pe Delete în meniul contextual afisat.

Pentru stergerea unei întregi bare de meniu proprie, se deschide dialogul Customize, fisa Toolbars, click pe numele barei si click pe butonul Delete. În acest mod nu se poate elimina o bara de meniu predefinita.

Visual Basic

Se utilizeaza metoda Delete pentru a sterge o bara de meniu proprie, un meniu/submeniu drop-down propriu sau nu, sau o intrare proprie sau built-in. Nu se poate elimina o bara de meniu built-in sau un meniu contextual.

Urmatorul exemplu Excel elimina meniul Edit din bara de meniu pentru diagrame.

CommandBars("Chart Menu Bar").Controls("Edit").Delete

Urmatorul exemplu sterge o bara de meniu proprie

CommandBars("Custom Menu Bar").Delete

Restaurarea componentelor de meniu built-in

Dialogul Customize

Utilizarea acestui dialog pentru restaurarea componentelor meniu/submeniu la configuratia originala se face prin:

    • Afisarea dialogului Customize.
    • Vizualizarea barei de meniu necesare.
    • Click dreapta pe meniul/submeniul care se restaureaza si click pe Restore în meniul contextual.

Pentru a restaura în totalitate o bara de meniu built-in, se deschide dialogul Customize, click pe numele barei de meniu în lista Toolbars din fisa sinonima si click pe butonul Restore. Prin restaurarea barei de meniu, toate meniurile si submeniurile continute sunt de asemenea restaurate.

Visual Basic

Metoda Reset aplicata obiectului reprezentând o componenta buit-in produce restaurarea componentei, dupa modelul

CommandBars("Chart Menu Bar").Controls("Edit").Reset

aplicabila în Excel sau

CommandBars("Menu Bar").Reset

care restaureaza, în Word, bara de meniuri sistem.

Modificarile sistemului de meniuri în executie (run-time)

Sistemul de meniuri create în timpul proiectarii poate fi programat astfel încât sa raspunda dinamic la modificarea conditiilor din timpul executiei. Se poate înlocui bara de meniu implicita cu o bara proprie. Daca o anumita intrare nu este adecvata într-un context dat, atunci ea poate fi inhibata sau eliminata. O intrare care reprezinta o optiune cu doua stari, se poate reprezenta imaginea ei ca un buton apasat sau nu. Se poate, de asemenea, redenumi o comanda dupa actiunea posibila asupra unei entitati (de genul Hide — Show).

Este de înteles ca toate aceste modificari pot fi efectuate în timpul executiei prin cod Visual Basic.

Afisarea unei bare de meniu

Pentru afisarea unei bare proprii de meniu în locul bare de meniu active, se fixeaza proprietatea Visible a obiectului CommandBar corespunzator la valoarea True. Noua bara de meniu vizualizata înlocuieste în mod automat bara activa. Prin fixarea proprietatii Visible la False, se reface bara de meniu implicita, operatiune recomandata înaintea parasirii proiectului Visual Basic.

La pornirea aplicatiei Microsoft Office este afisata bara de meniu implicita. În Word se poate totusi înlocui bara implicita a aplicatiei la pornire deoarece ultima bara de meniu afisata la oprirea aplicatiei Word poate fi salvata în template-ul Normal si restaurata în mod automat. În celelalte aplicatii, ca si în Word, se utilizeaza evenimentul Open pentru fixarea pe True a proprietatii Visible pentru bara de meniu proprie, sau se utilizeaza un macro activat de utilizator sau prin program.

Afisarea dinamica a componentelor de meniu

Daca o componenta de meniu se aplica doar unui document particular, este recomandabil ca aceasta componenta sa apara doar atunci când documentul este activ; acest mod de operare reduce aglomerarea inutila a interfetei. Se poate limita viata unei componente de meniu doar la perioada în care este deschis sau activ documentul caruia i se aplica.

O alternativa este ca asocierea document – componenta de meniu sa se gestioneze prin stabilirea proprietatii Visible la True sau False dupa cum este necesara, sau nu, componenta respectiva. Procedeul poate fi utilizat inclusiv pentru o bara de meniu si este, uneori, de preferat procedeului prin care se adauga/sterge o componenta.

Pentru a afisa în mod dinamic componentele de menu, se scriu procedurile de raspuns la evenimente prin care se afiseaza sau se ascund, se creeaza sau se sterg componentele respective. Daca, însa, aplicatia gazda nu suporta evenimente, atunci nu se pot personaliza componentele în mod dinamic. O alternativa este, pentru aceste aplicatii, asignarea procedurilor la proprietatea OnAction a altor elemente de meniu. Daca aplicatia permite controale ActiveX, atunci se poate modifica interfata aplicatiei container ca raspuns la un eveniment suportat de un control ActiveX.

Observatie. Deoarece Word memoreaza personalizarile în documente sau sabloane, componentele proprii sunt vizibile atunci când documentul sau sablonul este disponibil în contextul curent si ascunse atunci când documentul sau template-ul nu este disponibil. Prin contrast, deoarece Microsoft Excel memoreaza personalizarile la nivel de spatiu de lucru, modificarea dinamica a interfetei se realizeaza prin schimbarea proprietatii Visible în proceduri eveniment.

Permiterea si inhibarea componentelor de meniu

Daca se doreste oprirea utilizatorului de la selectarea unei intrari de meniu, comanda respectiva poate fi inhibata. O comanda inhibata apare pe meniu într-o culoare stearsa si nu poate fi activata. Acest atribut este stabilit de proprietatea Enabled care la True permite accesul la comanda iar la False interzice accesul. Proprietatea nu se poate fixa pentru intrari built-in de meniu si nici pentru un submeniu ca obiect (pot fi inhibate însa toate intrarile submeniului).

Urmatorul exemplu Excel adauga comanda Open Database la meniul File a barei de meniu pentru foaia de calcul si apoi inhiba comanda adaugata:

CommandBars("Worksheet Menu Bar").Controls("File") _
.Controls.Add("Open Database").Enabled = False

Daca proprietatea este stabilita la nibvelul unui meniu, ca în exemplul urmator, toate comenzile meniului sunt interzise:

CommandBars("Worksheet Menu Bar").Controls("File").Enabled = False

Indicarea starii unei intrari de meniu

Daca o intrare a unui meniu reprezinta o optiune cu doua stari, este posibil sa se modifice aspectul imaginii comenzii încât sa arate ca un buton apasat sau ridicat, potrivit starii optiunii. Aceasta se realizeaza prin stabilirea proprietatii State a intrarii. Proprietatea poate avea una dintre valorile (constantele MsoButtonState): msoButtonUp, msoButtonDown sau msoButtonMixed.

Exemplul urmator (în Excel) comuta între cele doua stari ale unei comenzi proprii inserate în meniul View:

Sub DatabaseView()
With CommandBars("Worksheet Menu Bar").Controls("View").Controls("Database")
If .State = msoButtonUp Then
.State = msoButtonDown
' comutare la viziunea database
Else
.State = msoButtonUp
' comutare la viziunea worksheet
End If
End With
End Sub

În timpul executiei se poate schimba imaginea butonului prin lucrul cu proprietatea FaceId pentru a schimba imaginea în momentul schimbarii starii comenzii. Pentru a specifica imaginea de buton care sa fie afisata alaturi de comanda, trebuie sa se gaseasca comanda built-in cu imaginea dorita, sa se determine ID sau si sa se atribuie aceasta valoare proprietatii FaceId (schimbarea proprietatii FaceId nu modifica functionalitatea comenzii). Urmatorul exemplu Excel amplifica exemplul precedent prin schimbarea imaginii în functie de stare.

Sub DatabaseView()
With CommandBars("Worksheet Menu Bar").Controls("View").Controls("Database")
If .State = msoButtonUp Then
.FaceId = 987
.State = msoButtonDown
' comutare la viziunea database
Else
.FaceId = 1
.State = msoButtonUp
' comutare la viziunea worksheet
End If
End With
End Sub

Redenumirea unei intrari de meniu

Proprietatea Caption contine denumirea intrarii. Modificând valoarea proprietatii se poate prezenta utilizatorului o comanda adecvata contextului curent. Exemplul urmator arata cum se poate utiliza acest fapt. Se începe prin inserarea unei comenzi Open Database, moment în care comanda se înlocuieste cu comanda Close Database, adecvata contextului:

CommandBars("MyMenuBar").Controls("File").Controls("Open Database") _
.Caption = "Close &Database"

La redenumirea intrarii trebuie avut grija ca alte proceduri care se refera la comanda sa utilizeze în referinte noul nume.

Se poate utiliza, evident, o variabila care se refera la intrarea de meniu, ceea ce înlatura problemele suplimentare care apar la redenumire:

Set openDatabase = CommandBars(("MyMenuBar"). _
Controls("File").Controls("Open Database")

Schimbarea titlului se efectueaza prin

openDatabase.Caption = "Close &Database"

Bare de unelte

Fiecare aplicatie Microsoft Office ofera un sistem de bare de unelte (toolbar) continând controale pe care utilizatorul le actioneaza pentru a avea acces la comenzile frecvente. Fiecare toolbar poate sa apara depozitat (docked) la una dintre laturile ferestrei aplicatiei sau ca o fereastra flotanta pozitionata oriunde în spatiul de lucru. Fiecare control de pu un toolbar este control grafic prin care utilizatorul poate schimba informatii cu aplicatia Visual Basic.

Afisarea unei bare de unelte într-o aplicatie Office se realizeaza prin meniul View, comanda Toolbars si click pe numele barei dorite. Imaginea atasata barei respective devine selectata. Un nou click ascunde bara de unelte. Bare de unelte aditionale pot fi vazute în dialogul Customize, în lista din Categories.

Exista mai multe tipuri de controale care apar pe o bara de unelte, discutate în continuare.

Cel mai comun tip de unealta este un buton de control simplu, cu o imagine. Grafica, denumita imaginea butonului, este o reprezentare vizuala a comenzii sau optiunii activate de respectivul control. Utilizatorul poate sa actioneze un buton pentru a executa o actiune (de exemplu butonul New creeaza un nou document) sau sa comute între doua stari posibile (cum ar fi butonul Bold).

Alt tip de control este un buton de control care contine o imagine si o paleta derulabila atasata. Utilizatorul actioneaza sageata în jos a controlului penbtru a afisa paleta de unde selecteaza optiunea dorita. Actionarea butonului (nu a sagetii) aplica optiunea selectata (indicata prin grafica). Un exemplu de acest gen este controlul Font Color.

Un control poate fi de tip text box, list box sau combo box. Utilizatorul poate fie tasta text în zona de text, fie actiona sageata în jos si selecta un element al listei. De exemplu, controlul Font Size de pe bara de unelte Word Formatting permite înscrierea direct a marimii fontului sau selectarea dintr-o lista disponibila de marimi.

Ultimul tip de unealta este controlul pop-up, care afiseaza un meniu cu alte controale. În esenta un asemenea control este similar cu un meniu, exemplul fiind butonul Draw care produce la activare afisarea barei de unelte Drawing.

Observatie. Desi sunt identice ca aparenta si comportare, controalele de pe barele de unelte nu sunt aceleasi cu controalele ActiveX. Nu se pot adauga controale ActiveX la bare de unelte si nu se pot adauga controale de toolbar la documente sau forme.

Principii de adaptare a barelor de unelte

Aplicatiile Microsoft Office ofera o mare varietate de modalitati pentru modificarea barelor de unelte: se pot crea noi bare de unelte, se pot adauga noi butoane la barele existente, se poate modifica imaginea de pe un buton, se pot asigna macro-uri, texte ToolTip de ajutor, text asociat afisat în bara de stare a aplicatiei.

Daca se modifica o bara built-in sau se creeaza o bara de unelte proprie depinde de numarul de modificari intentionate sau de dorinta proiectantului. Este recomandabil ca adaugarea sau modificarea unui numar mic de butoane sa se efectueze pe o bara de unelte predefinita, în timp ce proiectele mari sa dispuna de bare de unelte proprii. Indiferent de calea aleasa, configuratia standard poate fi restaurata oricând.

Modificarile pot fi efectuate în timpul proiectarii (design-time) sau în timpul executiei (run-time) prin proceduri Visual Basic. Este preferabil ca modificarile principale sa se efectueze în timpul proiectarii si doar eventualele modificari dinamice, functie de actiunile utilizatorului, sa se efectueze în run-time. O schimbare frecventa a sistemului de meniuri poate îngreuna actiunile utilizatorului.

Utilizarea meniurilor

La orice bara de unelte, built-in sau proprie, se pot adauga controale pop-up, aceleasi ca la crearea meniurilor/submeniurilor. Aceasta actiune este un compromis acceptabil între modificarea unei bare de meniu si introducerea unui mare numar de butoane unelte. Reamintim butonul Draw, sau AutoShapes, de pe bara de unelte Drawing care deschide un meniu.

Adaugarea meniurilor, submeniurilor si intrarilor la o bara de unelte se realizeaza în modul descris în sectiunile precedente care se refera la personalizarea meniurilor.

Utilizarea controalelor Text box, List box si Combo box

Controale de tip text box, list box si combo box se pot adauga atât la barele de unelte built-in cât si la barele proprii. Aceste controale pot fi utile pentru obtinerea repetata a unor informatii de la utilizator sau pentru executarea unei proceduri dependente de valoarea controlului.

Dialogul Customize suporta adaugarea unor controale predefinite (built-in) la orice bara de unelte. Pentru adaugarea unor controale proprii se va utiliza Visual Basic prin care se pot proiecta si adauga controale de tipurile discutate aici. Daca dialogul Customize este deschis, se poate modifica latimea oricarui control (built-in sau propriu) text box, list box sau combo box.

Modificarile barelor de unelte în timpul proiectarii (design-time)

În aceasta sectiune se prezinta crearea unei noi bare de unelte, adaugarea de controale noi (built-in sau proprii), eliminarea controalelor dintr-o bara de unelte, gruparea controalelor si schimbarea dimensiunilor controalelor text box, list box si combo box. Se poate de asemenea modifica sau edita imaginea de pe un control.

Adaugarea unei bare de unelte

Daca se doreste ca uneltele proprii sa fie continute într-o bara de unelte separata, procesul se desfasoara în doua etape: crearea barei si adaugarea controalelor (similar lucrului cu barele de meniu). Se poate utiliza dialogul Customize sau Visual Basic.

Dialogul Customize

  • Se afiseaza dialogul Customize
  • În fisa Toolbars click New.
  • În Toolbar name se introduce numele noii bare de unelte si OK. Se afiseaza o bara de unelte flotanta, cu numele introdus. La aceasta se pot adauga controale.

Noul toolbar este adaugat la lista Toolbars de pe fisa Toolbars a dialogului Customize.

Visual Basic

Se utilizeaza Add a colectiei CommandBars pentru a crea o noua bara de unelte. Prin fixarea argumentului Position la msoBarLeft, msoBarTop, msoBarRight, msoBarBottom sau msoBarFloating se stabileste daca obiectul CommandBar creat este flotant sau aliniat la o latura (docked).

Urmatorul exemplu creeaza si afiseaza o bara de unelte noua numita "Custom Tools".

Set cstm = CommandBars.Add(Name:="Custom Tools", Position:=msoBarFloating, _
MenuBar:=False, Temporary:=False)
cstm.Visible = True

Adaugarea si gruparea controalelor

Pe lânga adaugarea controalelor la orice bara de unelte, acestea pot fi separate prin linii dupa functionalitate.

Dialogul Customize

Prin dialogul Customize se pot adauga controale built-in în modul urmator:

  • Se afiseaza dialogul Customize
  • Prin fisa Toolbars se vizualizeaza bara de unelte care se modifica.
  • În fisa Commands se alege categoria necesara de comenzi. Comenzile categoriei sunt afisate în caseta Commands.
  • Se trage controlul care se adauga din lista Commands în pozitia sa de pe bara de unelte.

Pentru adaugarea controalelor proprii fiecare aplicatie Office are particularitatile ei, prezentate în continuare.

Microsoft Access

Pentru adaugarea unui control care executa un macro se urmeaza pasii descrisi anterior dar în Categories (fisa Commands) se selecteaza All Macros. Se trage apoi macroul dorit din lista Commands pe bara de unelte.

Pentru un control care executa o procedura de tip Function se procedeaza similar în primii pasi dar pe bara se trage orice control (din orice categorie). Dupa pozitionarea pe bara de unelte, click dreapta pe control si deschiderea dialogului Control Properties în care se fixeaza numele în Caption si actiunea de executare a procedurii Visual Basic în On Action. Expresia trebuie sa aiba sintaxa: =functionname().

Microsoft Excel

Se urmeaza aceiasi pasi descrisi anterior, dar în Categories se alege Macros, se trage controlul Custom Button din lista Commands în pozitia stabilita pe bara de unelte. Click dreapta pe noul control si Assign Macro in meniul contextual. În dialogul Assign Macro se selecteaza macroul executat de buton.

Microsoft Word

Similar procedurii de la Excel, în Categories se alege Macros si se trage din lista Commands denumirea procedurii dorite pe bara de unelte care se modifica. Utilizând meniul contextual afisat pentru noul control se stabilesc atributele sale.

Este de revazut si observatia facuta la subiectul similar de la meniuri privind procedurile proprii care au acelasi nume cu controalele built-in.

Microsoft PowerPoint

Se procedeaza la fel ca în Word.

Modificarea aparentei unei unelte

Aspectul unui buton de pe o bara de unelte poate fi o imagine, un text sau ambele. Aspectul este determinat de stilul butonului, fixat prin comenzile din meniul contextual disponibil în timp ce este activ dialogul Customize.

Stilurile posibile pentru un buton sunt descrise în tabelul urmator.

Stilul

Aspectul butonului

Default Style

Numai imaginea butonului

Text Only (în meniuri)

Numai imaginea butonului

Text Only (în rest)

Numai numele

Image And Text

Imaginea si numele

Atunci când dialogul Customize este activ, se poate schimba imaginea de pe buton într-unul din modurile descrise la procedura similara de la intrarile unui meniu.

Gruparea controalelor

Într-un mod similar celui de la gruparea comenzilor de pe un meniu, pentru a începe un grup cu un control se activeaza dialogul Customize si în meniul contextual al controlului se alege Begin Group. O noua activare a acestei comenzi elimina linia separatoare de grup.

Visual Basic

Se utilizeaza metoda Add a colectiei CommandBarsControls pentru adaugarea unui nou control la obiectul CommandBar care reprezinta toolbarul care se modifica. Adaugarea unui control built-in se efectueaza specificând numarul ID al controlului în argumentul Id al metodei Add. Urmatorul exemplu adauga controlul built-in Spelling la bara numita "Quick Tools".

Set mySpell = CommandBars("Quick Tools").Controls.Add(Id:=2)

Pentru adaugarea unui control propriu se adauga un nou control si apoi se fixeaza proprietatea OnAction pe procedura Visual Basic executata la clickarea controlului. În argumentul Type se da valoarea msoControlButton pentru a arata ca este bvorba de un buton. Se poate stabili proprietatea FaceId la ID-ul unui control built-in pentru a-i da o imagine definita.

Urmatorul exemplu (în Excel) adauga un buton pe bara de unelte Standard, înaintea butonului Save. Butonul reprezinta procedura OpenDatabaseProc. Exemplul stabileste imaginea butonului la o grila (ID 987).

Set databaseItem = CommandBars("Standard").Controls. _
Add(Type:=msoControlButton, Before:=3)
With databaseItem
.OnActiona = "OpenDatabaseProc"
.FaceId = 987
End With

Pentru a începe un nou grup se fixeaza pe True proprietatea BeginGroup a obiectului CommandBarButton, CommandBarPopup sau CommandBarComboBox reprezentând controlul.

Se utilizeaza Controls(index), unde index este titlul sau indicele controlului, pentru a returna obiectul reprezentând controlul.

Adaugarea si initializarea controalelor text box, list box si combo box

Daca un control de acest tip este built-in, adaugarea lui se poate efectua prin dialogul Customize în mod similar adaugarii altor controale built-in.

Pentru adaugarea si initializarea continutului unui control propriu de tip text box, list box sau combo box se poate utiliza doar Visual Basic. Prin metoda Add a colectiei CommandBarControls se poate crea un asemenea control specificând drept tip al controlului (în argumentul Type) una dintre valorile

Controlul

Argumentul Type

Text box

msoControlEdit

List box

msoControlDropDown

Combo box

msoControlComboBox

Se poate folosi proprietatea Style a unui control text box, list box sau combo box pentru a indica daca titlul (textul) apare în stânga boxei respective.

Urmatorul exemplu adauga un control combo box cu eticheta "Quarter" la o bara de unelte proprie si atribuie controlului macro-ul cu numele "ScrollToQuarter".

Set newCombo = CommandBars("Custom1").Controls. _
Add(Type:=msoControlComboBox)
With newCombo
.AddItem "Q1"
.AddItem "Q2"
.AddItem "Q3"
.AddItem "Q4"
.Style = msoComboNormal
.OnAction = "ScrollToQuarter"
End With

La executarea aplicatiei Visual Basic, procedura atribuita controlului în proprietatea OnAction este apelata de fiecare data când se modifica controlul. În procedura se poate utiliza proprietatea ActionControl a obiectului CommandBars pentru a gasi care control a fost schimbat si a returna valoarea modificata. Proprietatea ListIndex returneaza intrarea introdusa în combo box.

Eliminarea unui control dintr-o bara de unelte

Eliminarea controalelor poate fi necesara atât pentru ca unele actiuni sunt executate prin interfata proprie proiectata, cât si pentru simplificarea interfetei cu un utilizator mai putin experimentat.

Restaurarea configuratiilor standard este posibila pentru barele de unelte built-in. Barele de unelte si controalele proprii trebuiesc create din nou în vederea restaurarii unei configuratii initiale.

Dialogul Customize

Pentru a sterge un control:

    • Se deschide dialogul Customize.
    • Se afiseaza bara de unelte care se modifica prin fisa Toolbars.
    • Click dreapta pe controlul care se elimina si comanda Delete din meniul contextual.

Pentru a elimina o întreaga bara de unelte proprie se deschide dialogul Customize, click pe numele barei în lista Toolbars a fisei sinonime si click pe butonul Delete. Nu se pot elimina barele built-in (acestea se afiseaza sau nu prin View – Toolbars etc.).

Visual Basic

Se utilizeaza metoda Delete pentru a elimina din colectia corespunzatoare un obiect de control sau bara de unelte proprie. Nu se poate elimina o bara de unelte built-in.

Urmatorul exemplu Excel elimina controlul Print din bara de unelte Standard.

CommandBars("Standard").Controls("Print").Delete

iar pentru a sterge o bara proprie de unelte

CommandBars("Custom Bar").Delete

Restaurarea barelor de unelte built-in

Din dialogul Customize

    • Se afiseaza dialogul Customize.
    • În fisa Toolbars se selecteaza bara de unelte care se restaureaza.
    • Click Restore.

În Visual Basic se utilizeaza metoda Reset:

CommandBars("Standard").Reset

Barele de unelte proprii nu se restaureaza în mod automat; ele se creeaza din nou.

Modificarile barelor de unelte în timpul executiei (run-time)

Barele de unelte pot fi programate astfel încât sa raspunda dinamic la schimbarile de conditii din timpul executiei. Actiunile posibile uzuale sunt interzicerea accesului la un buton si comutarea imaginii apasat/ridicat.

Afisarea sau ascunderea controalelor si barelor de unelte

Pentru marirea spatiului de lucru sau pentru simplificarea interfetei cu utilizatorul, o bara de unelte poate fi afisata doar atunci când este necesara. Vizibilitatea unei bare este dependenta de valoarea proprietatii Visible, cu valorile True si False. Fixarea valorii True este echivalenta cu selectarea barei în lista Toolbars din dialogul Customize si click pe OK.

Urmatoarea procedura Excel, atribuita intrarii de meniu View MyToolbar din meniul View, comuta starile intrarii din meniu si proprietatea Visible a barei de unelte de fiecare data când utilizatorul face click pe intrarea din meniu.

Sub ViewMyAppToolbar()
With CommandBars("Worksheet Menu Bar").Controls("View"). _
Controls("View MyToolbar")
If .State = msoButtonUp Then
.State = msoButtonDown
CommandBars("MyAppTools").Visible = True
Else
.State = msoButtonUp
CommandBars("MyAppTools").Visible = False
End If
End With
End Sub

Atunci când o bara de unelte este vizibila, utilizatorul poate actiona orice control de pe ea. Prin fixarea proprietatii Visible drept True sau False se poate efectiv adauga sau elimina un control din spatiul de lucru al utilizatorului fara a sterge efectiv controlul.

Observatie. Deoarece Microsoft Word salveaza personalizarile la nivel de documente sau sabloane, barele de unelte proprii si controalele proprii sunt vizibile doar daca documentul sau template-ul este disponibil. Microsoft Excel salveaza personalizarile la nivel de spatiu de lucru si se va utiliza proprietatea Visible în coduri activate de evenimente pentru a modifica dinamic interfata cu utilizatorul.

Mutarea si redimensionarea barelor de unelte

Adaptarea proeminentei pe ecran a unei bare de unelte la contextul curent a aplicatiei se poate efectua si prin schimbarea locului pe ecran, a dimensiunilor.

Proprietatile Height, Width, Left, Top si Position permit manevrari de pozitie si dimensiune pentru un obiect CommandBar.

Restaurarea barelor de unelte built-in

Metoda Reset realizeaza restaurarea unui obiect predefinit. Urmatorul exemplu realizeaza refacerea tuturor barelor de unelte built-in si eliminarea tuturor barelor proprii. Pentru aceasta se foloseste proprietatea BuiltIn care returneaza True pentru un obiect predefinit.

For Each cb In CommandBars
If cb.BuiltIn Then
cb.Reset
Else
cb.Delete
End If
Next

Observatie. Prin restaurarea barelor built-in se elimina si toate controalele proprii inserate în acele bare. Se poate pierde astfel accesul la o procedura din aplicatia Visual Basic. Pentru a ocoli aceasta capcana se recomanda ca eliminarea controalelor proprii de pe o bara de unelte built-in sa se efectueze individual, în functie de contextul curent si nu prin restaurare globala.

Permiterea si interzicerea accesului la controale

Ca alternativa la afisarea si ascunderea controalelor se poate permite sau interzice accesul prin manevrarea proprietatii Enabled. Proprietatea poate fi utilizata si pentru aflarea starii curente a controlului.

Urmatorul exemplu inhiba butonul al treilea de pe bara Standard.

CommandBars("Standard").Controls(3).Enabled = False

Un control interzis produce un beep la actionare si nu lanseaza procedura asociata.

Indicarea starii activ/inactiv a unui buton

Pentru butoanele care comuta între doua stari, proprietatea State, cu valorile msoButtonDown si msoButtonUp, poate fi utilizata, similar exemplelor de la meniuri, pentru reprezentarea grafica a celor doua optiuni posibile.

Modificarea controalelor Text box, List box si Combo box

Daca se utilizeaza controale proprii de tip text box, list box sau combo box, în timpul executiei se poate modifica textul afisat în zona text a controlului sau adauga/elimina intrari în listele controalelor.

Proprietatea Text reflecta textul afisat în zona text a controlului si poate fi fixata pe o valoare reflectând modificari din aplicatie.

Metodele AddItem si RemoveItem permit procesarea listelor din controale.

Alte proprietati si metode se vor studia din Help. De exemplu exista posibilitatea declararii unui antet de lista (intrari separate de celelalte printr-o linie).

ID-uri de controale si intrari de meniu

Fiecare aplicatie Office contine un set unic de bare de meniuri si de unelte si un set unic de intrari de meniuri si de controale, doar o mica parte dintre acestea apar efectiv în aplicatie. De asemenea, dupa cum s-a explicat la începutul capitolului, fiecare aplicatie are un mod unic de memorare a meniurilor si barelor de unelte.

În timp ce functionalitatea asociata cu fiecare intrare built-in de meniu si cu fiecare unealta apartine unei aplicatii Office specifice, titlul, imaginea de pe buton, latimea si alte proprietati implicite sunt memorate într-o resursa partajata de toate aplicatiile. Referintele la componentele continute în aceasta unica resursa se fac prin numerele ID specifice intrarilor de meniu si uneltelor.

Aceeasi resursa comuna contine de asemenea proprietatile implicite ale controalelor pop-up care afiseaza meniurile built-in. Totusi, aceste controale pop-up nu contin si intrarile meniurilor built-in, cu alte cuvinte controalele pop-up sunt vide.

Referirea la ID-uri poate fi ocolita prin utilizarea dialogului Customize. Sunt însa situatii când referinta este necesara:

    • Se doreste atribuirea unui intrari la un meniu/bara de unelte predefinita sau proprie iar intrarea respectiva nu este disponibila din dialogul Customize în design-time.
    • Se adauga o intrare built-in la un meniu sau la o bara de unelte în run-time.
    • Se doreste copierea unei imagini de buton la alt buton în run-time.

Se poate atribui ID-ul unui element built-in la argumentul Id al metodei Add pentru colectia CommandBarsControls, sau se poate atribui ID-ul unui element la proprietatea FaceId a oricarui control propriu sau built-in.

Observatie. Chiar daca resursa partajata contine informatie despre orice element de interfata din toate aplicatiile Office, nu se pot adauga într-o aplicatie intrari si controale a caror functionalitate este continuta în alta aplicatie. Se poate totusi copia, si în cazul functionalitatilor distincte, imaginea butoanelor de la o aplicatie la alta.

Pentru determinarea ID-urile elementelor de interfata dintr-o aplicatie Office, se poate urma una din caile:

    • Într-un modul se scrie cod pentru atribuirea unui element de meniu sau control dintr-o bara de unelte la o variabila obiect. Se utilizeaza apoi mijloacele de debug pentru a vedea valoarea proprietatii Id a obiectului. Numarul obtinut se memoreaza si poate fi ulterior utilizat.
    • Se executa urmatoarea procedura într-o aplicatie Office pentru a crea un document text care contine lista ID-urilor si titlurilor tuturor comenzilor built-in din aplicatie.
Public Sub outputIDs()
Const maxId = 4000
Open "c:\ids.txt" For Output As #1
' crearea unei bare temporare cu toate elementele disponibile asignate
Set cbr = CommandBars.Add("Temporary", msoBarTop, False, True)
For i = 1 To maxId
On Error Resume Next
cbr.Controls.Add ID:=i
Next
On Error GoTo 0
' scrierea ID si titlu pentru fiecare control
For Each btn In cbr.Controls
Write #1, btn.ID, btn.Caption
Next
' eliminarea barei de comanda si închiderea fiserului de iesire
cbr.Delete
Close #1
End Sub
    • Executarea procedurii urmatoare într-o aplicatie Office pentru a crea un set de bare de unelte proprii care contin atâtea butoane câte valori valide de proprietate FaceId exista în Office; fiecare imagine de buton si textul ToolTip este fixata la o asemenea valoare. Se poate referi încrucisat ID-ul unei comenzi built-in la proprietatea FaceId a unui buton de pe aceste bare si reciproc.
Sub MakeAllFaceIds()
' Make fourteen bars with 300 faces each.
' Note that maxId is greater than last valid ID, so
' error will occur when first invalid ID is used
Const maxId = 3900
On Error GoTo realMax
For bars = 0 To 13
firstId = bars*300
lastId = firstId + 299
Set tb = CommandBars.Add
For i = firstId To lastId
Set btn = tb.Controls.Add
btn.FaceId = i
btn.ToolTipText = "FaceId = " & i
Next
tb.Name = ("Faces " & CStr(firstId) & " to " & CStr(lastId))
tb.Width = 591
tb.Visible = True
Next
' Delete the button that caused the error and set toolbar name
realMax:
btn.Delete
tb.Name = ("Faces " & CStr(firstId) & " to " & CStr(i–1))
tb.Width = 591
tb.Visible = True
End Sub

Nota. ID-urile controalelor pop-up pentru meniurile built-in sunt în domeniul 30002 – 30426. Reamintim ca aceste ID-uri returneaza copii vide ale meniurilor predefinite.


Document Info


Accesari: 1266
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 )