Documente Academic
Documente Profesional
Documente Cultură
Limbaje de Asamblare
Note de curs
Marian Drdal
Cristian Ioni
Pentru a putea executa aplicaia a fost definit i clasa Principala n care s-a
definit metoda static Main, necesar pentru startarea execuiei aplicaiei.
Practic codul din Main ruleaz o instan a clasei Class_Forma definit
anterior.
class Principala
{
static void Main()
{
Application.Run(new Class_Forma());
}
}
completri:
In cazul n care lista e vid, metoda returneaz null, altfel metoda ntoarce
un obiect care implementeaz interfaa IEnumerator pentru o list. Obiectul
este de clas ListEnum i refer elementele listei prin intermediul capului
listei (cap);
sold etc. Evident, pentru cele dou categorii de date stocate n clasa cont se
vor defini i implementa operaii specifice: determinarea vrstei persoanei,
operaia de depunere respectiv retragere n / din cont etc. Interfeele vor fi
astfel definite i apoi implementate n clasa cont astfel nct numai prin
intermediul acestora se vor utiliza obiectele. Pentru rezolvarea problemei se
va defini clasa operaie bancar ce va conine data la care se efectueaz
operaia, tipul operaiei (depunere / extragere) i suma:
class operatie_bancara
{
DateTime dop;
public int suma;
public char tip;
public operatie_bancara(DateTime fdop, int fs, char ft)
{
dop = new DateTime(fdop.Year, fdop.Month, fdop.Day);
suma = fs; tip = ft;
}
}
10
11
return si+sd-se;
}
}
12
13
14
15
{
Element oel = new Element();
Cons_obs cobs1 = new Cons_obs();
Form1 forma = new Form1(oel);
oel.Cupleaza(cobs1);
oel.Cupleaza(forma);
oel.Valoare_el = 10;
forma.ShowDialog();
Console.WriteLine("elment = {0}", oel.Valoare_el);
}
Se observ c asocierea metodei de utilizator actiune, evenimentului Tick, sa realizat cu operatorul += adic prin adugarea unui nou obiect de tip
EventHandler.
Metoda actiune are un prototip prestabilit n sensul c aceste metode care se
apeleaz la declanarea evenimentelor primesc: obiectul care a interceptat
evenimentul (sender) i un obiect (e) care conine argumentele ce nsoesc
evenimentul. Aceast metod se va defini n aplicaie i va schimba starea de
vizibilitate a textului care este un control de tip Label avnd numele et:
void actiune(object sender, EventArgs e)
{
et.Visible = ! et.Visible;
}
Pornirea timer-ului se va face prin aplelul metodei Start n timp ce, oprirea
lui, se face prin apelul metodei Stop. Ambele metode se apeleaz prin
obiectul t, de tip Timer i operaiile se vor declana prin apsarea a dou
butoane special construite n acest sens.
17
18
21
{
k = 0; // refera prima imagine din colectie
t.Start(); // porneste timer-ul
}
// metoda cuplata la evenimentul Tick al Timer-ului
// ea realizeaza afisarea tuturor imaginilor din colecie
private void actiune(object sender, EventArgs e)
{
cadru.Image = (Bitmap)vimag[k++];
if (k == vimag.Count)
{
// in cazul in care s-a afisat si ultima imagine din colectie
t.Stop(); // se opreste timer-ul
// se invoca evenimentul Notificare_Animatie
if (Notificare_Animatie != null)
Notificare_Animatie(this, new EventArgs());
}
}
}
}
22
23
Modificrile care decurg din folosirea unei clase proprii pentru argumentele
evenimentului sunt:
24
Atribute nonspaiale
Regiunea 1
Regiunea 2
Regiunea 4
(a)
Atribute nonspaiale
Date nespaiale pentru Regiunea 1
Regiunea 1
Regiunea 2
Regiunea 4
(b)
Figura 3.1 Tipuri de legturi: nainte (a) i napoi (b)
Datele spaiale, fie c sunt vectori fie c sunt de tip raster, trebuie s
fie localizate pe suprafaa pmntului. Localizarea lor se face prin
coordonate geografice (longitudine, latitudine) sau coordonate de tip
proiecie (de exemplu, sistemul de coordonate UTM Universal Transverse
Mercator).
Prin longitudine se nelege unghiul format ntre primul meridian i
poziia pe glob, n timp ce prin latitudine se nelege unghiul format ntre
ecuator i poziia pe glob (figura 3.2).
Un sistem de coordonate de tip proiecie este un sistem de
coordonate n plan, bazat pe o proiecie a hrii. Hrile sunt reprezentate n
plan dar ele reprezint suprafee curbe. Transformarea spaiului
tridimensional ntr-un spaiu bidimensional se numete proiecie (figura 3.3).
De exemplu, sistemul de coordonate UTM se bazeaz pe proiecia Mercator.
28
iar aceast interfa are o proprietate care furnizeaz harta curent sub forma
unei referine la IMap. In acest caz, se foreaz conversia explicit ctre un
obiect de tip hart (Map):
Map harta = (Map)doc.FocusMap;
Interfeele au, de asemenea, rolul de a extinde funcionalitatea frameworkului. Astfel, se permite programatorilor s defineasc, n ArcObjects, noi
interfee care pot fi adugate la cele existente.
O interfa conine proprieti i metode pe care utilizatorul le poate
accesa prin intermediul ei. Proprietile definesc caracteristicile (atributele)
unei interfee n timp ce metodele definesc comportamente specifice ale
interfeei. In ArcObject sunt descrise grafic interfeele, astfel nct,
programatorul s-i poat da seama care sunt proprieti i care sunt metode.
Astfel, proprietile sunt descrise prin linie n timp ce metodele se descriu
prin sgei (
). La rndul lor, proprietile pot fi de mai multe feluri:
- read only, adic pot fi doar consultate valorile lor i se figureaz:
32
35
36
37
41
42
43
45
46
47
// generarea limitelor
vecgr = (double [])div_grupe.ClassBreaks;
49
{
fs = new SimpleFillSymbol();
// stabilirea culorii de umplere
fs.Color = rcul.get_Color(i);
// asocierea simbolului de umplere
cbr.set_Symbol(i, (ISymbol)fs);
// setarea valorii limitei superioare a intervalului
cbr.set_Break(i, vecgr[i+1]);
// etichetarea n legenda hrii ce va apare in TOC
cbr.set_Label(i, vecgr[i].ToString()+ "-" +
vecgr[i+1].ToString() );
}
IGeoFeatureLayer gfl = (IGeoFeatureLayer)lyr;
// asocierea simbologiei (cbr) layer-ului lyr, ce corespunde judeelor
gfl.Renderer = (IFeatureRenderer)cbr;
// redesenarea coninutului vizualizrii curente
doc.ActiveView.Refresh();
// actualizarea coninutului ferestrei TOC (afiarea legendei)
doc.UpdateContents();
orae i mediul rural sunt stocate n tabela populatie n cadrul bazei de date
bd_ro.mdb dup cum s-a prezentat n exemplul anterior. Pentru a nu duplica
codul din exemplul anterior, se vor prezenta acele aspecte care difer sau
trebuie adugate. Astfel, s-au fcut, n plus, declaraiile:
string[] vs = { "Populatia in orase mari", "Populatia in orase",
"Populatia in rural" };
string[] numec = { "cpop", "tpop", "rpop" };
unde:
-
51
52
56
// obiectul ob_clip
gp.Execute(ob_clip, null);
Pentru a obine rurile care se afl n judeul Arge, mai nti se selecteaz
judeul folosind instrumentul de selecie din bara de instrumente a aplicaiei
ArcMap dup care se apas butonul din extensia construit de utilizator iar
rezultatul va apare dup cum se poate observa n figura 3.25.
57
60
Figura 4.5 Document Word construit prin intermediul unei aplicaii de utilizator
63
din secvena de cod, se observ c s-au lsat dou linii vide n document, iar
textul celei de-a treia a fost preluat din obiectul titlu de tip TextBox care
conine irul: Stat de plata dup cum se poate observa n figura 4.4. Dup
scrierea acestui text se mai adaug o linie vid n cadrul documentului.
Textul din cadrul unui Range poate fi formatat corespunztor:
wr.Font.Name = "Times New Roman";
wr.Font.Size = 14;
wr.Font.Bold = -1;
din secven se observ c s-a ales fontul Times New Roman de dimensiune
14 i ngroat (Bold).
Pentru a continua cu adugarea de alte texte, la document, trebuie s
repoziionm n mod corespunztor obiectul de tip Range. In cazul
exemplului, se dorete ca noul Range s fie poziionat la sfritul celui
64
curent adic s permit adugarea unui text n continuarea celui care a fost
scris n document. Prin apelul metodei Collapse(), pentru un obiect de tip
Range, se realizeaz generare unei noi poziii care presupune ca poziia de
nceput s fie identic cu cea de sfrit. In funcie de direcia n care se
repoziioneaz domeniul, obiectul Range se poate poziiona la sfritul sau la
nceputul domeniului curent:
wr.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
face prin intermediul unui obiect de tip Range. De aceea, s-a repoziionat
obiectul de tip Range la sfritul celui anterior definit:
wr.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
S-a construit un tabel (ts) avnd un numr de linii identic cu numrul de linii
a controlului DataGridView (gv), n timp ce, la numrul de coloane a
controlului a mai fost adugat una, pentru a nscrie i numrul liniei din
tabel.
Word.Table ts = wr.Tables.Add(wr, gv.RowCount, gv.ColumnCount+1);
Limea coloanelor a fost stabilit n raport de limea paginii (latp) care s-a
calculat pornind de la limea paginii i a marginilor:
float latp = wdoc.PageSetup.PageWidth
(wdoc.PageSetup.RightMargin + wdoc.PageSetup.LeftMargin);
prima coloan are 10% din laimea total, cea de-a doua coloan are 70% iar
ultima 20%.
Capul de tabel s-a definit prin scrierea textului corespunztor n fiecare
celul a primului rnd. O celul (Cell) conine proprietatea Range prin
intermediul creia se scrie textul n celul:
ts.Cell(1, 1).Range.Text = "Nr. crt.";
ts.Cell(1, 2).Range.Text = gv.Columns[0].HeaderText;
ts.Cell(1, 3).Range.Text = gv.Columns[1].HeaderText;
Pentru a marca mai bine capul de tabel, primului rnd din tabel i s-a asociat
o culoare de fundal (culoarea gri):
ts.Rows[1].Shading.BackgroundPatternColor =
Word.WdColor.wdColorGray15;
66
ts.Cell(i + 2, 1).Range.Paragraphs.Alignment =
Word.WdParagraphAlignment.wdAlignParagraphRight;
ts.Cell(i + 2, 2).Range.Text =
gv.Rows[i].Cells[0].Value.ToString();
ts.Cell(i + 2, 3).Range.Text =
gv.Rows[i].Cells[1].Value.ToString();
ts.Cell(i + 2, 3).Range.Paragraphs.Alignment =
Word.WdParagraphAlignment.wdAlignParagraphRight;
}
68
69
unde, vi, ani, ca, per sunt numele controalelor de tip TextBox din forma
ilustrat n figura 4.7.
Se observ c referirea unei celule se face prin aplelul metodei get_Range
care returneaz un obiect de tip Range mapat pe un domeniu format dintr-o
singur celul. Stilul folosit pentru a adresa celula este de a indica coloana
printr-o liter iar linia printr-un numr, de exemplu f4. Prin intermediul
proprietii Value se acceseaz valoarea celulei care se convertete la un tip
numeric, pentru c acele celule conin valori numerice, dup care ea se
convertete la ir de caractere pentru a fi ncrcat n controlul de tip
TextBox.
Utilizatorul aplicaiei poate s modifice valorile iniiale prin editarea
elementelor coninute n controalele de tip TextBox dup care, pentru a
genera rezultatele aferente noului set de valori, se apas pe butonul
Genereaza Rezultate. La apsarea pe acest buton se realizeaz urmtoarele
procesri:
- se rescriu n celulele corespunztoare, din Excel, noile valori
introduse:
int t,i
sh.get_Range("f4").Value = Convert.ToDouble(vi.Text);
sh.get_Range("e4").Value = Convert.ToInt32(ani.Text);
70
sh.get_Range("c2").Value = Convert.ToInt32(ca.Text);
sh.get_Range("c1").Value = t = Convert.ToInt32(per.Text);
In figura 4.8 se prezint forma aplicaiei pentru care s-a generat o serie de
valori pentru un orizont de 5 ani.
In cazul n care utilizatorul dorete s vizualizeze i coninutul foii de calcul,
atunci se poate executa i instruciunea: eapl.Visible = true; ce determin
vizualizarea ferestrei aplicaiei Excel cu seria de timp generat, ca n figura
4.9.
72
73
A. unul format din dou obiecte care conin text, unul fiind titlul slideului i cellalt cu coninutul propriu-zis;
B. unul care nu are nici un element predefinit (Blank Slide), elementele
vor fi construite pe slide la momentul execuiei dup cum urmeaz:
un titlu (element de tip TexBox) i o imagine (element de tip Picture)
care va afia o imagine preluat dintr-un fiier imagine.
Pe forma aplicaiei se afl butonul New PowerPoint care instaniaz aplicaia
Power Point i creeaz o nou prezentare. Butoanele Adauga Slide adaug
slide-uri de tipul asociat slide-ului iar butonul Vizualizare trece prezentarea
n regim SlideShow i pornete derularea prezentrii. Forma aplicaiei este
prezentat n figura 4.10, completat cu informaii care constituie coninutul
prezentrii format din dou slide-uri.
74
PP.Presentation pprs;
PP.Slide pslide;
string calea; //stocheaz fisierul ce contine imaginea
75
76
78
80
pentru a putea lucra cu clase din Windows Forms cum ar fi, de exemplu,
MessageBox pentru afiarea de mesaje i pentru a putea folosi clase din
EOM.
In clasa Ribbon1 se va mai declara o variabil static de tip object care se va
iniializa cu Type.Missing: static object tm = Type.Missing; Aceasta
variabil se folosete pentru a furniza parametrii care nu sunt obligatoriu de
transmis n cadrul metodelor apelate.
Spre deosebire de modalitatea de dezvoltare a aplicaiilor bazate pe Office,
prezentat la punctul 4.2, n acest caz, exist o instan a aplicaiei Excel, un
document i o foaie de calcul. Cu alte cuvinte, aceste obiecte trebuie preluate
i utilizate n aplicaie:
Excel.Application eapl = Globals.ThisAddIn.Application;
Excel.Workbook wb = eapl.Workbooks[1];
Excel.Worksheet sh = wb.Sheets[1] as Excel.Worksheet;
if (m != n)
{
MessageBox.Show("Matricea nu este patratica");
return;
}
E6. In contextul aplicaiei, intereseaz care este ultima celul (dreapta jos) a
domeniului pentru a putea adresa celula urmtoare n vederea nscrierii
rezultatului operaiei.
Prin secvena:
string adresa = rs.get_Address(tm, tm, Excel.XlReferenceStyle.xlR1C1);
se obine n irul adresa, adresa domeniului selectat (rs) n stilul rnd coloan (R1C1). In exemplul prezentat n figura 4.16 irul adresa are
valoarea: R3C2:R5C4. Rezultatul operaiei se va nscrie n celula urmtoare
pe diagonal, adic n celula R6C5. Pentru a calcula celula urmtoare pe
diagonal s-a definit metoda get_celula_dest care primete irul adresa i
doi ntregi, prin referin, cu rol de ieire, care vor conine, dup apel,
numrul rndului i a coloanei unde se va nscrie rezultatul:
int a = 0, b = 0;
get_celula_dest(adresa, ref a, ref b);
care returneaz un obiect de tip Range furniznd celula din colul stnga sus
dreapta jos prin colecia Cells care permite referirea celulei propriu-zise
83
86
89
90
94
Bibliografie
1. ***, Exploring ArcObjects, ESRI Press, 2002;
2. ***, Understanding Map Projections, ESRI Press, 2000;
3. Baker, M., What is a Software Framework? And why should you like
'em?,
http://info.cimetrix.com/blog/?Tag=software+framework,
posted 2009;
4. Bruney, A., Professional VSTO 2005, Wiley Publishing, Inc., 2006;
5. Burke, R., Getting to Know ArcObjects: Programming ArcGIS with
VBA, ESRI Press, 2003;
6. Carter, E., Lippert, E., Visual Studio Tools for Office 2007, AddisonWesley, 2009;
7. Chang, K.-T., Programming ArcObjects with VBA, CRC Press, 2008;
8. Drdal, M., Accessing Excel files using XML format from Director
multimedia applications, The 3rd International Workshop IE & SI,
Facultatea de Stiine Economice, Universitatea de Vest, Timioara,
2006, Editura Mirton, Timioara, 2006;
9. Drdal, M., Communication between C#.NET applications and
Excel, The Proceedings of the Seventh International Conference on
Informatics in Economy, ASE Bucureti, 2005, n volumul Information
& Knowledge Age, ASE, Bucureti, 2005;
10. Drdal, M., Tua, E., Designing Informatics Systems Using
Economic Models Defined by Excel Spreadsheets, Economy
Informatics, vol. VI, nr. 1-4, Editura INFOREC, Bucureti, 2006;
11. Drdal, M., Implementarea structurilor de date dinamice ca obiecte
de tip colecie n C#, Sesiunea anual de comunicri tiinifice,
Universitatea European Drgan, Lugoj, Editura Dacia Europa
Nova, Lugoj, 2004;
12. Drdal, M., Reveiu, A., Using Resources in Visual C#.NET
Applications, Economy Informatics, vol V, nr. 1-4, Editura
INFOREC, Bucureti, 2005;
13. Drdal, M., Reveiu, A., Smeureanu, I., Using DLL as Interface
between API and VC#.NET Applications, Informatica Economic, vol.
X, nr. 1, Editura INFOREC, Bucureti, 2006;
14. Drdal, M., Smeureanu, I., Reveiu, A., Tehnologii multimedia, Editura
ASE, Bucureti, 2008;
95
96