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




Forme grafice (shapes) si stratul de desen

visual basic


Forme grafice (shapes) si stratul de desen

Visual Basic dispune de un model de obiecte, reprezentând stratul de desen, comun aplicatiilor Microsoft Word, Microsoft Excel si Microsoft PowerPoint. Obiectul cel mai sus în ierarhia acestui model este colectia Shapes, care contine toate obiectele grafice – AutoShapes, forme libere, obiecte OLE, imagini – care pot fi incluse în stratul de desen al documentului. Este de notat ca formele grafice incluse în stratul de text din Word nu sunt incluse în colectia Shapes.



Pentru o discutie mai ampla privind controalele ActiveX, care sunt o categorie speciala de forme grafice, se va vedea capitolul Dialoguri si controale ActiveX.

Observatie. Pentru simplificarea exprimarii se utilizeaza termenul "forma" pentru shape, desi "forma grafica" ar fi mai potrivit în contextul subiectului.

Obiectele Shape, ShapeRange si Shapes

Exista trei obiecte diferite care reprezinta formele: colectia Shapes, reprezentând toate formele din stratul de desen dintr-un document Microsoft Excel, Word sau PowerPoint, colectia ShapeRange, care reprezinta o submultime de forme din stratul de desen si obiectul Shape, care reprezinta o forma grafica individuala. În general, se utilizeaza colectia Shapes atunci când se adauga forme pe stratul de desen sau se parcurg toate formele; se utilizeaza obiectul Shape când se doreste formatarea sau procesarea unei anumite forme grafice si se utilizeaza colectia ShapeRange când se doreste procesarea/formatarea unui grup de forme grafice.

O colectie ShapeRange poate contine oricâte elemente. Daca include un singur obiect, este similara unui obiect Shape. Se poate utiliza o colectie ShapeRange care contine toate elementele din Shapes pentru a formata toate formele în acelasi timp. Proprietatile si metodele care se aplica obiectului Shape se pot aplica de asemenea si colectiei ShapeRange.

Returnarea colectiei Shapes

O referinta la colectia Shapes se obtine prin proprietatea sinonima aplicata unui obiect document. Exemplul urmator selecteaza toate formele din stratul de desen:

myDocument.Shapes.SelectAll

Returnarea obiectului Shape

Un obiect Shape poate fi obtinut prin intermediul colectiei Shapes, în modul general de obtinere a unui element dintr-o colectie, dupa unul dintre exemplele urmatoare:

myDocument.Shapes(3).Duplicate
myDocument.Shapes("Red Square").Duplicate

Fecare forma are un nume atribuit în mod implicit, cum ar fi "Rectangle 3", obtinut la adaugarea formei la colectia Shapes. Prin proprietatea Name se poate atribui un nume sugestiv. Acest lucru se poate realiza concomitent cu adaugarea/crearea formei:

myDocument.Shapes,AddShape(msoShapeRectangle, 144, 144, 72, 72) _
.Name = "Red Square"

Aceasta metoda, care utilizeaza obiectul returnat de metoda AddShape, poate fi utilizata si cu alte proprietati sau metode ale obiectului Shape.

Returnarea colectiei ShapeRange

Prin referinte de tipul Shapes.Ranges(index), unde index este fie numele, fie indicele, fie un tablou de denumiri sau de indici, se returneaza o colectie ShapeRange care reprezinta un subset a colectiei Shapes. Exemplul urmator umple formele 1 si 3 din myDocument:

myDocument.Shapes.Range(Array(1, 3)).Fill.PresetGradient _
msoGradientHorizontal, 1, msoGradientLateSunset

Se utilizeaza Selection.ShapeRange pentru a returna o colectie ShapeRange care reprezinta toate formele din selectie. Prin Selection.ShapeRange(index), unde index este un indice sau un nume de forma, se obtine accesul la un obiect Shape din selectie:

ActiveWindow.Selection.ShapeRange(1).Fill.PresetGradient _
msoGradientHorizontal, 1, msoGradientLateSunset

Observatie. Macro recorderul genereaza cod bazat pe selectie. Atunci când se scrie cod direct, sau se editeaza codul generat de macro recorder, se poate crea un cod mai eficient prin returnarea formelor direct din colectia Shapes.

Desenarea unei forme pe un Document, Worksheet sau Slide

Adaugarea unei forme pe stratul de desen se efectueaza printr-una dintre metodele colectiei Shapes dedicate acestui scop. Fiecare tip de forma se obtine printr-o metoda specifica si acestea sunt enumerate în tabelul urmator.

Tipul de forma grafica

Metoda

Parametri

Callout

AddCallout

(Type, Left, Top, Width, Height, Anchor)

Note atasabile (doar PowerPoint)

AddComment

(Left, Top, Width, Height)

Linie sau curba care conecteaza doua forme diferite

AddConnector

(Type, BeginX, BeginY, EndX, EndY)

Curba Bézier

AddCurve

(SafeArrayOfPoints)

Control nativ de formular Excel (doar Microsoft Excel)

AddFormControl

(Type, Left, Top, Width, Height)

Eticheta

AddLabel

(Orientation, Left, Top, Width, Height)

Linie

AddLine

(BeginX, Beginy, EndX, EndY)

Sound sau movie (doar PowerPoint)

AddMediaObject

(FileName, Left, Top, Width, Height)

Control ActiveX (doar Word; pentru Excel si PowerPoint se utilizeaza AddOLEObject)

AddOLEControl

(ClassType, Left, Top, Width, Height, Anchor)

Obiect OLE scufundat sau legat

AddOLEObject

(ClassType, FileName, LinkToFile, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height, Anchor)

Imagine

AddPicture

(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height, Anchor)

Rezervare de loc pentru text sau pentru un obiect grafic (doar PowerPoint)

AddPlaceholder

(Type, Left, Top, Width, Height)

Linie poligonala închisa sau deschisa

AddPolyline

(SafeArrayOfPoints)

AutoShape

(forma predefinita)

AddShape

(Type, Left, Top, Width, Height)

TextBox

AddTextbox

(Orientation, Left, Top, Width, Height)

WordArt

AddTextEffect

(PresetTextEffect, Text, FontName, FontSize, FontBold, FontItalic, Left, Top, Anchor)

Titlu de diapozitiv (doar PowerPoint)

AddTitle

Forma libera

BuildFreeform

ConvertToShape

(EditingType, X1, Y1)

Între parametri se remarca Left si Top care specifica pozitia formei, Width si Height care fixeaza dimensiunile obiectului grafic. Pentru explicatii suplimentare asupra parametrilor care nu sunt suficient de expliciti se vor studia intrarile respective din Help.

Editarea unei forme

Prin intermediul proprietatilor si metodelor obiectelor Shapes si ShapeRange se pot modifica formele grafice reprezentate. Acestea pot fi repozitionate în document, redimensionate, eliminate; se poate schimba aspectul lor si li se poate adauga text.

Determinarea proprietatilor si metodelor adecvate

Proprietatile si metodele care controleaza atributele si comportarea comune tuturor tipurilor de forme se aplica direct obiectelor Shapes si ShapeRange. Proprietatile si metodele care se aplica doar unor categorii de forme sunt încapsulate în obiecte secundare care se acceseaza prin obiectul Shape.

Proprietati si metode comune

În aceasta categorie sunt incluse proprietatile care controleaza dimensiunea si pozitia formei (Left, Top, Height, Width) si metode care controleaza comportari generice de editare (cum ar fi Duplicate si Zorder). Un exemplu uzual este

With myDocument.Shapes(1)
.Height = 50
.Width = 100
End With

Proprietati si metode specifice

Atributele specifice unui anumit tip de forma sunt grupate sub obiecte secundare, cum ar fi FillFormat, continând proprietatile care se aplica formelor cu culori de umplere, sau CalloutFormat, continând toate proprietatile baloanelor (callouts). Pentru a lucra cu acest tip de atribute trebuie sa se returneze mai întâi obiectele care le contin. De exemplu, se utilizeaza proprietatea Fill pentru a returna obiectul FillFormat si se poate aplica apoi proprietatea ForeColor:

myDocument.Shapes(1).Fill.FillColor.RGB = RGB(255,0,0)

În tabelul urmator sunt prezentate obiectele accesibile din obiectul Shape si care contin proprietatile si metodele specifice. Se remarca faptul ca nu toate denumirile proprietatilor contin cuvântul "Format" existent în obiectul returnat (precum Fill care returneaza FillFormat).

Proprietatea obiectului Shape

Obiectul returnat

Aplicabil la

Callout

CalloutFormat

Baloane de dialog

ConnectorFormat

(Excel si PowerPoint)

ConnectorFormat

Conectori de forme

ControlFormat (Excel)

ControlFormat

Controale de formular native

Fill

FillFormat

Forme cu culori de umplere (toate cu exceptia liniilor)

Line

LineFormat

Toate formele (LineFormat reprezinta linia sau chenarul)

LinkFormat

LinkFormat

Obiecte OLE legate, imagini legate (doar Word), câmpuri legate (doar Word)

OLEFormat

OLEFormat

Obiecte OLE

PictureFormat

PictureFormat

Imagini si obiecte OLE

Shadow

ShadowFormat

Toate formele

TextEffect

TextEffectFormat

Obiecte WordArt

ThreeD

ThreeDFormat

Forme care pot fi reliefate

WrapFormat (doar Word)

WrapFormat

Forme care pot fi înconjurate de text

Încercarea de a returna obiecte secundare (cum ar fi CalloutFormat, ConnectorFormat, OLEFormat, PictureFormat sau TextEffectFormat) dintr-un tip inadecvat de forma produce eroare. Pentru alte obiecte (FillFormat, LineFormat, ShadowFormat sau ThreeDFormat) nu se produce eroare chiar daca forma container nu suporta obiectul returnat.

Pentru a nu avea probleme se va utiliza proprietatea Type si, când este aplicabila, proprietatea AutoShapeType, înainte de aplicarea unei metode sau proprietati specifice si se va introduce o secventa de tratare a erorii.

For Each sh In myDocument.Shapes
If sh.Type = msoLinkedOLEObject Then
sh.LinkFormat.Update
End If
Next

Culorile de umplere ale formelor

Prin culorile de umplere se întelege nu numai culoarea efectiva utilizata pentru colorarea suprafetei formei ci si efectele utilizate la colorare, precum si posibilitatea de a utiliza o imagine drept fundal etc. Obiectul FillFormat reprezinta întreaga umplere a formei, proprietatile si metodele sale permit stabilirea culorii, tipului, transparentei. Deoarece atributele legate de culori si tipuri de umplere sunt interdependente, stabilirea unui atribut produce, de regula, modificari ale altor atribute, astfel încât sa se obtina o multime consistenta de atribute. Din acelasi motiv multe atribute sunt read-only, valorile lor fiind atribuite în functie de metodele utilizate.

Tipul de umplere se stabileste printr-una dintre metodele Background (doar PowerPoint), OneColorGradient, Patterned, PresetGradient, PresetTextured, Solid, TwoColorGradient, UserPicture sau UserTextured, corespunzând optiunilor disponibile în interfata utilizator a aplicatiilor. Prin proprietatile read/write BackColor, ForeColor, Transparency si Visible se poate controla aspectul umplerii.

Deoarece sunt foarte multe valori predefinite pentru proprietati sau argumentele metodelor, valorile respective se vor lua din intrarile Help corespunzatoare obiectelor implicate.

Urmatorul exemplu adauga o forma dreptunghiulara la document, fixeaza cele doua culori si tipul de gradient pentru umplere:

Public Sub fil()
Dim sh As Shape
Set sh = ThisDocument.Shapes.AddShape(msoShapeRectangle, 90, 90, 90, 50)
sh.WrapFormat.Type = wdWrapTight
With sh.Fill
.ForeColor.RGB = RGB(200, 0, 0)
.BackColor.RGB = RGB(0, 200, 170)
.TwoColorGradient msoGradientHorizontal, 1
.Visible = msoTrue
End With
End Sub

Adaugarea de umbre si efecte 3-D

Proprietatea Shadow a obiectului Shape returneaza un obiect ShadowFormat prin care se controleaza umbririle formei. Urmatorul exemplu produce adaugarea unei umbre albastre semitransparente, cu dimensiune de 4 puncte:

With sh.Shadow
.Transparency = 0.5
.ForeColor.RGB = RGB(0, 0, 255)
.Visible = msoTrue
.OffsetY = 4
.OffsetX = 4
End With

Proprietatea ThreeD a obiectului Shape returneaza un obiect ThreeDFormat care controleaza reliefarea formei. Urmatorul exemplu adauga efectul de extrudare si precizeaza o adâncime de 50 de puncte, purpurie, perpendiculara si luminata de sus

With sh.ThreeD
.Visible = msoTrue
.Depth = 50
.ExtrusionColor.RGB = RGB(255, 0, 255)
.Perspective = msoFalse
.PresetLightingDirection = msoLightingTop
End With

Este normal ca acest efect sa nu fie suportat de anumite forme.

Adaugarea de text la o forma

Zona din interiorul unei forme care poate contine text este numita cadru cu text, text frame, si este reprezentata de un obiect TextFrame. Acest obiect, returnat de proprietatea TextFrame, contine textul propriu-zis, precum si proprietatile si metodele care controleaza alinierea si ancorarea cadrului cu textul.

Doar formele built-in de tip AutoShapes bidimensionale au asociate cadre cu text. Înaintea referirii obiectului TextFrame se verifica disponibilitatea acestuia prin proprietatea HasTextFrame (valabila în PowerPoint) sau prin verificarea proprietatii Type. Se poate utiliza si tratarea erorilor în cazul în care proprietatea TextFrame poate fi aplicata unui obiect care nu o suporta.

În Microsoft Word se utilizeaza proprietatea TextRange a obiectului TextFrame pentru a returna un obiect Range care reprezinta textul din cadrul respectiv:

ActiveDocument.Shapes(1).TextFrame.TextRange.Text = " … "

În Microsoft Excel se utilizeaza proprietatea Characters a obiectului TextFrame pentru a returna un obiect Characters care reprezinta textul din interiorul cadrului:

ActiveWorksheet.Shapes(1).TextFrame.Characters.Text = " … "

În PowerPoint, se utilizeaza proprietatea TextRange a obiectului TextFrame pentru a returna un obiect TextRange care reprezinta domeniul textului din cadrul respectiv:

ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = " … "

Lucrul cu obiecte OLE

Proprietatile si metodele obiectului OLEFormat, cum ar fi Activate si DoVerb, controleaza obiectul OLE continut într-o forma. Obiectul OLEFormat este returnat de proprietatea OLEFormat a obiectului Shape:

With myDocument.Shapes(3)
If .Type = msoEmbeddedOLEObject Or _
.Type = msoLinkedOLEObject Then
.OLEFormat.DoVerb
End If
End With

Utilizarea proprietatii Object a obiectului OLEFormat returneaza obiectul OLE continut în forma desenata specificata (în Excel trebuie sa se utilizeze de doua ori proprietatea Object într-o linie, separate de operatorul punct, pentru a returna obiectul OLE).

Urmatorul exemplu, executat din Word sau PowerPoint, adauga text la celula A1 a primei foi de calcul dintr-un caiet Excel continut în forma a treia din myDocument.

With myDocument.Shapes(3)
.OLEFormat.Activate
.OLEFormat.Object.Worksheets(1).Range("A1").Value = " noul text "
End With

Proprietatea Application a obiectului OLE, returnat de proprietatea sinonima, da acces la obiectul din vârful ierarhiei modelului de obiecte al aplicatiei care a creat obiectul OLE. Urmatorul exemplu, executat din Microsoft Excel (se va remarca dubla utilizare a proprietatii Object), afiseaza numele aplicatiei în care a fost creat fiecare obiect OLE scufundat în foaia activa:

For Each s In ActiveSheet.Shapes
If s.Type = msoEmbeddedOLEObject Then
s.OLEFormat.Activate
MsgBox s.OLEFormat.Object.Object.Application.Name
End If
End With

Lucrul cu mai multe forme

Pentru a lucra cu mai multe forme se poate parcurge o colectie Shapes sau ShapeRange si lucra cu fiecare element al colectiei sau se poate construi o colectie ShapeRange cu toate formele grafice care se prelucreaza si se aplica metode sau proprietati întregii colectii ShapeRange.

Exista si posibilitatea, disponibila în interfata utilizator, de a grupa mai multe forme grafice, precum si posibilitatea de aliniere a formelor.

Daca operatiunea dorita se poate executa în interfata utilizator pe o selectie multipla de forme grafice, atunci construirea unei colectii ShapeRange este recomandata.

Daca operatiunea nu se poate efectua în interfata utilizator pe o selectie multipla, atunci parcurgerea unei colectii, Shapes sau ShapeRange, este calea adecvata. Parcurgerea poate fi efectuata printr-o structura uzuala For Each … Next:

For Each sh In myDoc.Shapes
If sh.Type = msoAutoShape Then
sh.TextFrame.TextRange.InsertAfter " (version 1)"
End If
Next

Construirea unui ShapeRange

Daca este necesara obtinerea unui domeniu de forme care sa contina doar forme de anumite tipuri, se va utiliza o instructiune conditionala de testare a atributelor si se va adauga denumirea sau indicele formei selectate la un tablou dinamic. Se va construi apoi un obiect ShapeRange utilizând acest tablou.

Urmatorul exemplu construieste un domeniu de forme cu toate formele de tip AutoShapes din document si apoi le grupeaza.

With myDocument.Shapes
numShapes = .Count
If numShapes > 1 Then
numAutoShapes = 0
ReDim autoShpArray(1 To numShapes)
For i = 1 To numShapes
If .Item(i).Type = msoAutoShape Then
numAutoShapes = numAutoShapes + 1
autoShpArray(numAutoShapes) = .Item(i).Name
End If
Next
If numAutoShapes > 1 Then
ReDim Preserve autoShpArray(1 To numAutoShapes)
Set asRange = .Range(autoShpArray)
asRange.Group
End If
End If
End With

Lucrul cu colectia ShapeRange

Atunci când se aplica proprietati sau metode colectiei ShapeRange, se va tine seama de urmatoarele principii:

  • Aplicarea unei metode colectiei este echivalenta cu aplicarea acelei metode la fiecare obiect Shape din colectie.
  • Stabilirea unei proprietati a colectiei este echivalent cu stabilirea acelei proprietati fiecarui obiect Shape din colectie.
  • proprietate a colectiei care returneaza o constanta, returneaza valoarea comuna daca toate obiectele componente au o aceeasi valoare, sau constanta "mixed" (de exemplu msoLineDashStyleMixed pentru stilul de punctare a liniei).
  • proprietate a colectiei care returneaza un tip de data simplu, cum ar fi Long, Single sau String, returneaza valoarea proprietatii pentru a forma daca toate formele au aceeasi valoare a proprietatii.
  • Valoarea anumitor proprietati poate fi returnata sau stabilita numai daca exista exact o forma în colectie. Daca exista mai multe forme în colectie, atunci apare o eroare. Acest fapt apare atunci când se utilizeaza o proprietate sau metoda care se poate aplica doar pentru un obiect.

Aceste principii actioneaza si atunci când se lucreaza cu proprietati sau metode ale formelor, grupate în obiecte secundare ale colectiei ShapeRange (cum ar fi FillFormat).

Urmatorul exemplu construieste un obiect ShapeRange din doua forme numite si aplica ambelor o umplere de tip gradient.

Set myRange = myDoc.Shapes.Range(Array("Big Star", "Little" Star"))
myRange.Fill.PresetGradient msoGradientHorizontal, 1, msoGradientBrass

Metodele Align si Distribute sunt utilizate pentru alinierea sau distribuirea uniforma a formelor dintr-o colectie ShapeRange. Prin metoda Zorder se poate modifica ordinea pe Z care determina ordinea de suprapunere a formelor.

Metoda Group realizeaza gruparea tuturor formelor dintr-o colectie ShapeRange. Prin Ungroup, Regroup se realizeaza operatiunile sinonime din interfata utilizator.

Daca se doreste lucrul cu o forma individuala dintr-un grup, dar fara a renunta la grupare în prealabil, se utilizeaza proprietatea GroupItems a obiectului Shape care reprezinta grupul. Proprietatea returneaza un obiect GroupShapes si metoda Item a acestui obiect returneaza o forma individuala din grupul de forme:

With myDocument.Shapes
.AddShape(msoShapeIsoscelesTriangle, 10, 10, 100, 100).Name = "shpOne"
. AddShape(msoShapeIsoscelesTriangle, 150, 10, 100, 100).Name = "shpTwo"
. AddShape(msoShapeIsoscelesTriangle, 300, 10, 100, 100).Name =
With .Range(Array("shpOne", "shpTwo", "shpThree")).Group
.Fill.PresetTextured msoTextureBlueTissuePaper
.GroupItems(2).Fill.PresetTextured msoTextureGreenMarble
End With
End With

Document Info


Accesari: 1535
Apreciat: hand-up

Comenteaza documentul:

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


Creaza cont nou

A fost util?

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


in pagina web a site-ului tau.




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

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )