cuprins c 6 - vb - utcluj.ro

28
1 Cuprins C 6 - VB 1. Lucrul cu formulare ..................................................... 3 2. Colect -ia Forms .......................................................... 5 3. Realizarea meniurilor ................................................... 8 4. Meniuri Pop Up ........................................................ 10 5. Controlul Toolbar - bare cu instrumente ............................ 11 6. Manipularea registrului Windows ................................... 14 7. Principiile de lucru cu tablourile de controale ..................... 15 8. Exemplu de lucru cu tablou de controale ........................... 16 9. Caracteristici generale ale aplicat -iilor MDI ........................ 18 10. Specificul aplicat -iilor MDI în Visual Basic ........................ 19 11. "Drag and Drop" automat ............................................. 22 12. "Drag and Drop" manual .............................................. 24 13. OLE "Drag and Drop" automat ....................................... 26 14. OLE "Drop" manual ................................................... 27

Upload: others

Post on 03-Oct-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

2. Colect-ia Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Realizarea meniurilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5. Controlul Toolbar - bare cu instrumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6. Manipularea registrului Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7. Principiile de lucru cu tablourile de controale . . . . . . . . . . . . . . . . . . . . . 15
8. Exemplu de lucru cu tablou de controale . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
9. Caracteristici generale ale aplicat-iilor MDI . . . . . . . . . . . . . . . . . . . . . . . . 18
10. Specificul aplicat-iilor MDI în Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . 19
11. "Drag and Drop" automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
12. "Drag and Drop" manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
13. OLE "Drag and Drop" automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
14. OLE "Drop" manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2
! Formulare multiple ! Meniuri ! Bare cu instrumente (Toolbars) ! Controlul Common Dialog ! Pástrarea sta7rii aplicat-iei ! Tablouri de controale (Control Arrays) ! MDI ! Drag and Drop ! OLE Drag and Drop
Cursul care urmeaza7 îs-i propune sa7 prezinte modalita7 t-ile de creare a unor aplicat-ii mai complexe, cu mai multe formulare folosind controale ale ca7ror pozit-ie este determinata7 prin cod.
Meniurile s-i barele cu intrumente au rolul de a us-ura interact-iunea cu aplicat-ia, iar controlul Common Dialog permite accesul la ferestrele de dialog standard (fis-iere, tipa7rire, fonturi etc.) din Windows.
Pa7strarea sta7rii aplicat-ie se realizeaza7 folosind funct-ii simple pentru manipularea registrului Windows. Între doua7 rula7ri distince aplicat-ia va putea sa7 ret-ina7 seta7rile fa7cute în prima rulare s-i în a doua ca urmare a stoca7rii seta7rilor, ce trebuie sa7 persiste dincolo de pa7ra7sirea aplicat-iei, în registrul Windows.
Tablourile de controale permit crearea de noi controale în timpul execut-ie aplicat-iei s-i împreuna7 cu codul specific lor.
VB asigura7 posibilitatea crea7rii de aplicat-ii MDI (Multiple Document Interface), punctele cheie specifice acestui caz vor fi s-i ele prezentate.
O mare parte dintre tehnicile de de drga and drop vor fi s-i ele prezentate pentru a cres-te posibilita7 t-ile de interact-iune cu aplicat-ia.
3
Load frmCerc Me.Hide Unload Me Unload frmCerc
Formulare multiple ! Obiectul Startup
! Load s-i Unload
1. Lucrul cu formulare Majoritatea aplicat-iilor vor lucra cu mai multe formulare, pîna7 în acest punct toate aplicat-iile au avut un singur formular. Deoarece situat-ia este nerealista7 , în cele ce urmeaza7 , se prezinta7 modul de extindere a unei aplicat-ii prin folosirea mai multor formulare.
Ada7ugarea unui formular Un formular nou poate fi ada7ugat aplicat-iei selectînd dm meniul Project pe Add Form. O alta7 modalitate ar fi clic pe butonul drept al mouse-ului în fereastra Project Explorer, apoi selectat-i din meniu pe Add, Form. Fereastra de dialog afis-ata7 este aceeas-i în ambele cazuri.
O modalitate mai put-i cunoscuta7 este cea de tragere cu "drag and drop" a unui formular existent din Windows Explorer în fereastra Project Explorer.
Tip Dupa7 ada7ugrea unui formular existent la aplicat-ie va trebui sa7 salvat-i formularul în directorul în care se afla7 proiectul aplicat-iei pentru a lucra cu o copie a fromularului.
Obiectul Startup Înptr-un proiect standard exe numai un singur formular va fi afis-at atunci cînd aplicat-ia se ruleaza7. Într-o aplicat-ie cu formulare multiple programatorul trebuie sa7 aleaga7 formularul care va fi afis-at la pornirea aplicat-iei prin selectarea lui Properties, din meniul Project s-i setarea
4
numelui formularului dorit în Startup Object. În exemplu prezentat formularul cu numele frmInceput a sort selectat în acest scop. Este o practica7 obis-nuita7 ca în timpul dezvolta7rii aplicat-iei numele acestui formular sa7 fie modificat la numele noilor formulare ada7ugate aplicat-iei în vederea testa7rii lor. O alta7 opt-iune este Sub Main . Daca7 aplicat-ia cont-ine o procedura7 Public cu numele Main într-un oarecare modul aceasta va fi lansata7 în execut-ie (în locul afis-a7rii unui formular). În aceasta7 procedura7 se pot scrie instruct-iuni pentru înca7rcarea s-i afis-area mai multor formulare, simultan, la pornirea aplicat-iei. O alternativa7 la aceasta7 solut-ie ar fi metoda Load a formularului de pornire în care ar putea fi scrise aceleas-i intruct-iuni ca s-i în Main.
Înca7rcarea s-i afis-area formularelor Afis-area unui formular din cod se face cu metoda Show, caz în care VB realizeaza7 urma7toarele act-iuni:
! verifica7 daca7 formularul este deja înca7rcat în memorie, daca7 nu este atunci îl va înca7rca;
! verifica7 daca7 formularul este vizibil, daca7 nu este îl face vizibil; ! are grija7 ca formularul sa7 fie afis-at peste (în fat-a) orice alte formulare deja
deschise s-i îl face formular activ.
Pentru afis-area unui formular cu numele (Name) frmCerc ce mai simpla7 sintaxa7 este:
frmCerc.Show
Metoda Show are doua7 argumente opt-ionale; primul (Modal) controleaza7 daca7 formularul trebuie închis înainte de revenirea la interact-iunea celelalte formulare ale aplicat-iei (comportament modal) sau daca7 utilizatorul poate interact-iona cu alte formulare în timp ce formularul frmCerc este deschis (comportament ne-modal).
frmCerc.Show vbModal frmCerc.Show vbModeless
Daca7 acest argumente este omis valoarea implicita7 este vbModeless, adica7 fereastra are un comportament ne-modal.
Al doilea argument opt-ional (OwnerForm) permite numirea unui formular ce va fi proprietarul formularului afis-at, caz în care apar urma7toarele efecte:
! formularul aflat în proprietatea altui formular va fi afis-at peste proprietar; ! formularul aflat în proprietatea altui formular poate fi centrat în interiorul
formularului proprietar folosind proprietatea StartUpPosition; ! formularul care este în proprietatea altui formular eset închis automat atunci
cînd este închis proprietarul.
frmCerc.Show vbModeless, Me
Dim frm As Form For Each frm In Forms
If frm Is frmCerc Then ... If TypeOf frm Is frmGrafic Then ...
Next
Unload frm Next
înca7rcate ! Poate fi parcursa7 iterativ cu For Each ... Next
# pentru ga7sirea unui formular sau a unui tip de formular se foloses-te secvent-a:
# pentru a termina o aplicat-ie se foloses-te secvent-a:
prin care un formular este deschis dintr-un altul unde prin folosirea lui Me formularul actual devine proprietarul celui nou afis-at.
VB ofera7 posibilitatea înca7rca7rii unui formular în memorie fa7ra7 a-l afis-a însa7 prin folosirea instruct-iunii Load. Un exemplu de utilizare este:
Load frmCerc
Instruct-iunea este des utilizata7 în aplicat-iile în care, la pornire, se dores-te preînca7rcarea unui numa7r de formulare pe care utilizatorul este aproape sigur ca7 le va folosi. Preînca7rcarea formularelor la pornirea aplicat-iei face ca aceasta sa7 para7 ca7 pornes-te mai încet, dar mai tîrziu, atunci cînd utilizatorul dores-te sa7 foloseasca7 acele formulare, el vor fi deja în memorie, VB mai necesitînd doar un scurt timp pemtru afis-area lor (percept-ia la utilizator este aceea ca7 aplicat-ia ruleaza7 mai repede).
2. Colect-ia Forms Fiecare aplicat-ie VB are în timpul execut-ie ei o colect-ie Forms ce stocheaza7 cîte o referint-a7 la fiecare formular înca7rcat în memorie. În particular, colect-ia Forms devine utila7 în cazul aplicat-iilor MDI unde copii multiple ale aceluias-i tip de formular sînt înca7rcate în memorie
6
în acelas-i timp. Aplicat-iile MDI vor fi discutate în acest curs.
Colect-ia este un obiect ce stocheaza7 o mult-ime de obiecte de acelas-i tip. Ea se poate folosi pentru a parcurge în mod iterativ s-i secvent-ial obiectele colect-iei cu ajutorul unui poantor ce stocheaza7 o referint-a7 un obiect al colect-iei. Instruct-iunea For Each ... Next este folosita7 în conjunct-ie cu colect-ia Forms pentru a determina daca7 un anumit formular este sau nu înca7rcat sau pentru a termina aplicat-ia.
Determinarea sta7rii de înca7rcare a fromularelor VB nu are o funct-ie pentru a determina daca7 un anumit formular este sau nu înca7rcat în memorie. Aplicat-ia ar trebuie sa7 poate determina daca7 un anumit formular este deschis sau nu deoarece des-i codul poate deschide un anumit formular, utilizatorul ar putea sa7-l închida7 . Secvent-a de cod care urmeaza7 defines-te o funct-ia EsteIncarcat ce va întoarce valoarea True daca7 formularul este înca7rcat:
Function EsteIncarcat(Formular As Form) As Boolean Dim frm As Form EsteIncarcat= False For Each frm In Forms If frm Is Formular Then EsteIncarcat= True Exit Function End If Next End Function
Pentru a determina daca7 un tip generic de formular este înca7rcat se va folosi operatorul TypeOf dupa7 cum s-a prezentat deja în figura anterioara7 .
Terminarea aplicat-iilor Orice aplicat-ie VB poate fi terminata7 cu instruct-iunea End, însa7 aceasta7 terminare este oarecum brutala7 deoarece opres-te toate prelucra7rile imediat s-i descarca7 întreaga7 aplicat-ie fa7ra7 a da s-ansa utilizatorului sa7-s-i închida7 fis-ierele deschise sau sa7-s-i salveze datele.
Formularele au evenimentele QueryUload s-i Unload care sînt frecvent folosite pentru a da posibilitatea utilizatorului sa7-s-i salveze munca sau sa7 anuleze procesul de închidere a aplicat-iei.
Ciclul cel mai adecvat închiderii majorita7 t-ii aplicat-iilor este
Dim frm As Form For Each frm In Forms
Unload frm Next
(Ctrl-E) # Structura
nume # Enabled, Visible
Daca7 cumva se foloses-te o secvent-a7 de formulare modale care conduc utilizatorul printr-o mult-ime de formulare atunci codul de mai sus nu va lucra corect. Secvent-a de cod urma7toare, des-i este mai put-in eleganta7 , are grija7 ca formularele sa7 fie închidse în ordinea inversa7 deschiderii lor:
Dim iFrm As Form For iFrm = Forms.Count-1 To 0 Step -1
Unload Forms(iFrm) Next
Proprietatea Count a colect-iei Forms se foloses-te împreuna7 cu un ciclu For ... Next obis-nuit pentru a parcurge, cu ajutorul variabilei de control iFrm a ciclului, fiecare membru din colect-ie începînd cu ultimul s-i mergînd pîna7 la primul.
Tip Toate colect-iile au o proprietate Count de tipul Long care stocheaza7 numa7rul de obiecte ale colect-iei. Valoarea index-ului corespunza7tor primului obiect este 0, iar cea corespunza7toare ultimului obiect din colect-ie este Count-1.
8
3. Realizarea meniurilor Orice aplicat-ie decenta7 pune la dispozit-ia utilizatorului un sistem de meniuri pentru accesul la funct-iile ei. O aplicat-ie profesionala7 ar trebuie sa7 fie capabila7 sa7 interact-ioneze cu utilizatorul folosind numai tastatura (deoarece ar fi posibil ca într-o anumita7 faza7 a lucrului mouse-ul sa7 crape). Meniurile fac aplicat-iile mai profesionale simplificînd s-i crescînd viteza lucrului cu aceasta.
În VB, fiecare formular poate avea un meniu propriu care va face parte din proiectul formularului (este stocat în fis-ierul .frm). Meniurile nu pot fi partajate între formulare. Editorul de meniuri este instrumentul folosit pentru construirea s-i manipularea meniurilor. Cel mai simplu mod de afis-are al acestuia este apa7sarea tastelor Ctrl+E dupa7 ce formularul este deschis s-i selectat.
Fiecare element de meniu este tratat ca s-i cînd ar fi un obiect al formularului, adica7 va avea un nume (Name), proprieta7 t-ile Caption, Enabled s-i evenimentul Click. Act-iunile de realizat la selectarea meniului se scriu în rutina de tratate a evenimentului Click.
Structura unui meniu Editorul de meniuri afis-eaza7 articolele aliniate pentru a specifica ierarhia elementelor de meniu. Dupa7 cum se observa7 în figura7 , elementele din stînga sînt nivelurile cele mai de sus ale meniului, iar cele aflate sub ele s-i aliniate la dreapta lor sînt submeniuri. Daca7 este cazul, aceasta la rîndul lor por cont-ine alte submeniuri. Alinierea este controlata7 prin tastele în forma7 de sa7geata7 la stînga7 s-i la dreapta.
Linii de separare Afis-area unei linii de separat-ie între articolele unui submeniu se face prin scrierea caracterului minus "-" în proprietatea Caption. Este necesar ca s-i aceasta intrare în meniu sa7 aiba7 definit un nume.
Convent-ii de nume Este importanta7 folosirea unei convent-ii de nume standard. Prefixul mnu urmat de un s-ir vor defini numele intra7rii în meniu s-i scopul acesteia. Astfel pentru specificarea opt-iunilor s-a folosit numele de mnuOptiuni, o varianta7 de nume s-i mai corect ar fi fost mnuFisiereOptiuni.
Taste pentru acces s-i scurta7turi Tastele pentru accesul la un articol de meniu folosesc caracterul "&", în proprietatea Caption, pentru specificarea unei taste de acces la articol. Intrarea în meniul principal a aplicat-ie se face prin apa7sarea tastei Alt dupa7 care se apasa7 tasta de acces la meniu dorit. În acest moment se vor desfa7s-ura toate submeniurile meniului selectat. Un articol de submeniu va putea fi selectat prin apa7sarea tastei de acces la articol (VB afis-eaza7 subliniata7 aceasta7 tasta7). Pentru exemplul din figura, dupa7 apa7sarea tastei Alt s-a apa7sat F, apoi ar putea fi apa7sata7 una dintre tastele: C, A, L, G.
9
PopupMenu a formularului ! Se afis-eaza7 realizînd clic pe
butonul drept al mouse-ului
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
lblTimp.Visible = False
End If
End Sub
Taste scurta7tura7 pot fi alese pentru accesarea imediata7 a unui articol de submeniu fa7ra7 a mai parcurge întreaga structura7 de meniuri.
Tip Evitat-i alegerea unor scurta7turi cu semnificat-ie predefinita7 , doarece se face o redefinirea a semnificat-iei normale. În exemplul prezentat Ctrl+C are semnificat-i normala7 de Copy, dar ca urmare a redefinirii primes-te semnificat-ia deschiderii unui formular care afis-eaza7 un cerc.
Proprieta7t-ile Enabled s-i Visible Setarea proprieta7 t-ii Enabled pe False opres-te accesul utilizatorului la un articol de meniu, realizînd în aceals-i timp s-i o afis-are corespunza7toare a lui. Ascunderea, pentru un întreg grup de subarticole, se realizeaza7 setînd proprietatea Visible a articolului de la nivelul cel mai de sus pe False, din acest monet toate subarticolele lui vor fi ascunse s-i ele automat. Aceasta est o practica7 obis-nuita7 în cazul meniurilor Pop Up s-i a aplicat-iilor MDI.
Proprietatea Checked Realizarea afis-area în stînga unui articol de meniu a unui marcaj de bifare daca7 proprietatea Checked are valoarea True.
10
Bare cu instrumente
! Se folosesc cu ImageList ! Evenimnetul ButtonClick ! Obiectul Button ! Se definesc la proiectare
sau în timpul execut-iei ! Colect-ia Buttons
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "Iesire"
Call mnuIesire_Click
Case "Optiuni"
Call mnuOptiuniPU_Click
End Select
End Sub
4. Meniuri Pop Up Implementarea meniurilor care ra7spund la clic pe butonul drept de mouse sînt foare simplu de realizat în VB (acestea se mai numesc s-i meniuri contextuale).
Formularul cu un astfel de meniu trebuie sa7 aiba7 la nivelul cel mai de sus al meniului asociat formularului un articol care are proprietatea Visible setata7 la False. Din acest motiv acest meniu s-i submeniurile lui sînt invizibile în condit-ii obis-nuite.
Formularul are proprietatea PopupMenu care primes-te ca argument numele articolului invzibil aflat la nivelul cel mai de sus în meniu. În urma acestui apel, meniul invizibil pîna7 atunci va fi afis-at pe ecran dinpozit-ia curenta7 a cursorului de mouse.
În rutina de tratare a evenimentului MouseDown a formularului se verifica7 daca7 parametrul Button are valoarea vbRightClick caz în care s-a apa7sat butonul drept al mouse-ului. În acest caz se va apela metoda PopupMenu care va afis-a meniul dorit pe ecran.
11
5. Controlul Toolbar - bare cu instrumente Controlul Toolbar se foloses-te de cele mai multe ori în conjunct-ie cu controlul ImageList (acesta stocheaza7 o lista7 de imagini pentru butoane). Ambele controlale se ga7sesc în fis-ierul MSCOMCTL.OCX Microsoft Windows Common Controls.
Bara cu instrumente (Toolbar) poate fi setata7 în timpul proiecta7rii formularului sau în timpul execut-ie aplicat-iei. Controlul ImageList, invizibil în timpul execut-iei, este populat cu imagini fiind un obiect de tipul colect-ie. Pentru accesarea proprieta7 t-ilor controlului ImageList, selectat-i controlul de pe suprafat-a formularului, apoi clic pe butonul din dreapta al mouse-ului s-i selectat-i Properties. Ada7ugarea imaginilor (toate de acelas-i tip s-i ma7rime) se face folosing butonul Images. Pentru ca7 este vorba despre o colect-ie, articolele colect-iei vor fi identificate printr-un s-ir unic scris în proprietatea Key. Aceasta este cea mai buna7 metoda7 de identificare des-i s-ar putea folosi s-i proprietatea Index a colect-iei în acelas-i scop.
Realizarea unui Toolbar un timpul proiecta7rii formularului Dupa7 ce controlul Toolbar este plasat pe suprafat-a formularului, clic pe el, apoi clic pe butonul din dreapta al mouse-ului s-i selectat-i pagina de proprieta7 t-i a controlului prin butonul Properties. Din fereasta cu numele General (care se activeaza7 la apa7sarea butonului cu acelas-i nume) modificat-i proprietatea ImageList setînd-o la controlul ImageList ce a fost deja populat cu imagini. Observat-i ca7 celelate proprieta7 t-i ce permit asociearea de imagini butoanelor, adica7 DisableImageList - lista butoanelor inactive s-i HotImageList - lista de butoane afis-ate daca7 cursorul este deplasat peste o regiune de formular ce permite clic, vor fi setate la dezactivate (setate la valoarea <None>).
Clic pe butonul Buttons, de aici se apasa7 butonul Insert Button pentru a crea butoanele. Este bine ca fiecare buton sa7 primeasca7 o valoare unica7 pentru proprietatea Key în vederea identifica7rii ulterioare. Pentru obt-inerea imaginii unui buton proprietatea Image va fi setata7 la valoarea din Key sau Index corespunza7toare imagnii din controlul ImageList. Fieca7rui buton i se mai poate asocia un text ajuta7tor care se scrie în proprietatea ToolTipText.
Setarea unui Toolbar în timpul execut-ie codului Prega7tirea unui Toobar se poate face s-i în timpul execut-ie codului, deseori folosind evenimentul Load a formularului, pentru a cres-te flexibilitatea aplicat-iei. Exemplul care urmeaza7 populeaza7 controlul ImageList cu icon-uri (se presupune ca7 acestea exista7 respectiv calea ca7tre acestea este specificata7 corect). Apoi, se foloses-te metoda Add a colect-iei Button pentru atribuirea valorilor proprieta7 t-ilor deja descrise.
Private Sub Form_Load() 'Popularea controlului ImageList ImgLst1.ListImages.Add , "Iesire", LoadPicture("cale\iconAfara.ico") ImgLst1.ListImages.Add , "Salvare", LoadPicture("cale\iconSave.ico") ImgLst1.ListImages.Add , "Incarcare", LoadPicture("cale\iconLoad.ico") ImgLst1.ListImages.Add , "Sterge", LoadPicture("cale\iconSterge.ico") 'Popularea toolbar-ului tlbGrafic.ImageList = ImgLst1
12
With tlbGrafic.Buttons .Add Key:="SalvarepeDisc", Style:=tbrDefault, Image:="Salvare" .Add Key:="IncarcaredepeDisc", Style:=tbrDefault, Image:="Incarcare" .Add Key:="", Style:=tbrSeparator .Add Key:="StergeDesenul", Style:=tbrDefault, Image:="Sterge" .Add Key:="", Style:=tbrSeparator .Add Key:="Afara", Style:=tbrDefault, Image:="Iesire" End With End Sub
Prinderea evenimentelor Toolbar-ului Des-i Toolbar-ul este format din butoane, acestea nu pot trata evenimentele individual. Controlul Toolbar are un eveniment ButtonClick prin care este transferat obiectul Button care a fost apa7sat. Proprieta7 t-ile Index sau Key se folosesc pentri dentificarea butonului. Un exemplu este prezentat în continbuare;
Private Sub tlbGrafic_ButtonClick(ByVal Button As _ MSComctlLib.Button) Select Case Button.Key Case "Afara" Descarca Case "StergeDesenul" picGrafic.Cls Case "SalvarepeDisc" SavePicture picGrafic.Image, "cale\grafic.bmp" Case "IncarcaredepeDisc" 'inca neimplementat Case Else MsgBox "Optiunea selectata este necunoscuta" _ & Button.Key, vbCritical, "Eroare in Toolbar" End Select End Sub
Codul ar putea cont-ine referiri la codul unui articol de meniul al formularului curent sau un apel al unor proceduri publice pentru ca acestea sa7 fie scrie o singura7 data7 .
13
! Invizibil în timpul execut-iei
With dlgWin .DialogTitle = "Selectai un grafic deja generat" .InitDir = "C:\Documents and Settings\Antal Tiberiu\my " _ & "documents\curs vb\aplicatii" .Filter = "Bitmap-uri|*.bmp|Toate fisierele|*.*" .ShowOpen picGrafic.Picture = LoadPicture(.FileName) End With
Controlul Common Dialog este folosit foarte des punînd la dispozit-ia programatorului ferestrele de dialog ale Windows-ului pentru select-ia de fis-iere (metodele ShowOpen s-i ShowSave), select-ia culorilor (metoda ShowColor), select-ia tipurilor de caractere (metoda ShowFont) s-i select-ia respectiv setarea de imprimate (metoda ShowPrinter)
Pentru a folosi acest control trebuie sa7 ada7ugat-i din Project, Components în toolbox pe Microsoft Common Dialog Control. Deoarece controlul are utiliza7ri multiple trebuie ga7site proprieta7 t-ile de folosit dupa7 rularea metodei dorite; cel mai de se folosesc Color s-i FileName dupa7 cum se va vedea s-i în exempele prezentate (în cazul folosirii imprimantei proprieta7 t-ile se complica7 s-i va7 recomand citirea lor atenta7).
Proprietatea DialogTitle se foloses-te la personalizarea ferestrelor de dialog, iar InitDir s-i Filter asigura7 init-ializarea ferestelor în vederea unui acces cît mai rapid la fis-iere.
Help-ul se poate folosi cu mult succes la determinarea rolului fieca7rei proprieta7 t-i; exista7 s-i proprieta7 t-i ce se formeaza7 prin compunerea de valori, de exemplu Flag defines-te multe dintre aspectele legate comportamentul controlului s-i trebuie setat corect mai ales în cazul metodelor ShowFont s-i ShowPrinter pentru ca acestea sa7 lucreze corect.
14
Pa7strarea sta7rii aplicat-iei folosind registrul ! Apeluri de funct-ii API (tot registrul) ! Proceduri VB (numai HKEY_CURRENT_USER)
# SaveSetting # GetSetting # DeleteSetting
SaveSetting "PrDesenare", "Culori", "Fond", Me.BackColor Me.BackColor = GetSetting("PrDesenare", "Culori", "Fond")
6. Manipularea registrului Windows Salvarea unor valori numerice simple în registru Windows pentru pa7stratra lor între sesiunile de lucru cu aplicat-ia este foarte utila7 . Pentru accesul orica7ror chei din registrul Windows exista7 funct-ii API specifice cum sînt RegOpenKeyEx, RegEnumValue etc. care nu fac obiectul cursului. VB asigura7 asigura7 un mecanism foarte simplu pentru pa7stratrea unor valori numerice cu ajutorul a trei funct-ii interne: SaveSetting, GetSetting s-i DeleteSetting. Aceste procedui stocheaza7 datele asociate cu utilizatorul conectat la Windows într-o pozit-ie speciala7:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings
Sub aceasta7 locat-ie urmeaza7 numele aplicat-iei, numele sect-iunii, numele cheii respectiv valoarea acesteia. Pentru manipularea acestor valori trebuie specificate toate cele trei elemente. Pe evenimentul Unload al formularului sau pe evenimentul Click al butonului de opt-iuni se va scrie codul:
SaveSetting "PrDesenare", "Culori", "Fond", Me.BackColor
iar pentru înca7rcarea valorii se va folosi în evenientul Load codul:
Me.BackColor = GetSetting("PrDesenare", "Culori", "Fond")
15
Tablouri de controale - Principii ! Controale multiple de acelat-i tip s-i cu acelas-i
nume ! Identificate prin proprietatea Index (numa7r
unic) ! Evenimentele sînt partajate (parametrul
Index)
! Create dinamic folosind Load: # meniuri dinamice; # formulare avînd controlae generate dinamic pe
baza unor reguli sau extrase dintr-o baza7 de date; # formulare de tip raport.
7. Principiile de lucru cu tablourile de controale
Pîna7 acum toate controalele de pe suprafat-a formularelor aveau nume distincte. Controalele de acelas-i tip pot avea acelas-i nume caz în care ele se vor distinge prin valoarea data7 proprieta7 t-ii Index. Index este o proprietatea a controlului pe care o seta7m din Fereastra de Proprieta7 t-i la o valoarea numerica7 ce identifica7 unic controlul. Controlul devine parte a unui tablou de controale prin simpla atribuire a unei valori acestei proprieta7 t-ii.
Deoarece rutinele de tratare a evenimentelor folosesc o parte din numele controlului în numele lor, respectiv acesta urmeaza7 dupa7 numele evenimentului s-i un underscore, oricare control din tablou ar putea fi beneficiarul evenimentului. Din acest motiv rutina de tratare a evenimentului s-a modificat ea primind ca parametru de intrare pe Index.
Tip Dupa7 ce o rutina7 de tratare a evenimetelor este scrisa7 VB nu o va modifica daca7 ulterior controlul se face parte a unui tablou de controale. Act-iunea va trebuie fa7cuta7 cu mîna.
Dupa7 ce un element de tablou de controale a fost ada7ugat pe formular noi elemente vor putea fi ada7ugate în timpul execut-ie aplicat-iei folosind instruct-iunea Load. Acesta este scopul principal al tablourilor de controale.
16
face invizibil ! Elementele urma7toare de
încarca7 cu Load
iFisiere = GetSetting("PrDesenare", "MRU", "Contor", 0) For i = 1 To iFisiere Load mnuFisiere(i) With mnuFisiere(i) .Caption = Right(GetSetting("PrDesenare", "MRU", "Fisier" & i), 20) .Tag = GetSetting("PrDesenare", "MRU", "Fisier" & i) .Visible = True End With Next
Private Sub mnuFisiere_Click(Index As Integer) Dim strFisdeIncarcat As String strFisdeIncarcat = mnuFisiere(Index).Tag picGrafic.Picture = LoadPicture(strFisdeIncarcat) End Sub
8. Exemplu de lucru cu tablou de controale Exemplul prezentat este folosit des pentru pa7strarea listei celor mai recente fis-iere folosite de aplicat-ie.
Un element de meniu (submeniu) mnuFisiere(0) se pune în meniu, dar este fa7cut invizibil. La înca7rcarea formularului, pe evenimentul Load, folosind GetSettings se extrage din registrul Windows numa7rul fis-ierelor. Apoi, un ciclu For ... Next se foloses-te împreuna7 cu Load pentru ada7ugarea unor noi submeniuri, identice cu cel invizibil, prin citirea unor chei generate dinamic în registru dupa7 regula - la textul Fisier se concateneaza7 numa7rul de ordine a cheii obt-inînd nume de chei de forma Fisier1, Fisier2 etc. Aceste chei primesc ca valoare numele fis-ierelor recent utilizate în formular. Valorile acestor chei se adauga7
17
complet proprieta7 t-ii .Tag s-i trunchiat proprieta7 t-i .Caption, apoi noul element este fa7cut vizibil. Atunci cînd utilizatorul selecteaza7 intrarea corespunza7toare din meniu evenimentul Click apare, iar proprietatea Index primes-te valoarea coresopunza7toare fis-ierului de citit asociat elementului de meniu.
Salvarea pe disc a fis-ierului grafic generat de aplicat-ie s-i inserarea numelui lui într-o cheie se poate face urma7toarea secvent-a7 de cod:
With dlgWin .DialogTitle = "Dati un nume graficului generat" .InitDir = "C:\Documents and Settings\Antal Tiberiu\my " _ & "documents\curs vb\aplicatii" .Filter = "Bitmap-uri|*.bmp|Toate fisierele|*.*" .ShowSave On Error Resume Next If .FileName <> "" Then SavePicture picGrafic.Image, .FileName iFisiere = GetSetting("PrDesenare", "MRU", "Contor", 0) If iFisiere < 6 Then iFisiere = iFisiere + 1 Else iFisier = 1 End If SaveSetting "PrDesenare", "MRU", "Contor", iFisiere SaveSetting "PrDesenare", "MRU", "Fisier" & iFisiere, .FileName End If End With
18
9. Caracteristici generale ale aplicat-iilor MDI
Majoritatea aplicat-iilor de firma7 sînt MDI, de exemplu suita de aplicat-ii Office sînt MDI, la fel s-i Visual Basic (în acest caz exista7 o setare care permite s-i modul de lucru SDI). MDI este un standard pentru scrierea aplicat-iilor. El defines-te comportamentul permis s-i cel interzis a unei astfel de aplicat-ii. Cîteva dintre caracteristicile aplicat-iilor MDI sînt: # mai multe ferestre de document pot fi deschise simultan acestea fiind însa7 cont-inute
într-o singura7 fereastra7 , numita7 principala7 , din care nu vor putea fi trase afara7 sau pozit-ionate independent de ea;
# nici un control nu poate fi folosit direct de pe suprafat-a formularului principal. Din acest motiv trebuie folosite bara cu istrumente cu butoane sau alte controlale cont-inute în bara de instrumente;
# existenta7 ferestrelor multiple fac dificila7 ga7sirea unei ferestre particulare din acest motiv meniul trebuie sa7 cont-ina7 o fereastra7 Window ce sa7 permita7 accesul direct la toate ferestrele deschise cu posibilitatea aranja7rii ferestrelor alta7 turat, cascadat sau minimizat sub forma de icon-uri;
# ca urmare a posibilta7 t-ii derla7rii în paralel a mai multor activita7 t-i este necesara7 o linie de stare care sa7 afis-eze starea s-i activitatea curenta7;
19
Dim frmCopil As frmGraficMDI Set frmCopil = New frmGraficMDI frmCopil.Caption = "Grafic 0" frmCopil.Show
# ferestrele documentului nu pot fi afis-ate independent. Aplicat-ie MDI trebuie pornita7 pentru a putea afis-a un documet al ei; invers, închiderea aplicat-iei MDI va duce la închiderea, în primul rînd, a tuturor ferestrelor copil;
# fereastra principala7 MDI se bazeaza7 pe un sistem de culori Windows diferit de cel al unor ferestre simple.
10. Specificul aplicat-iilor MDI în Visual Basic
Crearea unei interfet-e MDI în Visual Basic este foarte simpla7 , exista7 insa7 cîteva reguli elementare ce trebuie respectate s-i în particular, unele caracteristici specifice ce trebuie tratate conform celor descrise în continuare.
Reguli MDI # numai un singur formular MDI poate fi ada7ugat unui proiect din Project, Add MDI
Form (vet-i vedea ca7 este imposibil sa7 mai ada7ugat-i un nou formular MDI dupa7 ce unul a fost ada7ugat deja proiectului);
# formularul MDI nu poate fi convertit într-un formular obis-nuit s-i inverse deoarece se bazeaza7 pe definit-ii de clase diferite;
# formularul MDI nu trebuie sa7 fie formularul principal al aplicat-iei, iar aplicat-ia poate cont-ine s-i formulare care nu apart-in fromularului MDI;
# proprietatea MDIChild a unui formular obis-nuit specifica7 apartenent-a7 la formularului
20
la formularul MDI. Proprietatea poate fi setata7 numai în timpul proiecta7rii formularului.
Crearea formularelor copil Deoarece întregul scop al standarului MDI este cel al realiza7rii copiilor multiple pe baza unei singre definit-ii de formular se foloses-te sintxa de cerare a unui obiect nou pentru noile instant-e.
Dim frmCopil As frmGraficMDI Static i As Byte Set frmCopil = New frmGraficMDI frmCopil.Caption = "Grafic " + Str(i) i = i + 1 frmCopil.Show
Redimensionarea formularelor în MDI Aplicat-iile MDI sînt proiecate mai degraba7 pentru prelucrarea documentele decît pentru formulare ce cont-in controale pe suprafat-a lor. Acesta este cazul aplicat-iilor Word, Excel etc. dar în cazul unei aplicat-ii VB aceasta7 situat-ia apare rar deoarece aici formularele au forme, dimensiuni diferite s-i controale pentru a interact-iona cu utilizatorul.
La înca7rcarea formularelor copil în formularul MDI pa7rinte, ma7rimea s-i forma acestora se decide pe baza dimensiunilor pe care formularul MDI le are în acel moment. Situat-ia nu este convenabila7 pentru formulare ce cont-in controale motiv pentru care deseori proprietatea BorderStyle se pune pe 1 (Fixed Style) pentru a preveni ca MDI sau utilizatorul sa7 poata7 modifica dimensiunile. Vor fi problemele cu meniul Fereste (Windows) care ar putea cont-ine opt-iuni de aranjare ala7turara7 sau cascadata7 a ferestrelor copil deschise deoarece formularul MDI va încerca automat sa7 modifice dimensiunile formularelor copil.
Meniuri în MDI Modalitatea standard de creare a unor meniuri MDI (toate formularele copil deschise apar în meniu, cel activ este marcat distinct s-i se poate comuta de pe acesta pe un altul) este realizarea unui singur meniu pentru fromularul MDI. Nu se pun meniuri separate pentru formularele copil, dar se pot crea intra7ri specifice unui anumit formular la nivelul fromularului MDI care vor fi fa7cute însa7 , în prima faza7 , invizibile. În momentul în care formularul copil devine activ se foloses-te evenimentul Activate pentru a face meniul vizibil. Daca7 formularul copil este dezactivat sau desca7rcat din memorie se foloses-te evenimentul corepunza7tor pentru ascunderea meniului.
În exemplu de cod urma7tor un formular copil cu numele frmGraficMDI ce apart-ine formularului MDI cu numele frmMDI face ca la deschiderea lui articolul de meniu, implicit invizibil (are proprietatea Visible dezactivata7), mnuAutor sa7 devina7 vizibil, respectiv invizibil daca7 formularul devine inactiv sau se descarca7 din memorie prin închidere. Structura meniului este prezentata7 în figura urma7toare. Observat-i existent-a unui meniu cu numele Ferestre, el va avea proprietatea WindowList activata7 .
21
Private Sub Form_Unload(Cancel As Integer) frmMDI.mnuAutor.Visible = False End Sub
Meniul Ferestre Meniul Ferestre (Windows în engleza7) într-o aplicat-ie MDI trebuie sa7 aiba7 urma7toare funct-ionare: # permite accesul la oricare fereastra7
copil s-i o afis-eaza7 pe cea activa7 . Pentru aceasta tot ceeace trebuie sa7 faca7 este activarea proprieta7 t-ii WindowList a meniului care dorim sa7 ofere automat aceasta7 funct-ioare;
# asigura7 gestionarea ferestrelor (cascadre, ala7 turare, aranjarea icon-urilor ferestrelor minimizate). Act-iunea se poate realiza prin crearea de intra7ri individuale în meniu pentru fiecare act-iune (as-a cum se observa7 în figura ala7turata7) s-i scrierea de cod pentru fiecare caz particular folosind metoda Arrange a formularului MDI. O alta7 solut-ie este folosirea unui tabel de controale meniu pentru intra7rile corespunza7toare împreuna7 cu proprietatea Index s-i folosirea unei singure linii de cod apelat dupa7 cum urmeaza7:
Private Sub mnuFerestreAranjare_Click(Index As Integer) Me.Arrange Index
End Sub
Pentru meniul prezentat în figura7 codul ar putea fi de forma:
Private Sub mnuAlaturate_Click() Me.Arrange vbTileVertical End Sub Private Sub mnuCascadate_Click() Me.Arrange vbCascade End Sub
22
"Drag and Drop" automat
! Controlul sursa7 (cel care se va trage) are proprietatea DragMode pusa7 pe vbAutomatic (1)
! Redefines-te modul de interact-iune a controlului cu mouse-ul (va putea fi folosit numai cu anumite controale)
! Utilizatorul trage, met-inînd butonul stîng al mouse-ului apa7sat, controlul sursa7 peste cel destinat-ie
! Destinat-ia primes-te evenimentul DragDrop cu
parametrii Source, X s-i Y ! Source poate fi teste cu Is sau TypeOf
Private Sub picGrafic_DragDrop(Source As Control, _ X As Single, Y As Single) If Source Is frmGraficMDI.picGrafic Then picGrafic.Picture = LoadPicture(App.Path & _ "\tempBLOB.bmp") frmBD.BackColor = culOriginala End If End Sub
11. "Drag and Drop" automat "Drag and Drop" este un mecanism pentru transferul mesajelor Windows prin care controlul sursa7 (care este tras) este asociat celui destinat-ie (peste care se trage sursa). Sursa s-i destinat-ia vor fi legate prin evenimentul DragDrop primit de ca7tre destinat-ie. Un efect apare doar daca7 se va scrie un cod care sa7 dea o semnificat-ie asocierii (unica except-ie este "OLE drag and drop" care va fi discutata7 mai tîrziu).
În condit-ii normale cobtroalele unui formular nu vor putea fi trase pe ecran din cauza seta7rii proprieta7 t-ii DragMode la valoarea vbManual (0). Daca7 aceata este setata7 la valoarea vbAutomatic (1) utilizatorul va putea trage controlul din pozit-ia init-iala7 . Strategia de lucru este utila7 pentru controalele Label, ImageBox s-i PictureBox care nu interact-ioneaza7 dupa7 s-ablonul clasic cu mouse-ul. Cînd modul "drag and drop" este activat evenimentele Click, DblClick, MouseMove, MouseUp s-i MouseDown nu mai apar deoarece controlul va fi tras. Obiectul deasupra ca7ruia se va lasa sursa poate fi un formular sau un control al formularului. Acesta primes-te evenimentul DragDrop cu coordonatele mouse-ului stocate în X s-i Y, iar în parametrul Source o referint-a7 la obiectul care a fost tras.
23
De cele mai multe ori Source va fi testat pentru a verifica daca7 un control particular s-i anume cel as-teptat, a fost cel tras peste cel destinat-ie. În acest scop se poate folosi operatorul Is ce permite comparea a doua7 obiecte de acelas-i tip. Daca7 însa7 codul accepta7 sa7 lucreze cu mai multe tipuri de obiecte operatorul, mai general, TypeOf se va folosi pentru în acelas-i scop.
Daca7 proprietatea DragIcon a controlului care este tras nu are un icon setat regiunea dreptunghiulara7 care delimiteaza7 icon-ul va fi afis-ata7 . Pentru asociearea unui icon controlului folosind proprietatea DragIcon se pot folosi icon-urile ce se ga7sesc stocate în C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons. Pentru crearea de icon-uri noi se poate folosi aplicat-ia gratuita7 Imagedit.exe (vezi figura ala7turata7) stocata7 în subdirectorul IMAGE a directorului Tools a CD-ului cu VB.
Pe ma7sura7 ce utilizatorul trage un control pe suprafat-a formularului orice obiect peste care acesta trece primes-te evenimentul DragOver. DragOver are aceleas-i argumente cu DragDrop dar are un s-i un parametru adit-ional, pe State, care poate lua trei valori:
vbEnter (0) - controlul tocmai a intrat în regiunea destinat-ie; vbLeave (1) - controlul tocmai a pa7ra7sit regiunea destinat-ie; vbOver (2) - controlul este înca7 tras peste regiunea destinat-ie.
Proprietatea State a evenimetului DragOver se poate folosi pentru a încuraja sau a evita la7sarea controlului care se trage peste destinat-ie. Un exemplu se prezinta7 în continuare:
Private Sub picGrafic_DragOver(Source As Control, X As Single, Y As Single, State As Integer) Select Case State Case vbEnter frmBD.BackColor = vbGreen Case vbOver frmBD.BackColor = vbYellow Case vbLeave frmBD.BackColor = culOriginala End Select End Sub
Culoarea de fond a formularului se va modifica la galben (vbYellow) daca7 controlul care se trage este peste suprafat-a controlului destinat-ie s-i poate fi la7sat.
24
setata7 pe vbManual (0);
! Se foloses-te pentru controalele care trebuie sa7 pa7streze modul de lucru normal cu mouse-ul;
! Utilizatorul init-iaza7 prpcesul de tragere printr-un semnal, de exemplu clic pe butonul drept al mouse-ului;
! Metoda Drag pornes-te procesul de tragere ! În continuare are un "Drag and Drop
automat".
12. "Drag and Drop" manual Atunci cînd "Drag and Drop-ul automat" este activat el opres-te interact-iunea obis-nuita7 cu respectivul control fa7cînd ca Textbox-ul, Listbox-ul, Option Button-ul sa7 devina7 inutil. Pentru comportamentul normal trebuie ca proprietatea DragMode sa7 ia valoarea implicita7 de 0 (vbManual).
În acest caz utilizatorul trebuie sa7 indice începutul tragerii printr-un semnal asociat special acestul scop. Ar putea fi un clic pe butonul drept al mouse-ului sau poate clic pe butonul stîng în timp ce tasta <Alt> este apa7sata7 . Pentru init-iearea procesului de tragere din cod se apeleaza7
25
metoda Drag a controlului sursa7 cu argumentul constant vbBeginDrag. Din acest monent utilizatorul va putea trage s-i apoi elibera controlul în modul obis-nuit.
Cel mai des se foloses-te evenimentul MouseDown pentru testarea valorilor parametrilor Button s-i Shift din care se determina7 daca7 s-a apa7sat combinat-ia corecta7 declans-a7rii tragerii. MouseDown apare atunci cînd unul dintre butoanele mouse-ului este apa7sat, MouseUp apare atunci cînd unul dintre butoanele mouse-ului este eliberat, iar MouseMove se este declans-at la mis-carea mouse-ului.
Button este un întreg compus ce stocheaza7 starea butonului stîng (0 sau 1), a butonului drept (0 sau 2) a butonului din mijloc (0 sau 4) existînd 8 combinat-ii de sta7ri de apa7sare posibile. Shift este un întreg compus ce stocheaza7 sta7rile pentru tastaele <Shift> (0 sau 1), <Ctrl> (0 sau 2) s-i <Alt> (0 sau 4) rezultînd s-i aici 8 sta7ri distincte. Realizarea unui simplu test de egalitate cu o constanta7 predefinita7 (vbLeftButton, vbRightButton, vbMiddleButton sau vbShiftMask, vbCtrlMask, vbAltMask). Un test simplu poate cuprinde starea de apa7sare a unui buton, eventual unul mai complicat s-i starea unueia dintre cele trei taste speciale. Iata7 un exemplu.
Private Sub picGrafic_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) 'aici proprietatea DragMode trebuie sa fie vbManual If (Button And vbRightButton) = vbRightButton Then SavePicture picGrafic.Image, App.Path & "\tempBLOB.bmp" picGrafic.Drag vbBeginDrag End If End Sub
Folosind "Drag and Drop", graficul din fereastra din stînga este tras s-i eliberat peste chenarul alb al ferestrei din dreapta, apoi, de aici, va fi stocat într-o baza7 de date.
26
! Permite transferul automat (fa7ra7 scriere de cod) a datelor între:
- controalele unei aplicat-ii; - controale ale unor aplicat-ii distincte;
! OLEDragMode s-i OLEDropMode trebuie sa7 fie puse
pe vbAutomatic (1).
13. OLE "Drag and Drop" automat Transferul fa7ra7 de cod între controalele unei aplicat-ie sau între aplicat-ii distincte se face prin OLE drag and drop. Pentru a permite ca datele unui control sa7 fie trase pentru a fi apoi la7sate altundeva trebuie ca proprietatea OLEDragMode sa7 ia valoarea vbAutomatic (1). Pentru ca date OLE sa7 fie la7sate peste control trebuie ca proprietatea OLEDropMode sa7 fie pe vbAutomatic (2). Cele doua7 seta7ri sînt independente.
Controalele care se preteaza7 la aceasta7 tehnologie sînt Textbox, Imagebox s-i Picturebox. Pe baza tehnologiei OLE text s-i imagini vor putea fi transferate din s-i în aplicat-ie. Comportamentul implicit este cel de mutare a datelor (echivalentul lui Cut s-i Paste), pentru ca datele sa7 fie copiate se apasa7 tasta <Ctrl> pe timpul lui "Drag and Drop". Setarea proprieta7 t-ile unui control pentru OLE "Drag and Drop" suprascrie abilitatea standard de "Drag and Drop".
27
Private Sub lstFisiere_OLEDragDrop(Data As DataObject, _ Effect As Long, Button As Integer, _ Shift As Integer, X As Single, Y As Single) Dim i As Long lstFisiere.Clear For i = 1 To Data.Files.Count lstFisiere.AddItem Data.Files(i) Next i End Sub
OLE Drop manual ! Transfer de date între obiectele unei aplicat-ii ! Transfer de date între aplicat-ii ! OLEDropMode = vbManual (1)
14. OLE "Drop" manual OLE Drop manual se poate folosi pentru depunerea unor unor date extrase dintr-o alta7 aplicat-ie, însa7 datele nu sînt cele care va7d direct în controlul sursa7 . Una dintre aplicat-iile cele mai utile este aceea de tragere a unor fis-iere selectate din Explorer sau Windows Commander peste un list box al aplicat-iei. Pe baza codului prezentat, folosind evenimentul OLEDragDrop, obiectul Data ce are o colect-ie Files ce cont-ine numele fis-ierelor selectate este folosit la popularea Listbox-ului.
Evenimentul OLEDragDrop apare numai daca7 proprietatea OLEDropMode a obiectului destinat-ie are valoarea vbManual (1).
Formularul are doua7 controale un Listbox s-i un Imagebox, fiind cea mai simpla7 aplicat-ie de vizualizare a cont-inutului unor fis-iere grafice.
Private Sub lstFisiere_Click() On Error Resume Next Image1.Picture = LoadPicture(Me.lstFisiere) End Sub
Private Sub lstFisiere_OLEDragDrop(Data As DataObject, _ Effect As Long, Button As Integer, Shift As Integer, _ X As Single, Y As Single)
28
Dim i As Long lstFisiere.Clear For i = 1 To Data.Files.Count If (i = 1) Then Image1.Picture = LoadPicture(Data.Files(1)) lstFisiere.AddItem Data.Files(i) Next i End Sub
Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Page 18
Page 19
Page 20
Page 21
Page 22
Page 23
Page 24
Page 25
Page 26
Page 27
Page 28