Limbajul c sharp



Yüklə 1,48 Mb.
səhifə14/14
tarix08.01.2019
ölçüsü1,48 Mb.
#92362
1   ...   6   7   8   9   10   11   12   13   14

GC.Collect();

e = null; }

Console.WriteLine("Stiva= {0} MB",GC.GetTotalMemory(false) >> 20);

Console.WriteLine("Nr. colectari GC= {0}",GC.CollectionCount(0));

};

workQueue = null;



GC.Collect();

System.Console.ReadLine();

}}

Salvati fila cu numele TestMemorie1.cs si compilati.In exemplul de mai



sus,obiectul memFailPoint va detecta la un moment dat ca memoria de

executie este insuficienta (daca memoria de RAM este mai mica decat 1536

MB).In caz contrar ajustati valoarea din constructor).Mai mult decat atat,

in functia catch (declansata de mesajul de eroare emis) este inclusa si

o operatie de eliberare automata a memoriei,pentru a permite continuarea

facila a executiei.Acest gen de solutii se pot proiecta pentru depanarea

automata a programelor ce lucreaza cu baze de date mari,sau cu resurse

de dimensiune variabila.Este util sa aplicati cateva bucle de acest gen

si in etapa de testare si depanare a unui program,pentru a depista orice

situatie in care memoria de executie atinge o cota critica.Astfel,pentru

executia unei aplicatii vizuale,este recomandabil ca in orice moment al

executiei sa ramana cel putin 200 MB de memorie libera.Pentru aplicatiile

de tip Consola,acest gen de masuri de precautie sunt de obicei inutile.

Calculatoarele au o configuratie hardware extrem de polimorfa.Daca

proiectati o rutina de depanare automata,este bine ca setarea obiectului

de tip MemoryFailPoint sa se faca in functie de valoarea memoriei de RAM

instalate (utilizati si o functie pentru detectia RAM-ului instalat).

MemoryFailPoint se combina eficient cu GC.Collect.

-109-

System.Media


Contine clasele necesare pentru a putea executa un fisier audio de

tip .wav,sau pentru a putea deschide fisierele de sunet ale sistemului.

Include urmatoarele clase: SoundPlayer,SystemSound si SystemSounds.

Clasa SoundPlayer construieste un obiect complex,ce poate fi utilizat

pentru monitorizarea fondului sonor din aplicatie.Principalele metode

sunt destinate pentru a putea incarca si executa un fisier audio,fie

in mod asincron (thread unic), fie sincron (in mediu multithreading).Daca

executia este asincrona,fisierul va fi interpretat fara intrerupere de

la un capat la altul,iar daca este executat sincron, fisierul va fi

impartit in fragmente mici ce vor fi executate concomitent cu alte

operatii sincrone.Daca se combina cu alte obiecte,se poate obtine un

manager de sunet complex,cu mai multe fisiere sonore si mai mai multe

linii de executie.Cel mai simplu SoundPlayer apeleaza metodele Load() si

Play().


EXEMPLU:

using System;

using System.Drawing;

using System.Media;

using System.Windows.Forms;
public class Form1 : Form {

public static void Main() { Application.Run(new Form1()); }

private Button button1;

public Form1(){

button1 = new Button();

button1.Left = 200;

button1.Text = "Play";

button1.Click += new EventHandler(button1_Click);

this.Controls.Add(button1);

}

private void button1_Click(object sender,System.EventArgs e)



{

SoundPlayer player = new SoundPlayer();

player.SoundLocation = "Andante.wav";

player.Load();

player.Play();

MessageBox.Show("Exit ?","");

Application.Exit();

}}

Salvati fila cu numele Sound.cs si compilati.



In continuare,aplicatia se poate dezvolta astfel: se adauga un buton

conectat la un obiect de tip OpenFileDialog pentru a permite alegerea

oricarei file din memorie,se adauga un buton ce controleaza metoda:

Player.Stop,se adauga butoane ce permit executia sincrona sau asincrona,

...etc.

Obiectul SoundPlayer nu contine codec-urile pentru fisierele audio



de alt tip decat WAV (MP3,CD Audio,MPEG sau MIDI...etc).Toate celelalte

fisiere audio vor putea fi deschise si executate doar dupa conversia la

formatul .wav.

-110-


System.IO

Contine clasele necesare pentru organizarea unitatilor de memorie si

pentru operatii de intrare/iesire a datelor.Exemplu: citirea sau scrierea

datelor intr-o fila,sau intr-un director.Clasele DirectoryInfo,DriveInfo,

FileInfo si FileSystemInfo,ofera informatii despre unitatile de memorie.

EXEMPLU: using System;

using System.IO;

class TestMemorie {

public static void Main(){

DriveInfo[] unitati = DriveInfo.GetDrives();

foreach(DriveInfo d in unitati){

Console.WriteLine("Unitatea: {0}",d.Name);

Console.WriteLine("Este de tip: {0}",d.DriveType);

if (d.IsReady == true) {

Console.WriteLine("Formatul= {0}", d.DriveFormat);

Console.WriteLine(

"Memoria libera: {0,15} Mb",d.TotalFreeSpace >> 20);

Console.WriteLine(

"Total memorie: {0,15} Mb",d.TotalSize >> 20);

Console.ReadLine();

} } } }

Salvati fila cu numele DriveInfo1.cs si compilati.



Clasa File,controleaza operatiile din interiorul unei file.

EXEMPLU: using System;

using System.Drawing;

using System.IO;

using System.Windows.Forms;

public class Form1 : Form{

public static void Main() { Application.Run(new Form1()); }

private Button buton1;

private RichTextBox text1;

public Form1() {

this.Size = new Size (800,600);

buton1 = new Button();

buton1.Left = 20;

buton1.Text = "Citeste fila";

buton1.Click += new EventHandler(buton1_Click);

text1 = new RichTextBox();

text1.Location = new Point(30,40);

text1.Size = new Size(700,500);

text1.Font = new Font("Modern",14,FontStyle.Bold);

this.Controls.Add(buton1);

this.Controls.Add(text1); }

private void buton1_Click(object sender,System.EventArgs e){

text1.Clear();

string path = @"C:\\Fructe.txt";

string[] readText = File.ReadAllLines(path);

foreach (string sir in readText)

text1.AppendText(sir + "\n");

}}

Salvati fila cu numele CitesteFila.cs si compilati.



-111-

In exemplul de mai sus,se utilizeaza un obiect de tip File,pentru a

citi datele dintr-o fila de tip text,si un obiect de tip RichTextBox,

pentru a prezenta datele cu un font special.Datele citite pot fi procesate

analizate,filtrate sau reformatate si apoi pot fi salvate intr-o fila

noua.


EXEMPLU: using System;

using System.Drawing;

using System.IO;

using System.Windows.Forms;

public class Form1 : Form{

public static void Main() { Application.Run(new Form1()); }

private Button buton1;

private RichTextBox text1;

public Form1() {

this.Size = new Size (800,600);

buton1 = new Button();

buton1.Left = 20;

buton1.Text = "Citeste fila";

buton1.Click += new EventHandler(buton1_Click);

text1 = new RichTextBox();

text1.Location = new Point(30,40);

text1.Size = new Size(700,500);

text1.Font = new Font("Modern",14,FontStyle.Bold);

this.Controls.Add(buton1);

this.Controls.Add(text1); }

private void buton1_Click(object sender,System.EventArgs e){

text1.Clear();

string path = @"C:\\Fructe.txt";

string final = "";

string[] readText = File.ReadAllLines(path);

foreach (string sir in readText){

final = "";

string[] arie2 = sir.Split(new Char[] {'!','.',',',':','?'});

foreach (string sir2 in arie2)

final = final + sir2 + "|";

text1.AppendText(final + "\n");

using (StreamWriter sw = File.AppendText(@"C:\\Salvare.txt"))

{ sw.WriteLine(final); }

}}}


Salvati fila cu numele ScrieFila.cs si compilati.Fata de exercitul

precedent,observati ca fiecare rand citit din fila este separat in functie

de semnele de punctuatie,in siruri.Apoi,fiecare semn de punctuatie este

inlocuit prin separatorul "|" (adica textul este reformatat).In final se

construieste un obiect de tip StreamWriter pentru a scrie datele intr-o

fila noua,special creata.

System.IO contine numeroase stream-uri specializate : BinaryReader,

BinaryWriter,BufferedStream,FileStream,MemoryStream,Stream,StreamReader,

StreamWriter,TextReader,TextWriter.Cititi cu atentie proprietatile si

metodele fiecarui stream,inainte de a alege obiectul care se potriveste

cel mai bine cu necestiatile din aplicatie.Oferta este foarte bogata si

extrem de maleabila.


-112-


System.Diagnostics
Contine clase ce permit o serie de operatii de mententanta,printre

care merita remarcate: monitorizarea performantei sistemului si a

proceselor aflate in executie,monitorizarea conexiunilor active cu alte

aplicatii si resurse din retea (event logs).Dintre aceste clase,trebuie

mentionate: Debug,EventLog,PerformanceCounter,Process,Stopwatch,Switch,

Trace si TraceListener.

O etapa importanta in monitorizarea sistemului de operare o reprezinta

evaluarea proceselor aflate in executie.Pentru acest scop,se poate apela

la clasa Process.

EXEMPLU:


using System;

using System.Diagnostics;

using System.ComponentModel;
class Procese{

static void Main(){

Process [] localAll = Process.GetProcesses();

foreach (Process p1 in localAll)

{

Console.Write("Id = {0} ",p1.Id);



Console.WriteLine("Nume = {0}",p1.ProcessName);

}

Console.ReadLine();



}}

Salvati fila cu numele Procese.cs si compilati.

O astfel de aplicatie este asemanatoare cu Task Manager din Windows XP,

si poate fi apelata in orice moment,pentru a identifica ce procese se

afla in executie intr-un anumit moment dat.Identificarea proceselor are

rost doar in cazul mediului de executie multitasking,cu mai multe procese

executate in paralel.Identificarea proceselor este esentiala atunci cand

se supraincarca memoria de operare si atunci cand doriti sa echilibrati

dimensiunea modulelor ce formeza o aplicatie,pentru a creste viteza de

executie.

Clasa Process se poate utiliza si pentru a lansa in executie un anumit

process,sau un anumit modul executabil.

EXEMPLU:

using System;

using System.Diagnostics;

using System.ComponentModel;


class ProcesNou {

start void main() {

Process.Start("Iexplore.exe","www.gsp.ro");

}}

Salvati fila cu numele Proces1.cs si compilati.Exemplul de mai sus



deschide automat fila gsp.ro cu browserul implicit (IExplore.exe).In

mod similar,puteti deschide automat doua sau mai multe module,necesare

pentru a crea mediul de memorie in care se desfasoara aplicatia,sau pur

si simplu pentru a deschide simultan programele preferate.

-113-

O alta activitate de mentenanta pentru sistem,implica cronometrarea



duratei de executie pentru anumite pocese,sau seturi de operatii.Pentru

simplificarea acestei activitati,System.Diagnostics contine un cronometru

simplu,extrem de usor de implementat: se creaza obiectul, se porneste cu

Start,se opreste cu Stop si apoi se evalueaza timpul scurs cu ajutorul

proprietatii Elapsed.

EXEMPLU:


using System;

using System.Diagnostics;

using System.Windows.Forms;
public class Form1: Form{

public static void Main() { Application.Run(new Form1()); }

private Button buton1,buton2;

private RichTextBox t1;

private Stopwatch s1;

public Form1(){

buton1 = new Button();

buton1.Left = 120;

buton1.text = "Start";

buton1.Click += new EventHandler(buton1_Click);

buton2 = new Button();

buton2.Left = 210;

buton2.Text = "Stop";

buton2.Click += new EventHandler(buton2_Click);

t1 = new RichTextBox();

s1 = new Stopwatch();

this.Controls.AddRange(new Control[]

{ buton1,buton2,t1} );

}

private void buton1_Click(object sender,System.EventArgs e) {



t1.Clear();

t1.Appendtext("Start cronometru" + "\n");

s1.Start();

}

private void buton2_Click(object sender,System.EventArgs e) {



s1.Stop();

TimeSpan ts = s1.Elapsed;

string interval = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",

ts.Hours,ts.Minutes,ts.Seconds,ts.Miliseconds / 10);

t1.AppendText(interval + "\n");

t1.Appendtext("Stop cronometru");

}}

Salvati fila cu numele Cronometru.cs si compilati.Observati ca timpul



scurs intre Start si Stop este salvat in proprietatea Elapsed sub forma

unei date de tip TimeSpan,adica separat in ore,minute secunde si milisec.

Cronometrarea proceselor are rost atat pentru a evalua performanta

sistemului,cat si pentru a stabili intervalele de timp la care urmeaza

sa fie puse in executie procesele automate ("timeing-ul" unor procese).

Deasemenea,cronometrul se poate utiliza si pentru a limita timpul de

acces la o anumita resursa.

-114-


Debug si Trace sunt doua clase concepute special pentru depanarea

codului,sau pentru a urmari parametrii de executie ai unei aplicatii.

Se utilizeaza alternativ iar compilarea trebuie facuta cu optiunile:

d/DEBUG si respectiv d/TRACE.Cele doua clase sunt practic identice si

sunt destul de asemanatoare cu Console.Out,dar adauga si cateva metode

specifice: Assert,Fail,Indent si Unindent precum si un set complet de

metode Write si WriteLine.Practic,cele doua clase se utilizeaza pentru

a scrie output intr-un stream de iesire.In timpul executiei,datele marcate

cu Trace sau Debug vor fi selectate si extrase pentru postanaliza.

EXEMPLU:


using System;

using System.IO;

using System.Diagnostics;
class Test {

static void Main(){

Console.WriteLine("Vezi fila Depanare.txt");

FileStream fs = new FileStream("Depanare.txt",FileMode.Create);

StreamWriter sw = new StreamWriter(fs);

Console.SetOut(sw);

Console.WriteLine("Inceputul inregistrarii:");
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

Trace.AutoFlush = true;

Trace.Indent();

int x;


x= 23 + 7;

x= x + 15;

x= x * 3;

Trace.WriteLine("Valoarea actuala a lui x este: ");

Trace.WriteLine(x);

Trace.Unindent();

sw.Close();

Console.ReadLine()

}}

Salvati fila cu numele Trace1.cs si compilati cu: csc /d:TRACE Trace1.cs



in exemplul de mai sus,datele pentru output sunt dirijate spre o fila

text externa.In acest mod,se poate urmari o anumita valoare in cursul unor

operatii succesive,sau se pot verifica diferiti parametri in momente

succesive ale executiei.O astfel de fila,se poate crea si pentru a arhiva

valorile introduse de utilizator in timpul executiei (pentru back-up).

Datele marcate cu Trace sau Debug pot fi trimise simultan spre mai

multe locatii.Pentru acest scop,se adauga cate un Listener pentru fiecare

dintre locatiile dorite.Exemplu: se pot dirija datele simultan spre o

fila de arhivare,spre Console si spre o fereastra de tip text.Colectia de

auscultatori (Listeneri) este comuna pentru ambele clase,dar datele nu se

pot incrucisa deoarece la compilare se utilizeaza doar una dintre optiuni.

Acest mecanism a fost conceput pentru depanarea codului,dar se poate

aplica pentru diverse alte scopuri.Exemple: se pot arhiva preferintele

fiecarui utilizator,se pot analiza numarul de executii si optiunile alese,

se poate genera un raport de executie...etc.

-115-


Microsoft Visual C# 2008 Express Edition
In capitolele anterioare au fost prezentate elementele de baza ale

limbajului C# si structura platformei .Net.Notiunile prezentate sunt

suficiente pentru a putea dezvolta programe mici,cu fila unica sau cu

un numar limitat de resurse si module executabile.Pentru a favoriza

dezvoltarea unor aplicatii complexe,la standard profesional,compania

Microsoft a dezvoltat si oferit programatorilor un set de interfete

visuale,cu scopul de a simplifica managementul resurselor,designul visual,

conceptia si depanarea codurilor.Aceste interfete sunt grupate sub numele

de Visual C# Express Edition si au fost publicate in mai multe versiuni,

denumite in functie de anul aparitiei (2005,2008,2010...etc).

O astfel de platforma ofera urmatoarele facilitati:

-un compilator pentru limbajul C#,incorporat (asemanator cu csc.exe)

-un Help visual interactiv,denumit IntelliSense

-o fereastra speciala pentru output de tip Debugg si Trace

-un mediu vizual de design pentru obiectele de tip Windows Forms

-suport logistic pentru bibliotecile Windows Presentation Foundation (WPF)

-suport logistic pentru aplicatiile ce contin baze de date locale

-limbaj integrat pentru interogari (LINQ)

-acces la serviciile de tip Windows Communication Foundation (WCF)

Platforma contine mai multe interfete,specializate pentru un anumit

tip de aplicatie.Cu ajutorul lor,se pot creea:

-aplicatii Windows cu ferestre de tip Form

-aplicatii Windows de tip Window Presentation Foundation

-aplicatii de tip Console (similare cu cele prezentate anterior)

-biblioteci de clase si biblioteci DLL

-aplicatii pentru baze de date ce utilizeaza serverul SQL

-jocuri PC bazate pe tehnologia DirectX

Mai mult decat atat,platforma vizuala nu numai ca organizeaza automat

toate filele de resurse, dar ofera si un schelet de cod,in care nu mai

trebuie decat sa completati expresiile ce formeaza aplicatia.In acest mod,

programele vor avea o structura standardizata,foarte usor de urmarit si

depanat,chiar daca programul a fost editat de un alt programator.Daca se

respecta scheletul construit automat,programele vor putea fi depanate mai

usor si utilizand programe de verificare automatizate.

Toate aceste facilitati,grupate la un loc,formeaza mediul software in

care urmeaza sa fie dezvoltat programul si poarta numele de Integrated

Development Enviroment (IDE).Principalele instrumente de lucru din IDE

sunt:


-Code Editor : este fereastra in care se editeaza codurile

-Windows Form Designer : este instrumentul pentru design visual

-Data Explorer : permite vizualizarea datelor din bazele de date

-Debugger: afiseaza erorile depistate de compilator

-Toolbars: sunt barele pentru instrumente visuale

-Project Node: prezinta arborele binar al filelor de resurse

-Class View: afiseaza proiectul sub forma de clase si metode

-Output window: afiseaza informatiile generate in timpul constructiei

-Properties window: afiseaza proprietatile obiectelor

-Toolbox window: contine obiectele pentru design

-Task List: afiseaza lista de sarcini aflate pe rol

-116-


Programul poate fi descarcat de la adresa www.microsoft.com.Instalarea

nu ridica probleme deosebite.Este recomandabil sa instalati si referinta

Help MSDN Express Library.Dupa instalare,este recomandabil sa urmariti si

aplicatia video in care este prezentata interfata visuala,afisata in

caseta Getting Started sub numele: Video Feature Tour.Un alt wizard simplu

denumit: Create Your First Application,prezinta primii pasi necesari

pentru a creea o aplicatie simpla.Daca doriti sa verificati cunostiintele

dobandite in capitolele anterioare,este bine sa incepeti cu o aplicatie

de tip Consola.

EXEMPLU:


Din meniul File,alegeti New Project si apoi selectati optiunea Console

Application.Se va deschide automat o fila de tip text,cu extensia .cs,

denumita Program.cs in care este preeditat scheletul aplicatiei format

din namespace ConsoleApplication1,o clasa denumita Program si functia

Main().Pentru a gestiona resursele aplicatiei,puteti utiliza fereastra

denumita: Solution Explorer (la stanga ecranului).In aceasta fereastra

puteti naviga prin intregul mediu de dezvoltare (IDE) si puteti observa

toate filele din proiect.In aceasta etapa nu figureaza decat fila de

start: Program.cs.

Sa presupunem ca doriti sa editati un executabil cu care sa deschideti

automat ziarul preferat (Gazeta Sporturilor).Este necesar sa adaugati in

lista de resurse si: using System.Diagnostics.

Apoi includeti in functia Main() urmatoarea linie de comanda:

Process.Start("Iexplore.exe","www.gsp.ro");

Pentru a compila si previzualiza proiectul apasati tasta F5.

Daca nu exista nici o eroare,proiectul va fi compilat si executat.Acelasi

rezultat se poate obtine si selectand meniul Build si apoi Build Solution.

Daca exista erori,acestea vor fi afisate in fereastra de depanare rapida

denumita: Error List.In caz ca utilizati un alt browser implicit,trebuie

sa specificati denumirea si adresa corecta.

Daca doriti sa schimbati numele aplicatiei,sau numele clasei inlocuiti

identificatorul namespace (Exemplu: ProgramulMeu) si respectiv cel al

clasei (Exemplu: Gazeta Sporturilor).Apoi reconstruiti cu Build sau cu

Rebuild Solution.

In final,salvati programul selectand Build si Publish.

Se va deschide un wizard automat in care apasati butonul Browse si alegeti

adresa de destinatie.Puteti alege modul de arhivare,in functie de

utilizarea finala.Alegeti instalarea de pe CD sau DVD.Aplicatia nu va fi

actualizata in viitor,asa ca puteti utiliza optiunea implicita.

Aplicatia a fost salvata cu numele implicit: ConsoleApplication1.In

continuare,programul va oferi cate un nume implicit pentru fiecare proiect

nou: ConsoleApplication2....etc.Daca doriti sa folositi un nume ales de

d-voastra,utilizati fereastra Solution Explorer pentru a schimba numele

proiectului,sau cel al modulului executabil.

Inainte de a parasi proiectul,este bine sa salvati fila .cs,cu optiunea

SaveAs,la aceeasi adresa la care a fost publicat proiectul.Fila este

salvata si implicit,dar la o adresa mult mai greu de navigat.

In continuare,pentru a putea actualiza sau modifica proiectul,puteti

sa redeschideti fila .cs cu optiunea Open File.

Pentru a beneficia de utilitarul IntelliSense,este suficient sa

amplasati indicatorul mouse pe codul dorit (in fereastra de editare).

-117-


Windows Forms Application
Termenul de "visual" aplicat platformei Microsoft Visual C sharp,

provine de la fereastra de design in care toate obiectele visuale pot fi

previzualizate inca din etapa de editare a programului.In aceasta ferastra

se va proiecta aspectul interfetei grafice cu utilizatorul.Principalul

avantaj il reprezinta faptul ca obiectele se pot redimeniona sau pot fi

repozitionate dupa bunul plac,cu ajutorul indicatorului mouse.Nu mai este

necesar sa recompilati codul progresiv,de zeci de ori,pentru a obtine

rezultatul scontat.Pur si simplu,asezati obiectele pe panoul de lucru si

apoi alegeti culorile,dimensiunile,pozitia,grupurile de obiecte...etc.

Inca din etapa de design,obiectele cu care lucrati sunt obiectele

reale din program,cu proprietati,metode si evenimente.Pentru a observa

toate amanuntele unui obiect,se poate utiliza fereastra Properties.Daca

aveti un minimum de experienta cu orice alta platforma visuala (Delphi,

C,Visual Basic etc.),interfata grafica din C# va fi extrem de usor de

exploatat.In caz contrar,este recomandabil sa utilizati un tutorial din

reteaua Internet.Acest manual nu va prezenta exhaustiv toate operatiile

si tastele short-cut,sau strategiile de design grafic,ci va prezenta doar

cateva solutii simpliste,exemplificative.

Frecvent,incepatorii deschid platforma de lucru,inainte de a sti exact

ce anume doresc sa faca.Apoi se orienteaza "vazand si facand",pana cind

programul este cat de cat functional.Pentru a realiza programe bune,este

esential ca munca sa inceapa fara calculator.In prima etapa,trebuie sa

formulati clar premiza programului: ce anume doriti sa faca.In etapa

urmatoare,este recomandabil sa va imaginati cum anume doriti sa fie

interfata cu utilizatorul: cu butoane,cu casete de dialog,cu diagrame si

grafice interactive,prezentare video sau audio...etc.Apoi este bine sa

desenati pe hartie schema de baza,cu obiectele si pozitia lor relativa.In

cazul programelor complexe,este util sa desenati si o diagrama de flux,in

care sa proiectati ordinea de executie a principalelor seturi de operatii.

Diagramele nu trebuie sa contina amanunte si solutii tehnice,ci doar

schema de principiu.Solutiile se vor dezvolta ulterior,in functie de

complexitatea mediului de executie.In etapa urmatoare,studiati atent toate

resursele oferite de platforma .Net si alegeti cu atentie obiectele pe

care doriti sa le exploatati,apoi alegeti metodele si proprietatile cu

care doriti sa implementati functionalitatea programului.De cele mai multe

ori,exista doua sau mai multe obiecte asemanatoare.Exemplu: pentru a stoca

temporar seturi de date se pot utiliza: arii de date,liste,dictionare,

stive,colectii,stream-uri etc.Alegerea se va face atat in functie de

experienta d-voastra anterioara,cat si in functie de mediul de executie.

Pe cat posibil,se va alege solutia ce mai simpla,cu minimum de operatii

si cu minimum de consum de memorie.Daca aveti o solutie prefabricata din

alt program,va fi intotdeauna usor de adaptat,sau de reutilizat.Este bine

sa utilizati obiectele cu care sunteti deja familiarizati si solutiile

tehnice pe care le stapaniti cel mai bine.In momentul in care deschideti

platforma de lucru,trebuie sa stiti exact ce anume doriti sa faceti si

cum.Daca programul va avea nevoie si de resurse software externe,este

indicat sa organizati toate aceste resurse inainte de a incepe editarea

programului.La nevoie,este bine sa va consultati si cu persoane ceva mai

experimentate,inainte de a incepe munca propriu zisa.

-118-


Platforma Visual este un mediu de dezvoltare foarte comod,dar nu face

minuni.Se utilizeaza exact aceleasi obiecte si tehnici de programare ca

si in cazul compilatorului csc.exe.Diferenta consta in fereastra de

design visual si in cele cateva instrumente ajutatoare,menite doar sa

simplifice organizarea si conceptia programului.Orice program creat cu

Visual C# poate fi creat sau transpus si pentru alte compilatoare de C#.

Exemplu OpenFile

Pentru un prim exemplu,sa presupunem ca doriti sa creati o aplicatie

de tip Windows cu care sa puteti deschide orice fila de tip text,cu un

anumit set de fonturi.Programul va utiliza o fereastra,un buton si un

obiect RichTextBox pentru afisarea textului.Pentru a simplifica cat mai

mult navigarea se va utiliza un obiect de tip OpenFileDialog.Cele trei

obiecte vor functiona in felul urmator:

1. -la apasarea butonului se deschide obiectul OpenFileDialog cu metoda

ShowDialog()

2. -dupa selectarea filei,textul este copiat intr-un strem si apoi

transferat in obiectul de afisare RichTextBox,folosind metoda

LoadFile()

Dupa proiectarea schemei de principiu,se poate trece la implementare.

Din meniul File,alegeti New Project si apoi Windows Forms Application.

Se va deschide automat fila de proiect WindowsFormsApplication1.Observati

fereastra Form1.cs[Design] in care este afisata fereastra Form1 si cele

doua ferestre ajutatoare: Solution Explorer si Properties.In plus,la

dreapta ecranului este afisata o bara de instrumente (Toolbox) in care

sunt afisate toate obiectele visuale de tip Windows Forms.Daca doriti sa

limitati numarul de obiecte afisate,executati un click pe butonul de

langa textul: All Windows Forms si alegeti alt meniu:

Exemplu: Common Controls

Fereastra Form1.cs,este fereastra de design in care se va proiecta

interfata grafica cu utilizatorul.In aceasta fereastra,obiectele visuale

vor fi afisate asa cum vor fi reprezentate si in programul final.

Pentru a schimba numele proiectului,alegeti din meniul Project,

optiunea Properties (ultima) si apoi alegeti numele dorit pentru

Assembley Name: Exemplu: FilaText

Apoi folositi cursorul orizontal si alegeti un nume pentru

Default namespace: Exemplu: FilaText

In aceasi interfata,puteti alege versiunea platformei .Net utilizata

ca sursa pentru resurse,tipul de output,obiectul de start si imaginea

icon folosita pentru executabilul creat,tipul de manifest si resursele

incluse automat.Restul meniurilor din interfata permit setarea altor

proprietati din proiect.

Fereastra Form1 este fereastra Windows utilizata ca suport (container)

pentru restul obiectelor din program.Pentru a schimba aspectul acestei

ferestre,selectati fereastra cu un click si apoi urmariti fereastra

Properties.Pentru a schimba numele ferestrei,alegeti proprietatea Text

si editati noul nume: Afisare text

Fereastra este insa prea mica pentru a cuprinde o pagina de text.

Alegeti proprietatea Size si schimbati valorile cu: 800;600

Daca doriti o alta culoare de fond,puteti utiliza proprietatea

BackColor sau puteti adauga o imagine cu BackgroundImage.

Proprietatea Location poate seta pozitia ferestrei pe ecran.

-119-


Daca doriti sa studiati si codul aflat in spatele ferestrei de design

executati un dublu click pe fereastra.Se va deschide fereastra Form1.cs

in care puteti observa bibliotecile importate automat si scheletul de

cod creat implicit.Proiectul utilizeaza implicit spatiul denumit

WindowsFormsApplication1.Daca doriti un alt identificator pentru namespace

puteti schimba acest nume,dar va trebui sa repetati operatia pentru toate

filele de cod din program.Daca doriti sa vedeti si fila principala din

program,alegeti din fereastra Solution Explorer fila Program.cs.In

aceasta fila se gaseste functia Main() si link-urile spre restul filelor

din program.

Apoi reveniti la fereastra From1.cs[Design] pentru a continua

dezvoltarea interfetei.Alegeti din Toolbox un obiect de tip Button si

trageti cu butonul mouse apasat pana cand obiectul apare in fereastra

Form1.Asezati butonul in pozitia dorita si apoi schimbati textul in

fereastra Properties,alegand proprietatea Text:

Exemplu: Citeste Textul

La nevoie redimensionati obiectul.

In continuare,alegeti din Toolbox si trageti in fereastra un obiect

de tip RichTextBox.Amplasati obiectul imediat sub buton si apoi

schimbati proprietatea Size la valorile: 725;475

Alegeti fontul preferat,cat mai usor de citit:

Exemplu: Microsoft Sans Serif;12pt;style Bold.

Pentru a seta fontul,apasati butonul ... din proprieatatea Font.

Cele trei obiecte,vor forma interfata grafica cu utilizatorul.Daca

nu sunteti multumiti de aspect,utilizati fereastra Properties pentru

a schimba culorile,pozitia,dimensiunile...etc.

Pentru a simplifica functionalitatea,selectati din Toolbox si trageti

in fereastra si un obiect de tip OpenFileDialog.Acest obiect nu este

visual in forma neactivata,asa ca nu va fi reprezentat in fereastra

Form1,dar va aparea in fereastra de design sub forma unei pictograme mici

insotita de numele obiectului: openFileDialog1.

In continuare se poate dezvolta functionalitatea programului.Pentru

a edita metoda Click() a butonului,este suficient sa executati un dublu

click pe buton (sau alegeti butonul Events din fereastra Properties)

Se va afisa fereastra Form1.cs cu scheletul metodei gata editat.

Completati intre acolade urmatoarea expresie:

openFileDialog1.ShowDialog();

Apoi trebuie editata metoda Click pentru butonul Open din obiectul

openFileDialog1 (cel cu care se alege fila text).Pentru acest scop,

selectati obiectul openFileDialog1 si alegeti din fereastra Properties

butonul Events (cel cu un fulger),apoi executati un dublu click pe

evenimentul FileOk.Completati metoda astfel:

Stream myStream = null;

try { if((myStream = OpenFileDialog1.OpenFile()) != null)

{ using (myStream)

{ richTextBox1.LoadFile(openFileDialog1.FileName,

RichTextBoxStreamType.PlainText);

}}}


catch (Exception ex)

{ MessageBox.Show("Nu gasesc fila.Eroare: " +ex.Message); }

Programul este deja complet si functional.

-120-


In aceasta configuratie,obiectul OpenFileDialog va deschide automat

toate filele din directorul selectat.Pentru a simplifica alegerea

filelor de tip text,se poate seta un filtru,cu ajutorul proprietatii

Filter.Pentru acest scop,alegeti obiectul openFileDialog1 din fereastra

de design,utilizati fereastra Properties si editati proprietatea Filter

astfel: (*.txt)|*.txt

Inainte de compilare,verificati fereastra Error List.In mod normal

apare un mesaj de avertizare,prin care se semnaleaza faptul ca tipul

Stream nu este definit in program.Executati un dublu click pe Form1 si

adaugati in lista de biblioteci si System.IO

Acum fereastra Errors este goala si se poate trece la compilarea si

previzualizarea aplicatiei.

Apasati tasta F5.

Daca nu a intervenit nici o eroare,programul este functional.Puteti

naviga pe intregul disc,si puteti deschide orice fila de text,utilizand

fonturile preferate.Este momentul pentru ultimele ajustari.Daca nu

sunteti multumiti de fonturi,sau de incadrarea in pagina,puteti sa

alegeti alte fonturi,sa schimbati dimensiunile ferestrei sau cele ale

casetei RichTextBox.Optional,modificati culorile,adaugati unul sau mai

multe obiecte Label cu explicatiile dorite,sau afisati numele si sigla

d-voastra pentru a semnala autorul programului...etc.

In final,construiti aplicatia cu Build,salvati programul cu Publish si

la final salvati si proiectul,pentru a putea fi dezvoltat sau modernizat

ulterior.Este util sa pastrati toate filele de cod,pentru a putea

reutiliza in viitor,unele secvente de cod,sau chiar module intregi.

De exemplu,aceasta aplicatie va putea fi inclusa integral,intr-un

program mai mare,sub forma unui modul extern.Pur si simplu adaugati in

interfata respectiva un buton,care la metoda Click lanseaza in executie

acest modul ( cu Process.Start()).

Acest gen de aplicatie a fost exemplificat si pentru compilatorul

csc.exe.Daca doriti sa procedati ca un profesionist,puteti analiza putin

cele doua aplicatii,comparativ: -timpul de executie,viteza de executie,

spatiul de memorie ocupat,portabilitatea pe alte platforme,integrarea in

alte programe,depanarea si compilarea,operatiile de design...etc.

In continuare,puteti utiliza aceasta aplicatie pentru a verifica o

parte dintre instrumentele ajutatoare oferite de platforma visuala.

Astfel,daca selectati una dintre filele de cod,de exemplu Form1.cs

observati ca deasupra ferestrei de editare exista si doua casete de tip

ListBox ce permit sa va orientati mai usor in program.Prima dintre ele

ofera un link spre alte ferestre si module din program,iar cea de a doua

ofera un link spre principalele structuri din fila existenta.

Exemplu: pentru a cauta codul pentru metoda Click() pentru butonul

button1 este suficient sa alegeti in cea de a doua caseta optiunea

button1_Click() si codul va fi derulat automat pana la metoda dorita.

Acest navigator automat,poate fi foarte util in cazul filelor foarte mari.

In exemplul de mai sus,am pastrat toate denumirile implicite create

automat.Daca doriti,puteti sa inlocuiti toti identificatorii cu alte nume

mai scurte si mai comode.Viata d-voastra va fi mult mai usoara,dar se va

complica munca oricarui alt programator,obisnuit sa pastreze aceste nume

implicite.Alegerea va apartine si depinde si de destinatia finala a

programului: freeware,shareware,strict privat,comercial...etc.

-121-


Exemplu Album Foto

Atunci cand o aplicatie Windows utilizeaza si file de resurse externe,

exista doua tipuri de solutii pentru implementare:

1.resursele sunt fixe,caz in care pot fi importate si inglobate

permanent in aplicatie

2.resursele sunt variabile,in functie de dorinta utilizatorului si

trebuie importate sau eliberate dinamic prin operatii de tip I/O.

Prima situatie este banala si nu necesita o descriere separata.Pur si

simplu se importa fila de resurse in proiect,fie direct fie intr-un

director special denumit Resources (creat implicit).Pur si simplu se

trage fila cu butonul mouse apasat,spre fereastra Solution Explorer.

Apoi se creaza link-urile interne necesare.

Cea de a doua situatie,este putin mai complexa.Este necesar ca aplicatia

sa tina permanent evidenta resurselor importate.Pentru acest scop,se poate

utiliza un obiect de tip colectie (Lista,Dictionar,Arie,Stiva etc) sau se

poate apela la o fila de arhivare.Solutia clasica include o baza de date,

un tabel preformatat si serverul SQL.Baza de date asigura securitatea

informatiilor,iar serverul asigura un auscultator (listener) si operatiile

de gestiune si control.Totusi,serverul SQL ocupa 800 Mb de memorie,iar

conexiunea la server consuma din capacitatea de lucru a procesorului.In

plus,exista numeroase situatii banale in care nu este necesara securizarea

datelor.In toate aceste situatii,evidenta resurselor din program se poate

organiza cu o simpla fila de tip text.

EXEMPLU: Sa presupunem ca doriti sa realizati un album de familie,

in care fotografiile sa poata fi derulate cu un singur buton,iar clientul

sa poata organiza numarul si ordinea fotografiilor dupa bunul plac.In plus,

trebuie ca aplicatia sa fie portabila si sa functioneze la orice adresa

de memorie.Se va utiliza o fereastra Windows,un buton si un obiect de tip

PictureBox.Pentru a organiza fotografiile,se va utiliza o fila de tip text,

in care utilizatorul va scrie sub forma de lista,numele si extensia pentru

fiecare fila dorita,astfel:

Foto1.jpg

Foto2.jpg

Foto3.jpg

Salvati fila cu numele Poze.txt.

In continuare,programul va deschide fila text si va copia lista de

resurse intr-un obiect de tip arie,de unde vor putea fi preluate rotativ,

pentru a fi afisate in obiectul PictureBox.

Platforma Microsoft Visual C sharp,ridica o mica problema atunci cand

resursele locale trebuie sa fie incarcate dinamic.Directorul implicit al

proiectului,cel in care se proiecteaza etapa de design,este la o adresa

destul de dificil de controlat (in Local Settings).Din acest motiv,este

recomandabil ca inainte de a incepe lucrul,sa salvati proiectul la o

adresa mai accesibila,apoi sa reincarcati proiectul de la aceasta adresa.

Exemplu: salvati pe unitatea C un director nou,denumit Aplicatii.Acest

director va fi utilizat pentru designul proiectului si pentru a putea

organiza resursele locale (cele initiale).

Apoi deschideti un nou proiect de tip Windows Forms Application.

Eventual redenumiti proiectul,apoi alegeti din meniul File optiunea

Close solution si salvati proiectul la adresa :

C:\\Aplicatii

-122-


Apoi,alegeti din meniul File optiunea Open Project si reincarcati

proiectul,de la adresa C:\\Aplicatii.In fereastra Solution Explorer va

apare arborele proiectului.Pentru a continua,selectati Form1.cs.

Pentru a putea continua editarea,este recomandabil sa verificati

care este directorul curent al proiectului in etapa de design.Pentru

acest scop,adaugati un buton si o eticheta Label,apoi executati un

dublu click pe buton.

Completati metoda button1_Click() astfel:

label1.Text = Directory.GetCurrentDirectory();

apoi adaugati in lista de biblioteci si:

using System.IO;

Apasati tasta F5 pentru a compila proiectul,apoi apasati butonul.

In mod normal se va afisa urmatoarea adresa:

C:\Aplicatii\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug

Aceasta este adresa implicita la care trebuiesc adaugate toate

resursele locale ale proiectului,adica fila Poze.txt si fotografiile.

In continuare,proiectul este usor de realizat.Deschideti fereastra

Form1.cs[Design],adaugati un obiect PictureBox si redimensionati fereastra

si pictureBox1 dupa bunul plac. (Exemplu: 800/600 si 750/550).Alegeti

culorile dorite,fontul pentru label,apoi executati un dublu click pe

buton si modificati codul astfel:

public partial class Form1 : Form {

Bitmap bmp;

String [] poze;

public int pozitie,numar;

public Form1() {

InitializeComponent();

pozitie = 0;

string path1 = Directory.GetCurrentDirectory()+"\\Poze.txt";

poze = File.ReadAllLines(path1);

bmp = new Bitmap(Directory.GetCurrentDirectory()+"\\"+poze[0]);

pictureBox1.Image = (Image)bmp;

this.Refresh();

label1.Text = poze[0];

numar = poze.Length; }

private void button1_Click(object sender,EventArgs e) {

if (pozitie < numar - 1) {

pozitie = pozitie + 1;

bmp = new Bitmap(Directory.GetCurrentDirectory()+"\\"+poze[pozitie]);

}

else {



bmp = new Bitmap(Directory.GetCurrentDirectory()+"\\"+poze[0];

pozitie = 0;

}

label1.Text = poze[pozitie];



pictureBox1.Image = (Image) bmp;

this.Refresh(); }

private void Form1_Load(object sender,EventArgs e) { }

}}

Verificati ultimele detalii de design si apoi apasati tasta F5 pentru



compilare si executie.

-123-


Daca nu a intervenit nici o eroare,proiectul integral poate fi

recuperat din directorul Debug de la adresa C:\Aplicatii.....

Pentru a verifica portabilitatea aplicatiei,creati pe Desktop un

director nou,denumit Test,in care copiati toate filele din directorul

Debug,inclusiv fila Poze.txt si filele .jpg.

Pentru a verifica si incarcarea dinamica,schimbati ordinea din lista

editata in fila Foto.txt,adaugati fotografii noi,sau eliminati o parte

dintre ele.

Pentru a dezvolta proiectul se pot adauga butoane suplimentare pentru

navigatie,sau pentru personalizarea interfetei,cursoare pentru a putea

redimensiona fereastra sau imaginea,un buton OpenFile,pentru a putea

deschide si alte imagini decat cele din fila de resurse,un player audio

pentru fundalul sonor,un obiect Textbox in care se afiseaza explicatii

pentru fiecare imagine,link-uri automate spre resurse din retea...etc.

Exista si situatii in care nu doriti ca utilizatorul sa stie cum se

face gestiunea resurselor.In acest caz,puteti sa adaugati si o interfata

visuala cu casete tip TextBox si Liste sau Dictionare in care clientul

alege vizual filele de resurse.Resursele pot fi arhivate intr-o fila

locala cu atributul hidden.In acest caz,depanarea si controlul nu se va

putea face decat de catre administratorul autorizat (cel care are acces

la fila .txt).

Prin acest mecanism simplu,se pot inlocui un numar foarte mare de

operatii de securizare si control,se reduce consumul de memorie si

implicit creste viteza de executie.Acest tip de solutie,nu se poate

utiliza atunci cand datele clientului au caracter secret.Fila tip text nu

ofera un grad de securitate acceptabil si poate fi corupta sau citita

extrem de usor.Societatile comerciale,firmele private sau orice alt gen

de date cu caracter profesional,se vor proteja cu ajutorul serverelor si

al parolelor de acces.

Filele tip text se pot utiliza si pentru solutii mai complexe.In acest

caz,listele vor contine un text formatat,ce poate fi apoi descompus si

analizat cu ajutorul unui procesor de text.

EXEMPLU:

Foto1.jpg|600;400|Text explicativ

Foto2.jpg|400;200|Text explicativ

Foto3.jpg|500;300|Text explicativ

In exemplul de mai sus,formatul textului este dat de separatorul |.

Textul poate fi descompus cu Split() in trei string-uri diferite ce contin

numele resursei,dimensiunea si textul explicativ.Datele astfel descompuse

vor putea fi utilizate,la fel ca si cele dintr-un tabel.

Acest gen de solutii,au mai ales un caracter didactic si dezvolta

tehnicile de programare ale studentilor si incepatorilor,dar pot oferi si

o solutie alternativa pentru tehnologiile standard.

O solutie asemenatoare de gestiune a resurselor locale,include doar o

interfata grafica,in care utilizatorul face selectii si grupeaza setul

de resurse in containere de tip ListBox sau Dictionary.In acest caz,

selectiile vor avea doar valoare de instanta si nu vor putea fi reluate

sau repetate la executiile viitoare.Acest gen de solutie se prefera

atunci cand nu este important sa se arhiveze optiunile clientului (pentru

a elibera memoria de zeci si sute de file tip client in care sunt arhivate

preferintele fiecarui client).

-124-


Exemplu SoundPlayer
O aplicatie Windows poate include si un fundal sonor.Fisierele audio,

pot contine explicatii si recomandari pentru utilizare,sau pur si simplu

pot adauga un fundal muzical.Pentru a nu incomoda munca utilizatorului,

este recomandabil ca toate operatiile sa se execute automat.Sa presupunem

ca doriti sa adaugati un set de melodii ce vor fi interpretate aleator.

Pentru organizarea melodiilor se va utiliza un folder special,denumit

Melo,in care se arhiveaza fisiere de tip .wav.Redarea fisierelor se va

face cu un obiect de tip SoundPlayer,iar bucla de repetitie se va putea

structura cu ajutorul unui obiect de tip Timer.Controlul se va asigura cu

ajutorul unui buton simplu,la care se pot adauga si doua etichete pentru

a afisa melodia si durata.

Deschideti un proiect nou si adaugati in fereastra Form1 un buton si

doua etichete.Modificati textul butonului in "Play",textul primei etichete

(label) in "Melodia" iar textul celei de a doua etichete in "Durata".

Apasati tasta F5 pentru a compila rapid proiectul,apoi alegeti din meniul

File optiunea Close Solution si salvati proiectul in C:\Aplicatii cu

numele MusicPlayer.In acest moment se pot adauga resursele locale.La

adresa C:\Aplicatii\MusicPlayer\MusicPlayer\bin\Debug adaugati un folder

denumit Melo in care arhivati una sau mai multe fisiere cu extensia .wav.

In acest moment,proiectul contine toate elementele necesare.Se poate

trece la editarea codului.Redeschideti proiectul cu File/Open Project,

si adaugati un obiect de tip Timer.Executati un dublu click pe buton si

modificati fila Form1.cs astfel;

adaugati: using System.IO;

using System.Media;

using System.Timers;

editati metoda button1_Click() astfel:

timer1.Start();

this.PlayMusic();

adaugati metoda PlayMusic astfel:


public void PlayMusic() {

SoundPlayer player = new SoundPlayer();

DirectoryInfo d = new DirectoryInfo("Melo");

FileInfo[] fis = d.GetFiles();

int status = fis.Length;

Random numar = new Random();

int selectie = numar.Next(status);

player.SoundLocation = "Melo\\" + fis[selectie].Name;

int timp = Convert.ToInt32(fis[selectie].Length/100);

timp = timp * 55;

timp = Convert.ToInt32(timp/100);

timp = Convert.ToInt32(timp + timp / 60 + 5000);

timer1.Interval = timp;

label1.Text = fis[selectie].Name;

label2.Text = Convert.ToString(timp / 1000) + " secunde";

player.Load();

player.Play();

player.Dispose();

-125-

d = null;



fis = null;

numar = null;

GC.Collect();

}

in final editati metoda timer_Tick astfel:


private void timer1_Tick(object sender, EventArgs e)

{ this.PlayMusic() }

Daca fereastra de debugg nu contine erori,compilati si executati

apasand tasta F5.

Analizand putin exemplul,se observa urmatoarele operatii:

-la apasarea butonului se porneste timerul

-la fiecare tick,se construieste un obiect nou de tip SoundPlayer

-se citesc toate filele din directorul Melo si se alege una,aleator

-durata melodiei se calculeaza aproximativ,utilizand lungimea fisierului

( aproximativ 10 Mb / minut in cazul fisierelor .wav)

-se afiseaza numele melodiei si durata

-se seteaza intervalul timerului egal cu durata melodiei alese

-se pune in executie obiectul SoundPlayer

-se elibereaza complet memoria

-se forteaza GarbageCollector
In cazul fisierelor .wav,o melodie poate ocupa zeci de Mb.Din acest

motiv,este esential ca memoria sa fie complet eliberata dupa fiecare

melodie.Daca doriti ca fisierele sa fie executate intr-o anumita ordine

fixa,algoritmul aleator se va inlocui cu o lista simpla de unde vor fi

citite succesiv.

Aceasta aplicatie nu contine decat o functionalitate rudimentara.Am

eliminat intentionat toate artificiile de design, pentru a reduce la

maximum consumul de memorie.Modulul executabil nu consuma mai mult de

9 Kb.Acest gen de modul,poate fi incorporat intr-o aplicatie mai mare,

sub forma de functionalitate optionala.Pentru a crea un MusicPlaer complet

trebuie adaugata si o interfata grafica in care utilizatorul sa poata

alege si grupa melodiile dupa bunul plac,cu cateva click-uri de mouse.

Optional se pot crea link-uri spre diverse adrese de retea,de unde se pot

descarca automat melodiile dorite, sau se pot conecta doua sau mai multe

astfel de module,pentru a realiza mixaje sonore.

Nu este obligatoriu ca fisierele sa contina muzica.Pot fi mesaje si

indicatii,sunete optionale sau semnale de avertizare...etc.

Obiectul SoundPlayer nu este destinat pentru aplicatii complexe de tip

MediaPlayer ci doar pentru efecte sonore simple,sau pentru redarea unor

fisiere audio in format .wav.Obiectul nu recunoaste si nici nu decodeaza

nici unul dintre fisierele audio cu compresie (.Mp3,.midi etc.).Pentru

acest gen de situatii,se poate apela direct la Windows MediaPlayer (vezi

si exemplul urmator).

Complexitatea solutiei se va alege in functie de ponderea pe care o

ocupa in program operatiile de tip audio.Daca fundalul sonor este doar

optional,se va alege solutia cea mai simpla si economica,iar daca este o

aplicatie specializata pentru fisierele audio se va prefera un obiect mai

complex (dintre cele aflate in lista Choose Toolbox Items).

-126-

Exemplu MediaPlayer


In interfata grafica sunt incluse toate componentele visuale utilizate

in mod curent pentru design.Paleta de componente nu epuizeaza insa toate

resursele ce pot fi exploatate in proiect.Atunci cand este necesar,paleta

de componente poate fi completata cu orice control de tip ActiveX instalat

in calculator.Paleta de controale ActiveX depinde de programele instalate

in calculatorul d-voastra si poate fi activata alegand din meniul Tools,

optiunea Choose Toolbox Items.

Un exemplu concret il reprezinta aplicatiile audio, pentru file cu un

format oarecare de compresie.Pentru a deschide si executa astfel de file

se poate apela la controlul implicit din mediul Windows denumit Windows

MediaPlayer.Cu un asfel de control,se poate crea o aplicatie similara cu

cea precedenta,dar capabila sa deschida orice format audio.Proiectul va

include un buton,un obiect MediaPlayer si cateva etichete Label.Fisierele

se vor organiza intr-un folder,denumit Melo,la fel ca si in exemplul

anterior.

EXEMPLU: Deschideti un proiect nou si adaugati un buton,apoi salvati

proiectul in C:\Aplicatii pentru a avea acces la resurse.Adaugati in

directorul Debug un folder denumit Melo,in care puteti arhiva mai multe

fisiere audio cu format diferit: mp3,midi,wav,avi ...etc.

Redeschideti proiectul.Pentru a adauga un control MediaPlayer alegeti

din Tools optiunea Choose Toolbox Items si selectati COM Components,apoi

bifati componentul Windows Media Player si confirmati cu OK.Noul control

va apare in Toolbox in grupul Components (ultimul).Adaugati in fereastra

Form1 un control Media Player si 5 etichete Label.Redimensionati toate

obiectele pana obtineti aspectul dorit,modificati textul pentru buton in

Play sau Start si pentru cele 5 etichete in: Adresa,Status,Autor,Titlul

si Albumul.Adaugati si un control de tip Timer.Apoi executati un dublu

click pe buton si modificati codul astfel:

adaugati using System.IO;

editati urmatoarea metoda:

public void PlayMusic() {

DirectoryInfo d = new DirectoryInfo("Melo");

FileInfo[] fis = d.GetFiles();

int status = fis.Length;

Random numar = new Random();

int selectie = numar.Next(status);

label1.Text = "Melo\\"+fis[selectie].Name;

axWindowsMediaPlayer1.URL = label1.Text;

label2.Text =

axWindowsMediaPlayer1.currentMedia.sourceURL.Length.ToString();

label3.Text = axWindowsMediaPlayer1.currentMedia.getItemInfo("Artist");

label4.Text = axWindowsMediaPlayer1.currentMedia.getItemInfo("Title");

label5.Text = axWindowsMediaPlayer1.currentMedia.getItemInfo("Album");

axWindowsMediaPlayer1.Ctlcontrols.play();

d = null;

fis = null;

numar = null;

GC.Collect();

}

-127-


modificati metoda pentru buton astfel:

private void button1_Click(object sender,EventsArgs e) {

PlayMusic();

timer1.Start();

}

apoi adaugati metoda timer1_Tick astfel:



private void timer1_Tick(object sender,Events Args e) {

if ( axWindowsMediaPlayer1.status == "Stopped")

PlayMusic();

label2.Text = axWindowsMediaPlayer1.status;

}

Verificati fereastra View Error List si corectati eventualele erori,apoi



compilati si testati aplicatia apasand tasta F5.

In final,puteti adauga un icon personalizat sau puteti modifica

Fila AssembleyInfo.cs pentru a schimba fila manfiest.Este bine sa testati

cu atentie modul de executie si memoria consumata.Pentru acest scop,puteti

lansa programul in executie si apoi deschideti utilitarul Task Manager

si urmariti memoria consumata si randamentul de procesare.

Obiectul Windows Media Player este mult mai complex decat obiectul

SoundPlayer,dar fiind un obiect de tip ActiveX extern,nu va fi afisat in

fereastra Properties decat cu un set minimal de proprietati.Pentru a

putea exploata intregul set de metode si proprietati trebuie sa studiati

cu atentie documentatia tehnica a controlului,sau puteti sa editati in

fereastra de cod numele obiectului (axWindowsMediaPlayer1) si apoi sa

utilizati wizardul IntelliSense.

Atunci cand proiectul apeleaza la resurse externe,apar o serie intreaga

de probleme de portabilitate.Controlul Windows Media Player este integrat

in mediul Windows (sub o versiune sau alta) asa ca va putea fi apelat la

orice utilizator de Windows.Totusi,pachetul ce contine programul va trebui

sa includa si filele AxInterop.WMPlib.dll,respectiv Interop.WMPLib.dll

(generate automat in directorul Debug).

In situatiile in care utilizati controale ActiveX ce nu sunt incluse in

sistemul de operare,va trebui sa adaugati in pachet si controlul ActiveX,

impreuna cu solutia de instalare in calculatorul gazda si cu un set

minimal de informati explicative.

In general, aplicatiile dezvoltate in mediul Visual C sharp pot contine

nenumarate tipuri de resurse,setate pentru diverse tipuri de configuratii

hardware.Pentru orice program in care se includ si solutii diferite de

cele implicite,este bine ca programul sa includa si o fila in care sunt

specificate sub forma de lista toate resursele hardware si software

necesare pentru proiect,precum si explicatii detaliate de instalare.

In exemplul de mai sus,gestiunea resurselor locale se face extrem de

simplu.Pur si simplu se trag filele dorite in directorul Melo.Atunci cand

se lucreaza cu resurse mai complexe,acest gen de operatii nu pot fi facute

simplist si este necesar sa adaugati si o aplicatie auxiliara cu ajutorul

careia utilizatorul sa poata sa-si organizeze resursele.Exemplu: daca

resursele sunt gestionate intr-o baza de date,utilizatorul trebuie sa

primeasca si o interfata grafica prin care sa poata adauga sau elimina

fisiere din arhiva.Facultativ se pot adauga si masuri de securizare a

datelor prin parole de acces,conturi de utilizator,criptare si decriptare

a datelor,semnaturi digitale...etc.

-128-


Exemplu ChartFX
In majoritatea lucrarilor stiintifice,apare si necesitatea de a putea

prezenta serii de date,sub forma de histograme,diagrame,grafice etc.

Exista un set intreg de solutii posibile.Cea mai simpla solutie este sa

desenati diagramele cu Paint si sa le prezentati sub forma de imagini

simple.Totusi realizarea unui astfel de desen este destul de laborioasa

si consuma mult timp.Pentru astfel de operatii,exista un control ActiveX

specializat,denumit ChartFX,ce poate fi importat in interfata grafica la

fel ca si Windows Media Player,din Tools/Choose Toolbox Items.

Deschideti un proiect nou si adaugati ChartFx in lista de componente.

(vezi exemplul precedent).Alegeti un astfel de obiect si apoi modificati

dimensiunile dupa bunul plac.Obiectul va fi initializat cu un set de

valori atribuite aleator.Pentru a putea obtine graficul dorit,executati

un click drept pe obiect si alegeti Properties.Se va deschide fereastra

Properties cu un set de meniuri.Alegeti Tools si apoi bifati casetele

ToolBar si Legend iar apoi confirmati cu Apply si OK. Restul de meniuri se

pot utiliza pentru a personaliza aspectul. In meniul Data Values alegeti

cate serii de valori doriti sa prezentati si cate valori vor fi in fiecare

serie, iar in meniul appearance alegeti stilul de prezentare.

Redimensionati obiectul astfel incat sa fie vizibila intreaga bara de

instrumente (ToolBar),apoi puteti sa previzualizati datele apasand tasta

F5.Dupa compilare,fereastra Form1 va fi activa,iar bara de instrumente va

fi functionala. Pentru a putea introduce valorile dorite,selectati butonul

Tools (cel cu un ciocan) si bifati optiunea Data Editor. In fereastra se

va afisa o grila,in care puteti introduce seriile de valori dorite.

Pentru a seta valorile introduse, apasati butonul Copy to clipboard

(cel cu un aparat de fotografiat), apoi alegeti din nou butonul Tools si

deselectati optiunea Data Editor.

In acest moment, obiectul va afisa datele introduse de d-voasta.

Cu butoanele Area Chart, Pie Chart ...etc puteti sa schimbati forma de

prezentare,iar cu butonul 3D puteti opta intre graficele 2D sau 3D.Cu

butonul Rotate the chart puteti schimba unghiul de incidenta al coloanelor

3D iar cu butonul Edit Titles puteti adauga titlurile explicative.Optional

pueti adauga si grile orizontale,verticale sau mixte. Cand graficul are

aspectul dorit,salvati fila la adresa dorita,utilizand butonul Export.

In final,salvati aplicatia la adresa dorita. Fila salvata va putea fi

reincarcata ori de cate ori doriti, fie cu butonul Import (primul) fie

cu ajutorul unei comenzi.

Exemplu: salvati fila dorita in directorul Debug cu numele Grafic1.CHF

adaugati un buton

editati metoda clic pentru buton astfel:

private void Button1_Click(object sender,EventArgs e) {

axChartFx1.ImportFile("Grafic1.CHF");

}

Recompilati cu F5.La executie,graficul se va putea incarca apasand pe



buton.Pentru o prezentare mai complexa,un set de grafice se poate incarca

intr-o lista de derulare,la fel ca la albumul foto.Eventual,adaugati un

timer care schimba graficele automat,simultan cu un set de texte

explicative,sau adaugati si un fundal sonor in care prezentati toate

informatiile necesare.

-129-


Exemplu TextToHTML Converter
Un alt gen de aplicatii simple,sunt cele ce implica opratii de analiza

si procesare a unui text,sau de reformatare.Sa presupunem ca doriti sa

includeti intr-un site Web,un set de texte mai vechi,editate cu Notepad.

Pentru a putea converti fila text in fisier hipertext,trebuie adaugat un

set de tag-uri,pentru fiecare rand de text.Sunt necesare un obiect de tip

OpenFile,pentru a deschide fila text si o functie simpla prin care se

face reformatarea textului.

Deschideti un proiect nou, adaugati un buton, schimbati eticheta

butonului in Open sau Conversie sau ceva similar,apoi adaugati si un

obiect de tip OpenFileDialog.

Executati un dublu click pe buton si editati metoda button1_Click

astfel:


openFileDialog1.ShowDialog;

Pentru a putea executa operatii I/O adaugati in lista de import si

using System.IO;

Apoi selectati obiectul OpenFileDialog1 si executati un dublu

click pe evenimentul FileOk.Completati metoda FileOk astfel:
private void openFileDialog1_FileOk(object sender,CancelEventArgs e) {

string path = @openFileDialog1.FileName;

string[] readText = File.ReadAllLines(path);

string[] arie2 = path.Split(new Char[] { '\\' });

int nr = arie.Length;

string nume = arie2[nr - 1];

string adresa = @"C:\\Aplicatii\\Arhiva\\" + nume + ".html";

using (StreamWriter sw = File.AppendText(adresa))

{

sw.WriteLine("");



sw.WriteLine("");

foreach (string sir in readText)



{

sw.WriteLine("


" + sir + "
");

}

sw.WriteLine("
Yüklə 1,48 Mb.

Dostları ilə paylaş:
1   ...   6   7   8   9   10   11   12   13   14




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin