CONTROLUL OLE
Sistemul Visual Basic permite transferarea si partajarea informatiilor care provin de la diferite aplicatii standard (de exemplu Paint, Sound Recorder, WordPad, Object Packager) si nestandard (de exemplu Word, Excel, Equation Editor si altele). Facilitatea este denumita înlantuirea si încapsularea obiectelor (Object Linking and Embedding, presurtat OLE). Daca pe forma aplicatiei se aseaza un control OLE, atunci exista posibilitatea ca !n acest container sa se insereze diferite obiecte, care provin din diferite aplicatii. Obiectul introdus în container poate fi ulterior modificat, prin apelarea directa a programului care a generat obiectul depus în container. Astfel, de exemplu, daca în containerul OLE se introduce un obiect generat cu programul Microsoft Equation, atunci prin efectuarea unui dublu clic asupra obiectului ecuatie se va lansa automat în executie programul Microsoft Equation, si obiectul de tip ecuatie poate fi modificat prin comenzile editorului de ecuatie. Obiectul preluat de la aplicatia server poate fi încapsulat sau înlantuit în container.
Când se încapsuleaza un obiect în containerul OLE, se face o copie a informatiilor din aplicatia server si se transfera aceasta copie în container, în continuare nu va mai exista nici o legatura spre documentul din care a fost transferata informatia. Deci, când se editeaza un obiect încapsulat, documentul sursa nu va fi în nici un fel afectat. De exemplu sa presupunem ca în containerul OLE a fost încapsulat un desen. Daca se modifica desenul încapsulat din interiorul aplicatiei Visual Basic, desenul din documentul sursa ramâne nemodificat.
Când se înlantuie un obiect în containerul OLE, nu este efectuata nici o copiere a informatiilor, ci se creeaza o referinta sau o înlantuire spre fisierul care contine informatia (fisierul sursa). Astfel, când se e 535i87f diteaza un obiect înlantuit, în realitate se editeaza informatiile din fisierul sursa. Containerul contine doar o legatura la locatia unde este memorat obiectul sursa.
Controlul OLE este o componenta standard a programului Visual Basic;
simbolul grafic aferent are forma unei iconite. Numarul obiectelor care pot fi încapsulate sau înlantuite într-un control OLE depinde de numarul de aplicatii instalate pe calculatorul utilizat. La un moment dat însa containerul OLE poate contine numai un singur obiect. Aplicatiile de tip OLE pot fi create atât în perioada de elaborare a proiectului, cât si în timpul executiei.
Pentru a crea o aplicatie de tip OLE în timpul elaborarii proiectului:
Se aseaza pe forma un control OLE. în urma acestei actiuni se afiseaza o
fereastra de dialog intitulata Insert Object, specializata în încapsularea si înlantuirea obiectelor.
Fig.pag. 410 sub forma unei ferestre.
2. Daca în acest moment se executa un clic pe butonul de comanda Cancel, fereastra de dialog va fi închisa si nu se creeaza nici un obiect. Aceasta fereastra însa oricând poate fi reafisata. Daca se efectueaza un clic cu butonul drept al mouse-ului pe controlul OLE, atunci se afiseaza un meniu local. Comenzile afisate în acest meniu depind de starea controlului OLE; ele sunt centralizate în tabelul urmator:
<tabel>
*Comanda
Poate fi activata în meniul local daca:
*Insert Object
întotdeauna activa. Aceasta comanda afiseaza fereastra de dialog Insert Object.
*Paste Special
Masa de montaj contine un obiect valid. Aceasta comanda afiseaza fereastra de dialog Paste Special.
*Delete Embedded Object
*Containerul OLE contine un obiect încapsulat. Prin alegerea acestei comenzi obiectul respectiv va fi îndepartat din container.
*Delete Link
Containerul OLE contine un obiect înlantuit. Prin alegerea acestei comenzi obiectul respectiv va fi îndepartat din container.
*Create Link
Proprietatea SourceDoc a controlului OLE este configurata cu un nume valid de fisier. Fisierul respectiv va fi înlantuit de containerul OLE.
*Create Embedded Object
Proprietatea Class sau proprietatea SourceDoc a controlului OLE este configurata cu un nume valid de fisier. Fisierul respectiv va fi încapsulat în containerul OLE.
</tabel>
3. Sa presupunem ca este afisata fereastra de dialog Insert Object. Daca se doreste crearea unui obiect nou, care va fi încapsulat în containerul OLE, atunci se va selecta butonul de optiune Create New. Din lista derulanta Object Type se va selecta tipul obiectului care se încapsuleaza si se va da comanda OK.
4. În urma acestei actiuni se lanseaza în executie aplicatia server. Se creeaza obiectul încapsulat în container, de exemplu o ecuatie creata cu ajutorul programului server Microsoft Equation 3.0.
Dupa ce obiectul a fost creat, se revine la aplicatia OLE. Noul obiect creat va fi încapsulat în containerul OLE. în cazul unui obiect ecuatie revenirea în aplicatia OLE poate fI realizata prin meniul File, comanda Exit and Return.
Daca în timpul executiei programului OLE se doreste efectuarea unor modificari asupra obiectului din container, atunci se va efectua un dublu clic asupra obiectului, prin care se va lansa în executie aplicatia server.
Daca se doreste încapsularea sau înlantuirea unui obiect creat si salvat anterior cu ajutorul aplicatiei server, atunci la pasul 3 se va alege butonul de optiune Create from File. Fereastra de dialog are aspectul urmator:
Fig.pag. 411 sub forma unei ferestre.
În cutia de text File se specifica numele fisierului care urmeaza sa fie încapsulat sau înlantuit în containerul OLE. Selectarea fisierului poate fi realizata si cu ajutorul butonului de comanda Browse, care afiseaza o fereastra de dialog care usureaza alegerea fisierului necesar. Daca nu este selectata cutia de validare Link, atunci obiectul specificat va fi încapsulat în container (deci în momentul în care se lanseaza în executie programul OLE, obiectul poate fi activat printr-un dublu clic, prin care se va lansa în executie programul server care a creat fisierul respectiv). Daca este selectata cutia de validare, atunci obiectul respectiv va fi înlantuit în container (deci modificarile efectuate cu programul server în fisierul înlantuit vor fi reflectate automat în containerul OLE).
Daca în fereastra de dialog Insert Object se selecteaza cutia de validare Display As Icon, atunci obiectul din container va fi afisat sub forma unui simbol grafic, în acest caz va apare si un buton de comanda etichetat cu Change Icon, care afiseaza o fereastra de dialog, prin care se poate modifica simbolul grafic utilizat.
Uneori se doreste încapsularea sau înlantuirea unor obiecte, care au fost copiate anterior pe masa de montaj, în aceste conditii meniul local al aplicatiei OLE va contine si comanda Paste Special. Prin selectarea acestei comenzi se va afisa o fereastra de dialog care are aspectul urmator:
Fig.pag. 412 sub forma unei ferestre.
Daca se alege butonul de optiune Paste, atunci obiectul depus pe masa de montaj va fi încapsulat în containerul OLE. Locatia sursa a obiectului depus pe masa de montaj este afisata în linia etichetata cu Source. Daca se alege butonul de optiune Paste Link, atunci obiectul respectiv va fi înlantuit în containerul OLE.
Sa presupunem ca proprietatea SourceDoc a controlului OLE este configurata cu un nume valid de fisier, de exemplu o imagine: C:\Windows\Arches.bmp. În acest caz meniul local aferent containerului OLE va contine si comenzile Create Link si Create Embedded Object, prin care fisierul respectiv poate fi înlantuit sau încapsulat în containerul OLE.
Aplicatiile de tip OLE pot fi create si în timpul executiei, în acest caz se vor folosi diferite metode speciale ale controlului OLE, de exemplu InsertObjDlg, PasteSpecialDlg si altele.
Cele mai uzuale metode ale controlului OLE sunt urmatoarele:
<titlu>Metoda InsertObjDlg
Afiseaza fereastra de dialog Insert Object, care permite încarcarea în containerul OLE a unui obiect încapsulat sau înlantuit. Daca containerul a continut un obiect, vechiul obiect va fi distrus. Metoda se apeleaza printr-o constructie de forma:
OLE1.InsertObjDIg
<titlu>Metoda PasteSpecialDlg
Afiseaza fereastra de dialog Paste Special, prin care utilizatorul poate controla modul în care un obiect depus pe masa de montaj va fi inserat într-un container OLE. Prin aceasta fereastra se poate decide daca
obiectul respectiv va fi încapsulat sau înlantuit, si daca va fi sau nu afisat sub forma unui simbol grafic; de asemenea se permite selectarea formatului elementul inserat. Daca containerul a continut un obiect, vechiul obiect va fi distrus. Metoda se apeleaza printr-o constructie de forma:
OLE1 PasteSpecialDlg
<titlu>Metoda Close
Dezactiveaza obiectul din container si termina aplicatia server. Obiectul OLE ramâne în container. Metoda se aplica numai obiectelor încapsulate, neavând nici un efect asupra obiectelor înlantuite. Aceasta metoda se apeleaza printr-o constructie de forma:
OLE1.Close
<titlu>Metoda Copy
Copiaza obiectul depus în containerul OLE pe masa de montaj. Pot fi copiate atât obiecte înlantuite, cât si încapsulate. Aceasta metoda se apeleaza printr-o constructie de forma:
OLE1.Copy
<titlu>Metoda Paste
Insereaza continutul mesei de montaj în containerul OLE. Aceasta metoda se apeleaza printr-o constructie de forma
OLE1.Paste
<titlu>Metoda Delete
sterge obiectul continut în containerul OLE si elibereaza memoria asociata obiectului respectiv. Aceasta metoda permite stergerea explicita a obiectului continut în container; se mentioneaza faptul ca obiectul din container este sters automat în momentul în care forma este închisa sau în cazul în care obiectul din container este înlocuit cu un obiect nou. Metoda este apelata printr-o constructie de forma:
OLE1.Delete
<titlu>Metoda Update
ncarca (actualizeaza) data curenta a aplicatiei server în containerul OLE. Metoda este apelata printr-o constructie de forma:
OLE1.Update
<titlu>Metoda CreateEmbed
Creeaza un obiect încapsulat dintr-un fisier specificat. Aceasta metoda se apeleaza printr-o secventa de forma
OLE1.CreateEmbed DocSursa, Clasa
Argumentul DocSursa (de tip String) specifica numele fisierului din care se creeaza obiectul încapsulat. Daca nu se specifica un anumit document sursa (pentru ca este vorba de un document nou), atunci acest argument trebuie initializat cu un sir vid (""). Argumentul optional Clasa este numele clasei obiectului încapsulat (numele aplicatiei server). Acest argument este ignorat în cazul în care argumentul DocSursa contine un nume de fisier.
<titlu>Metoda CreateLink
Creeaza în containerul OLE un obiect înlantuit dintr-un fisier specificat. Metoda se apeleaza printr-o secventa de forma:
OLEl.CreateLink DocSursa, ElementSursa
Argumentul DocSursa (de tip String) specifica fisierul din care se creeaza obiectul înlantuit. Argumentul optional ElementSursa (de tip String) desemneaza data din interiorul fisierului din care se creeaza obiectul înlantuit.
<titlu>Metoda SaveToFile
Salveaza obiectul din containerul OLE într-un fisier binar. Metoda se apeleaza printr-o secventa de forma:
OLE1.SaveToFile NrFisier
Argumentul NrFisier este un numar întreg care desemneaza numarul asociat fisierului binar deschis în care se salveaza obiectul.
<titlu>Metoda ReadFromFile
încarca în containerul OLE un obiect dintr-un fisier care a fost salvat anterior cu metoda SaveToFile. Metoda se apeleaza printr-o secventa de forma:
OLE1.ReadFromFile NrFisier
Argumentul NrFisier este un numar întreg care desemneaza numarul asociat fisierului binar deschis din care se încarca obiectul.
<titlu>Metoda DoVerb
Deschide un obiect depus în containerul OLE în vederea efectuarii unei operatii (a unui "verb", de exemplu editarea obiectului respectiv). Aceasta metodase apeleaza printr-o secventa de forma:
OLE1.DoVerb Verb
Argumentul Verb este un numar întreg care specifica natura operatiei care urmeaza sâ fie efectuata cu obiectul continut în containerul OLE.
Daca acest argument nu este specificat, atunci se va executa actiunea implicita aferenta obiectului, de regula activarea lui (verbul implicit al obiectului). Pentru specificarea argumentului Verb pot fi utilizate urmatoarele constante predefinite:
<table>
*Constanta
Valoare
Descriere
*vbOLEPrimary
Actiunea implicita a obiectului.
*vbOLEShow
Activarea obiectului în vederea editarii lui. Daca aplicatia care a creat obiectul permite activare "pe loc", (în interiorul containerului OLE, nu într-o fereastra separata), atunci obiectul este activat în interiorul containerului OLE.
*vbOLEOpen
Deschiderea obiectului într-o fereastra separata.
*vbOLEHide
La obiectele încapsulate ascunde aplicatia care a creat obiectul din container.
*vbOLEUIActivate
Daca obiectul permite o activare pe loc, atunci se activeaza obiectul în interiorul containerului OLE si se afiseaza toate interfetele tip utilizator (de exemplu bare de unelte). Daca obiectul nu permite o activare pe loc, atunci obiectul nu va fi activat si se va declansa o eroare.
*VbOLEJnPlaceActivate
Daca utilizatorul muta focarul în containerul OLE, atunci se creeaza o fereastra pentru obiectul din container si se pregateste obiectul respectiv în vederea editarii lui. Daca obiectul nu permite sa fie activat printr-un clic simplu de mouse, atunci se declanseaza o eroare.
</tabel>
Principalele proprietati ale controlului OLE sunt urmatoarele:
<titlu>Proprietatea OLEType (de tip Integer)
Comunica starea obiectului continut în containerul OLE, Aceasta proprietate poate fi utilizata numai în executie. Valorile livrate de aceasta proprietate sunt centralizate în tabelul urmator:
<tabel>
*Constanta
Valoare
Descriere
*vbQLELinked
Containerul OLE contine un obiect înlantuit.
*vbOLEEmbedded
Containerul OLE contine un obiect încapsulat.
*vbOLENone
Containerul OLE nu contine nici un obiect.
</tabel>
<titlu>Proprietatea PasteOK (de tip Boolean)
Comunica daca continutul mesei de montaj poate fi inserat în containerul OLE. Aceasta proprietate poate fi utilizata numai în executie.
<titlu>Proprietatea AppIsRunning (de tip Boolean)
Se refera la starea aplicatiei server care a creat obiectul din containerul
OLE. Daca valoarea returnata de aceasta proprietate este True, aplicatia server este în executie, în caz contrar aplicatia server nu este lansata în executie. Daca aceasta proprietate este încarcata cu valoarea True, atunci aplicatia server a obiectului din container va fi lansata în executie. Daca proprietatea este încarcata cu valoarea False, aplicatia server va fi închisa.
<titlu>Proprietatea SizeMode (de tip Integer)
Se refera la modul de dimensionare a containerului OLE si la modul lui de afisare în momentul în care contine un anumit obiect. Valorile posibile ale acestei proprietati sunt urmatoarele:
<tabel>
*Constanta
Valoare
Descriere
*vbOLESizeClip
Decupare. Daca obiectul este mai mare decât containerul OLE, atunci obiectul va fi trunchiat. Valoare implicita.
*vbOLESizeStretch
Redimensionare elastica. Obiectului este redimensionata astfel încât va ocupa întregul container OLE.
*vbOLESizeAutoSize
Redimensionare automata. Containerul OLE este redimensionat astfel încât va afisa întregul obiect, înainte de redimensionare este declansat evenimentul Resize, în procedura atasata evenimentului se poate citi (prin intermediul parametrilor HeightNevt si WidthNew) noua înaltime si noua latime a containerului).
*vbOLESizeZoom
Efect lentila. Obiectul este redimensionat astfel încât sa fie utilizat la maxim spatiul din container, însa proportiile originale ale obiectului sunt conservate.
</tabel>
<titlu>Proprietatea AutoActivate (de tip Integer)
Determina modul de activare a obiectului depus în containerul OLE. Aceasta proprietate poate fi configurata cu ajutorul urmatoarelor constante predefinite:
<tabel>
*Constanta
Valoare
Descriere
*vbOLEActivateManual
Activare manuala. Obiectul din container nu este activat automat. Activarea obiectului trebuie realizata prin program, cu ajutorul metodei DoVerb.
*vbOLEActivateGetFocus
Activare prin focar. Daca containerul OLE contine un obiect care permite activarea cu un clic simplu de mouse, aplicatia server este activata în momentul în care containerul OLE ajunge în focar.
*vbOLEActivateDoubleclick
Activare prin dublu clic (valoare implicita). Daca containerul OLE contine un obiect, aplicafia server poate ti activata prin aplicarea unui dublu clic pe container (sau se apasa tasta ENTER în momentul în care focarul este în container).
*vbOLEActivateAuto
Activare automata. Daca containerul OLE contine un obiect, aplicatia server este activata pe baza metodei de activare normala (adica fie când containerul ajunge în focar, fie când se efectueaza un dublu clic pe container).
</tabel>
<titlu>Proprietatea OLETypeAHowed (de tip Integer)
Se refera la tipul obiectului care poate fi continut în containerul OLE. Valorile posibile ale acestei proprietati sunt urmatoarele:
<tabel>
*Constanta
Valoare
Descriere
*vbOLELinked
Containerul OLE poate contine numai un obiect înlantuit.
*vbOLEEmbedded
Containerul OLE poate contine numai un obiect încapsulat.
*vbOLEEither
Containerul OLE poate contine atât obiecte înlantuite, cât si obiecte încapsulate. Valoare implicita.
</tabel>
<titlu>Proprietatea SourceDoc (de tip String)
Specifica numele unui fisier din care se poate crea, în perioada de elaborare a proiectului, un obiect încapsulat sau înlantuit.
<titlu>Proprietatea Class (de tip String)
Se refera la numele de clasa al obiectului încapsulat sau înlantuit în containerul OLE, adica defineste numele aplicatiei server. Lista numelor de clasa accesibile pe calculatorul utilizat poate fi afisata în perioada de elaborare a proiectului, prin aplicarea unui clic pe butonul cu trei puncte din coloana de valori a proprietatii.
Fig.pag. 417 sub forma unei ferestre.
<titlu>Proprietatea AutoVerbMenu (de tip Boolean)
Stabileste daca se afiseaza sau nu un meniu local, care contine verbele obiectului din container în mojtfjntul în care utilizatorul efectueaza un clic cu butonul drept pe containerul OLE. Valoarea implicita a acestei proprietati este True, caz în care vor fi afisate comenzile permise de obiect.
<titlu>Proprietatea DisplayType (de tip Integer)
Stabileste modul de afisare a obiectului din container. Aceasta proprietate poate fi configurata cu urmatoarele constante predefinite:
<tabel>
*Constanta
Valoare
Descriere
*vbOLEDisplayContent
Continut. Atunci când containerul OLE contine un obiect, în control vor fi afisate datele obiectului. Valoare implicita.
*vbOLEDisplayIcon
Simbol grafic. Atunci când containerul OLE contine un obiect, în control va fi afisat simbolul grafic al obiectului.
</tabel>
<titlu>Proprietatea UpdateOptions (de tip Integer)
Se refera la modul de actualizare a obiectului înlantuit în momentul în care informatia înlantuita a fost modificata. Aceasta proprietate poate fi configurata cu urmatoarele constante predefinite:
<tabel>
*Constanta
Valoare
Descriere
*vbOLEAutomatic
Obiectul este actualizat automat ori de câte ori se modifica informatia înlantuita. Valoare implicita.
*vbOLEFrozen
Obiectul este actualizat în momentul în care utilizatorul salveaza informatia înlantuita în aplicatia server.
*vbOLEManual
Obiectul este actualizat manual, în momentul în care prin program se apeleaza metoda Update.
</tabel>
EXEMPLUL
Forma aplicatiei urmatoare contine trei controale OLE si un buton de comanda. Controalele OLE au urmatoarele nume (proprietatea Name): oleExcel, olePaint si oleWordPad. Aceste controale în perioada de elaborare a proiectului au fost configurate astfel:
<tabel>
*Proprietate
oleExcel
olePaint
oleWordPad
*AutoActivate
0 - Manual
Double Click
Double Click
*Class
Excel.Sheet.8
PaintPicture
WordPad.Document.
*OLETypeAllowed
Either
Linked
Embedded
Source Doc
c:\windows\leaves.bmp
Butonul de comanda etichetat cu Activare Excel activeaza programul server Excel într-o fereastra separata, prin apelarea metodei DoVerb (cu argumentul vbOLEOperi). Fereastra afisata de aplicatie are aspectul urmator:
Fig.pag. 419 sub forma unei ferestre.
Textul sursa al programului este urmatorul:
Option Explicit
Private Sub Command1_Click()
oleExcel.DoVerb vbOLEOpen
End Sub
EXEMPLUL 2:
Forma acestei aplicatii contine un container OLE. Meniul OLE aferent aplicatiei contine patru comenzi: lnsert, Paste Special, Close si Delete. Elementele de meniu corespunzatoare acestor comenzi sunt mnuInsert, mnuPaste, mnuClose si mnuDelete. Comanda Insert afiseaza fereastra de dialog Insert Object, prin care se poate încapsula sau înlantui un obiect în controlul OLE. Comanda Paste Special afiseaza fereastra de dialog cu acelasi nume, prin care se poate insera în controlul OLE un obiect depus anterior pe masa de montaj. Comanda Close întrerupe legatura cu aplicatia server. Comanda Delete îndeparteaza obiectul depus în container. Fereastra afisata de aplicatie poate avea aspectul urmator:
Fig.pag. 420 sub forma unei ferestre.
Textul sursa al programului este urmatorul:
Option Explicit
Private Sub mnuInsert_Click()
On Error GoTo eroare
OLE1.InsertObjDlg
OLE1.DoVerb -2 'Se foloseste o fereastra separata.
Exit Sub
eroare:
MsgBox "Nu s-a inserat nimic", vbExclamation
End Sub
Private Sub mnuPaste_Click
Dim m As String
If OLE1.PasteOK Then
OLE1 PasteSpecialDlg
Else
m = "Continutul zonei Clipboard " &
"nu poate fi inserat în containerul OLE!"
MsgBox m, vbExclamation
End If
End Sub
Private Sub mnuClose_Click()
If OLE1.OLEType <> vbOLENone Then
OLE1.Close
Else
MsgBox "Containerul OLE nu contine nimic!", vbExclamation
End If
End Sub
Private Sub mnuDelete_Click()
If OLE1.OLEType <> vbOLENone Then
OLE1.Delete
Else
MsgBox "Containerul OLE nu contine nimic!", vbExclamation
End If
End Sub
EXEMPLUL 3:
Forma acestei aplicatii contine un container OLE si un control de tip CommonDialog. Aplicatia este prevazuta cu un meniu. Meniul OLEFile contine urmatoarele comenzi:
OLENew: afiseaza fereastra de dialog Insert Object;
OLESaveAs: salveaza obiectul din container într-un fisier binar;
OLEOpen: încarca containerul cu un obiect salvat anterior cu ajutorul comenzii OLESaveAs;
OLEExit: termina aplicatia.
Meniul OLEEdit contine urmatoarele comenzi:
OLECopy: copiaza obiectul din container pe masa de montaj;
OLEDelete: sterge obiectul din container;
OLE Paste Special: afiseaza fereastra de dialog Paste Special;
OLEUpdate: actualizeaza obiectul din container.
Elementul de meniu OLEClose întrerupe legatura cu aplicatia server a obiectului din container.
Fereastra afisata de aplicatie poate avea aspectul urmator:
Fig.pag. 421 sub forma unei ferestre.
Textul sursa al programului este urmatorul:
Option Explicit
Private Sub Form_Load()
On Error Resume Next
OLE1.Move 0, 0
OLE1.Height Me.Height
OLE1.Width
End Sub
Me.Width
Private Sub mnuCloseOLE_Click() 'ComandaOLEClose
If OLEl.OLEType <> vbOLENone Then
OLE1.Close Else
MsgBox "Containerul OLE nu contine nimic"
End If
End Sub
Private Sub mnuCopy_Click() 'OLEEdit/OLECopy
If OLE1.OLEType <> vbOLENone Then
Screen.MousePointer = 11 'cursor clepsidra
If OLEl.AppIsRunning = False Then
OLE1.AppIsRunning True End If OLE1.Copy
Screen.MousePointer = 0 'Cursor implicit.
Else
MsgBox "Containerul OLE nu contine nimic!"
End If
End Sub
Private Sub mnuDelete_Click() 'OLEEdit/OLEDelete
If OLEl.OLEType <> vbOLENone Then
`Test daca containerul OLE contine un obiect valid.
OLE1.Delete 'Se sterge obiectul.
End If
End Sub
Private Sub mnuEdit_Click() 'MENIUL OLEEdit
' Test daca continutul zonei Clipboard poate fi inserat
' în containerul OLE
If OLEl.PasteOK Then
mnuSpecial.Enabled True 'Se valideaza comanda Paste Special.
Else
mnuSpecial.Enabled = False 'Se inhiba comanda Paste Special,
End If
End Sub
Private Sub mnuExit_Click 'OLEFile/OLEExit
End
End Sub
Private Sub mnuFileNew_Click 'OLEFile/OLENew
On Error GoTo Eroare
OLE1.InsertObjDlg
OLE1.DoVerb -2 'Obiectul este deschis într-o fereastra separata.
Exit Sub
Eroare:
MsgBox "Nu s-a inserat nimic" vbExclamation
End Sub
'Fereastra a fost închisa cu Cancel.
Private Sub mnuOpen_Click() 'OLEFile/OLEOpen
Dim NrFis As Integer
NrFis FreeFile
CommonDialogl.Filter
"Obiecte inserabile (*.OLE) | .OLE|Orice fisier (*.*)|
CommonDialog1.FilterIndex
On Error Resume Next
CommonDialog1 ShowOpen
If Err Then
Exit Sub
End If
Open CommonDialog1 filename For Binary As NrFis
If Err Then
Exit Sub
End If
Screen.MousePointer 'Cursor = clepsidra
OLE1.ReadFromFile NrFis
If Err Then
If Err Then
MsgBox "Obiect invalid."
Else
MsgBox Error$
End If
End If
OLE1.DoVerb 'Activarea obiectului.
Screen.MousePointer 'Restabilirea cursorului de mouse
Close NrFis
End Sub
Private Sub mnuSave_Click() 'OLEFile/OLESaveAs
Dim NrFis As Integer
NrFis = FreeFile
CommonDialog1.Filter
"Obiecte inserabile (*.OLE)|*.OLE|Orice fisier(*.*)
CommonDialog1.FilterIndex = 1
On Error Resume Next
CommonDialogl.ShowSave
If Err Then
Exit Sub ' Utilizatorul a ales Cancel.
End If
Open CommonDialogl.filename For Binary As NrFis
If Err Then
MsgBox (Error)
Exit Sub
End If
OLE1.SaveToFile NrFis
If Err Then MsgBox (Error)
Close NrFis
End Sub
Private Sub mnuSpecial_Click() 'OLEEdit/OLEPasteSpecial
If OLE1.PasteOK Then
OLE1 PasteSpecialDlg
Else
MsgBox "Continutul zonei Clipboard nu poate fi_
inserat in containerul OLE"
End If
End Sub
Private Sub mnuDpdate_Click 'OLEEdit/OLEUpdate
If OLE1.OLEType <> vbOLENone Then
Screen.MousePointer = 11 'Cursor clepsidra Hourglass
OLE1.Update
Screen.MousePointer = 0 'Cursor implicit Default
Else
MsgBox "Containerul OLE nu contine nimic"
End If
End Sub
EXEMPLUL 4:
Forma aplicatiei urmatoare contine un container OLE si trei butoane de comanda. Prin actionarea butonului etichetat cu CreateEmbed se apeleaza metoda cu acelasi nume, prin care se încapsuleaza în containerul OLE o noua foaie de calcul Excel. Butonul de comanda etichetat cu OLE Close întrerupe legatura cu aplicatia server. Prin actionarea butonului de comanda eichetat cu CreateLink se apeleaza metoda cu acelasi nume si se înlantuie un fisier text în containerul OLE. Fereastra afisata de aplicatie are aspectul urmator:
Fig. Pag 424
Textul sursa al programului este urmatorul:
Option Explicit
Private Sub Form_Load
Forml Caption = "Control container OLE"
End Sub
Private Sub Command1_Click
Dim Clasa As String, DocSursa As String
Clasa = "Excel.Sheet.8"
DocSursa = "" 'Se va în capsula un obiect nou.
OLE1.CreateEmbed DocSursa, Clasa
End Sub
Private Sub Command2_Click
OLE1.Close
End Sub
Private Sub Command3_Click
Dim DocSursa As String
DocSursa = "C:\Bootlog.txt"
OLE1.CreateLink DocSursa
End Sub
|