Citation preview
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