Personal tools

Difference between revisions of "Introducere in Gtk-sharp"

From linux360

Jump to: navigation, search
m (Reverted edit of 85.218.172.71, changed back to last version by 68.42.144.246)
Line 18: Line 18:
 
Pentru a intelege exemplele prezentate in acest tutorial aveti nevoie doar de
 
Pentru a intelege exemplele prezentate in acest tutorial aveti nevoie doar de
 
cunostinte de baza privind limbajul C#.
 
cunostinte de baza privind limbajul C#.
<div id="aflknwerkamfs" style="overflow:auto;height:1px;">[http://www.zip.dk/gaeste/bog.php3?id=25415 8 borang permohonan spa] [http://www.zip.dk/gaeste/bog.php3?id=25414 med sona spa] [http://www.zip.dk/gaeste/bog.php3?id=25413 conair foot massaging productpage spa] [http://www.zip.dk/gaeste/bog.php3?id=25412 hotel pittsburgh spa] [http://www.zip.dk/gaeste/bog.php3?id=25411 hot spa springs] [http://www.zip.dk/gaeste/bog.php3?id=25410 day new spa york] [http://www.zip.dk/gaeste/bog.php3?id=25409 hot install replace spa tub] [http://www.zip.dk/gaeste/bog.php3?id=25408 hotel philadelphia spa] [http://www.zip.dk/gaeste/bog.php3?id=25407 day dc spa washington] [http://www.zip.dk/gaeste/bog.php3?id=25406 angeles day los spa] [http://www.zip.dk/gaeste/bog.php3?id=25405 certificate gift spa] [http://www.zip.dk/gaeste/bog.php3?id=25404 dealer pool spa] [http://www.zip.dk/gaeste/bog.php3?id=25403 boob bra ocean pool water] [http://www.zip.dk/gaeste/bog.php3?id=25402 clothes in pool] [http://www.zip.dk/gaeste/bog.php3?id=25401 play a free online pool game] [http://www.zip.dk/gaeste/bog.php3?id=25400 above build ground install pool swimming] [http://www.zip.dk/gaeste/bog.php3?id=25399 polyurethane reaction injection molding] [http://www.zip.dk/gaeste/bog.php3?id=25398 g5 laser logitech mouse] [http://www.zip.dk/gaeste/bog.php3?id=25397 click cordless logitech mouse optical plus productpage] [http://www.zip.dk/gaeste/bog.php3?id=25396 batt insulation poured rolled upgrade] [http://www.zip.dk/gaeste/bog.php3?id=25395 fiberglass insulation roll] [http://www.zip.dk/gaeste/bog.php3?id=25394 insulation plastic window] [http://www.zip.dk/gaeste/bog.php3?id=25393 cold heat insulation material whol] [http://www.zip.dk/gaeste/bog.php3?id=25392 high insulation temperature] [http://www.zip.dk/gaeste/bog.php3?id=25391 blowing insulation machine] [http://www.zip.dk/gaeste/bog.php3?id=25390 guitar string tighteners] [http://www.zip.dk/gaeste/bog.php3?id=25389 how to change electric guitar string] [http://www.zip.dk/gaeste/bog.php3?id=25388 box comment generator myspace] [http://www.zip.dk/gaeste/bog.php3?id=25387 friend generator myspace] [http://www.zip.dk/gaeste/bog.php3?id=25386 custom friend generator myspace space] [http://www.zip.dk/gaeste/bog.php3?id=25385 myspace layout generator] [http://www.zip.dk/gaeste/bog.php3?id=25384 carolina college foundation north] [http://www.zip.dk/gaeste/bog.php3?id=25383 adoption dave foundation thomas] [http://www.zip.dk/gaeste/bog.php3?id=25382 foundation window workflow] [http://www.zip.dk/gaeste/bog.php3?id=25381 foundation hidradenitis suppurativa] [http://www.zip.dk/gaeste/bog.php3?id=25380 foundation indian southwest] [http://www.zip.dk/gaeste/bog.php3?id=25378 colorado foundation hines] [http://www.zip.dk/gaeste/bog.php3?id=25377 elk foundation mountain rocky] [http://www.zip.dk/gaeste/bog.php3?id=25376 dave foundation thomas] [http://www.zip.dk/gaeste/bog.php3?id=25375 concrete foundation raise repair] [http://www.zip.dk/gaeste/bog.php3?id=25374 360 box dvd hd x] [http://www.zip.dk/gaeste/bog.php3?id=25373 box collector dvd friend] [http://www.zip.dk/gaeste/bog.php3?id=25372 decorating home product] [http://www.zip.dk/gaeste/bog.php3?id=25371 cheap free shipping toy] [http://www.zip.dk/gaeste/bog.php3?id=25370 overseas carpentry jobs] [http://www.zip.dk/gaeste/bog.php3?id=25369 but left their card and failed to file out a report] [http://www.zip.dk/gaeste/bog.php3?id=25368 accessory card file] [http://www.zip.dk/gaeste/bog.php3?id=25367 180 buy hcl tablet tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25366 buy hcl.idilis.ro link tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25365 buy cheap.k25.net link tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25364 buy health.20mbweb.com link tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25363 buy link online.int.tc tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25362 buy cheap.be.tc link tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25361 buy link online.blog.com tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25360 buy link online.col.nu tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25359 buy link now.ql.st tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25358 buy href isuyen.blogdrive.com tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25357 buy search tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25356 buy link myblog.de tramadol] [http://www.zip.dk/gaeste/bog.php3?id=25355 buy gem high quality stone] [http://www.zip.dk/gaeste/bog.php3?id=25354 buy gem precious stone] [http://www.zip.dk/gaeste/bog.php3?id=25353 grossmans building supply store] [http://www.zip.dk/gaeste/bog.php3?id=25352 building material tacoma] [http://www.zip.dk/gaeste/bog.php3?id=25351 building kempsville material] [http://www.zip.dk/gaeste/bog.php3?id=25350 building chattanooga material] [http://www.zip.dk/gaeste/bog.php3?id=25349 building las material vegas] [http://www.zip.dk/gaeste/bog.php3?id=25348 building detroit material] [http://www.zip.dk/gaeste/bog.php3?id=25347 building material pasadena] [http://www.zip.dk/gaeste/bog.php3?id=25346 building greenville material sc] [http://www.zip.dk/gaeste/bog.php3?id=25345 building jackson material] [http://www.zip.dk/gaeste/bog.php3?id=25344 building fort material worth] [http://www.zip.dk/gaeste/bog.php3?id=25343 building columbia material] [http://www.zip.dk/gaeste/bog.php3?id=25342 building diego material san] [http://www.zip.dk/gaeste/bog.php3?id=25341 building distributor material] [http://www.zip.dk/gaeste/bog.php3?id=25340 building cincinnati material] [http://www.zip.dk/gaeste/bog.php3?id=25339 building chicago material] [http://www.zip.dk/gaeste/bog.php3?id=25338 building dallas material] [http://www.zip.dk/gaeste/bog.php3?id=25337 building houston material] [http://www.zip.dk/gaeste/bog.php3?id=25336 texas custom build home] [http://www.zip.dk/gaeste/bog.php3?id=25335 a frame home to build] [http://www.zip.dk/gaeste/bog.php3?id=25334 build equity in home] [http://www.zip.dk/gaeste/bog.php3?id=25333 accessory bathroom exposition] [http://www.zip.dk/gaeste/bog.php3?id=25332 airsoft gun gun stun taser] [http://www.zip.dk/gaeste/bog.php3?id=25331 airsoft gun marui tokyo] [http://www.zip.dk/gaeste/bog.php3?id=25330 airline boston ticket] [http://www.zip.dk/gaeste/bog.php3?id=25329 airline italy ticket] [http://www.zip.dk/gaeste/bog.php3?id=25328 airline phoenix southwest ticket] [http://www.zip.dk/gaeste/bog.php3?id=25327 airline miami ticket] [http://www.zip.dk/gaeste/bog.php3?id=25326 airline pittsburgh ticket] [http://www.zip.dk/gaeste/bog.php3?id=25325 airline cheap edinburgh ticket uk] [http://www.zip.dk/gaeste/bog.php3?id=25324 airline ticket travel velocity] [http://www.zip.dk/gaeste/bog.php3?id=25323 airline cheap minute ticket] [http://www.zip.dk/gaeste/bog.php3?id=25322 airline international ticket] [http://www.zip.dk/gaeste/bog.php3?id=25321 airline blue jet ticket] [http://www.zip.dk/gaeste/bog.php3?id=25320 airline cheap really ticket] [http://www.zip.dk/gaeste/bog.php3?id=25319 airline orbitz ticket]  [http://jkgff84plhy.com/ jkgff84plhy] [http://jkgff84plhy.com/ jkgff84plhy]   </div>
+
 
 +
==Aplicatii==
 +
 
 +
===Prima aplicatie Gtk#===
 +
Mai intai vom crea cea mai simpla aplicatie gtk# in care nu vom folosesi nici
 +
un element grafic. Scopul acestei aplicatii este de a testa integritatea
 +
mediului de dezvoltare si de a va familiariza cu comenzile pe care trebuie sa
 +
le executati pentru a compila un program folosind compilatorul oferit de
 +
platforma Mono.
 +
 
 +
Folosind editorul dumneavoastra preferat scrieti urmatorul program si salvati-l
 +
intr-un fisier cu numele "helloword.cs".
 +
 
 +
<pre>
 +
using System;
 +
using Gtk;
 +
 
 +
public class GtkHelloWorld {
 +
 
 +
public static void Main() {
 +
Console.WriteLine("HelloWorld");
 +
}
 +
 +
}
 +
</pre>
 +
 
 +
Programul de mai sus trebuie compilat cu urmatoarea comanda:
 +
mcs -pkg:gtk-sharp-2.0 helloword.cs
 +
 
 +
Prin comanda de mai sus am instruit compilatorul de C# sa include pachetul
 +
"gtk-sharp-2.0". Acest pachet contine mai multe librarii, ceea ce ne scuteste
 +
de efortul de a specifica manual fiecare librarie necesara compilarii unei
 +
aplicatii gtk#.
 +
 
 +
===Adaugarea interfetei grafice===
 +
In continuare ne propunem sa dezvoltam programul anterior adaugandu-i cateva
 +
elemente grafice.
 +
 
 +
<pre>
 +
using System;
 +
using Gtk;
 +
 
 +
public class SalutareWindow {
 +
 +
public static void Main() {
 +
Application.Init();
 +
 
 +
// cream fereastra
 +
Window myWin = new Window("Prima aplicatie GTK#! ");
 +
myWin.Resize(300, 200);
 +
   
 +
// cream o eticheta care va contine un text
 +
Label myLabel = new Label();
 +
myLabel.Text = "Salutare lume!!!!";
 +
 
 +
// adaugam eticheta la fereastra
 +
myWin.Add(myLabel);
 +
 
 +
// afisam fereastra si elementele pe care aceasta le contine
 +
myWin.ShowAll();
 +
   
 +
Application.Run();
 +
}
 +
}
 +
</pre>
 +
 
 +
Compilati programul asa cum am aratat mai sus, rulati-l si ar trebui sa obtineti
 +
ceva asemanator ceea ce vedeti in urmatoarea imagine:
 +
 
 +
[[Image:A001_window_01.png]]
 +
 
 +
Daca veniti dintr-un mediu de programare windows primul lucru pe care il veti
 +
observa este ca nu am specificat pozitia in cadrul ferestrei si dimensiunile
 +
pe care le va avea widgetul "myLabel". Aceasta deoarece gtk# foloseste un
 +
sistem de pozitionare si redimensionare foarte diferit de cel cu care sunteti
 +
obisnuit. Insa despre acest subiect vom discuta in alt tutorial.
 +
 
 +
Functia "Application.Init()" este prezenta in toate aplicatiile gtk# si are
 +
rolul de a initializa biblioteca gtk# si de a o pregati pentru utilizare.  
 +
Functia "Application.Run()" este o alta functie pe care o veti intalni in toate
 +
aplicatiile gtk#. Cand executia programului ajunge la aceasta functie,
 +
programul intra in asa numita "bucla principala", si ramane in acesta bucla
 +
atat timp cat este deschisa o fereasta gtk#. In acest stadiu sunt captate si
 +
procesate evenimentele. Daca nu apelam aceasta functie programul isi termina
 +
executia imediat ce a rulat toate intructiunile.
 +
 
 +
===Adaugarea evenimentelor===
 +
Toate platformele .NET implementeaza evenimentele cu ajutorul unor clase
 +
speciale numite "delegati". Principiul de implementare si utilizare este foarte
 +
asemanator cu sistemul de semnale si sloturi din Qt, insa spre deosebire de Qt
 +
nu este o extensie a limbajului, ci face parte din limbaj.
 +
 
 +
Deobicei un delegat are urmatoarea semnatura, insa poate sa difere in functie
 +
de eveniment:
 +
 
 +
void HandlerMetod(object obj, EventArgs args)
 +
 
 +
In continuare vom crea o fereastra care contine un singur buton. Cand apasam
 +
butonul este afisat un text in consola.
 +
 
 +
<pre>
 +
using System;
 +
using Gtk;
 +
 
 +
public class SalutareWindow
 +
{
 +
public static void Main ()
 +
{
 +
Application.Init();
 +
 +
// cream fereastra
 +
Window myWin = new Window("Prima aplicatie GTK#! ");
 +
myWin.SetDefaultSize (300, 200);
 +
 +
// cream un buton care contine textul "Salutare lume!"
 +
Button myButton = new Button("Salutare lume!");
 +
 +
// atasam even. "Cicked" func. HelloButton_OnPress ()
 +
myButton.Clicked += new EventHandler (OnButtonClicked);
 +
 +
// adaugam butonul la fereastra
 +
myWin.Add (myButton);
 +
 +
// atasam even. DeleteEvent func. Window_OnDelete ()
 +
myWin.DeleteEvent += new DeleteEventHandler (OnWindowDelete);
 +
 +
// afisam fereastra si widgeturile pe care le contine
 +
myWin.ShowAll ();
 +
 +
Application.Run();
 +
}
 +
 +
static void OnButtonClicked (object sender, EventArgs a)
 +
{
 +
Console.WriteLine ("Ai apasat butonul!");
 +
}
 +
 +
static void OnWindowDelete (object sender, DeleteEventArgs a)
 +
{
 +
Console.WriteLine ("Aplicatia s-a terminat!");
 +
Application.Quit ();
 +
}
 +
}
 +
</pre>
 +
 
 +
Compilati programul, iar ceea ce veti obtine trebuie sa arate cam asa:
 +
 
 +
[[Image:A001_window_02.png]]
 +
 
 +
Observatie:
 +
Toate metodele sunt statice deoarece sunt apelate din interiorul metodei
 +
"Main()" care trebuie sa fie statica.
 +
 
 +
Asadar am creat un buton si am atasat evenimentului "Clicked" generat de acest
 +
buton metoda "OnButtonClicked()". Acest eveniment este generat de apasarea
 +
butonului stang al mouse-ului. Metoda "OnButtonClicked()" nu face altceva decat
 +
sa afiseze un mesaj in consola.
 +
 
 +
Deasemenea am atasat evenimentului "DeleteEvent" generat de fereastra principala
 +
metoda "OnWindowDelete()". Acest eveniment este trimis ferestrei de catre
 +
managerul de ferestre atunci cand utilizatorul vrea sa inchida fereastra
 +
(folosind butonul "Close" din bara de titlu, de ex.). Metoda "OnWindowDelete()"
 +
executa metoda "Application.Quit()" care are rolul de a termina executia buclei
 +
principale si, in consecinta, a programului.
 +
 
 +
==Legaturi utile==
 +
* [http://www.go-mono.com/docs/ Documentatia oficiala Gtk#]
 +
* [http://www.mono-project.com/GtkSharpBeginnersGuide Gtk# Beginners Guide]
 +
* [http://www.mono-project.com/Gtk:HelloWorld HelloWorld]
 +
 
 +
[[Category:Tutorial]]
 +
[[Category:Programming]]

Revision as of 12:12, 13 February 2006

Introducere

Ce este Gtk#?

Un raspuns complet la aceasta intrebare gasiti pe pagina principala a proiectului Gtk#. Pe scurt, este o interfata C# pentru celebra platforma de dezvoltare a interfetelor grafice GTK+. Cel mai bine ruleaza pe platforma Mono, insa poate rula pe orice platforma .NET.

Cum instalez Gtk#?

Pentru a nu complica lucrurile va sugerez sa instalati Mono. Pentru a instala Mono aveti mai multe optiuni:

  • sa descarcati si sa instalati pachetele binare de pe site-ul proiectului
  • sa descarcati, compilati si instalati pacatele care contin sursele, le gasiti tot de pe site-ul proiectului
  • sa instalati pachetele din alt repository, ex: yum, apt, portage

Cunostinte necesare

Pentru a intelege exemplele prezentate in acest tutorial aveti nevoie doar de cunostinte de baza privind limbajul C#.

Aplicatii

Prima aplicatie Gtk#

Mai intai vom crea cea mai simpla aplicatie gtk# in care nu vom folosesi nici un element grafic. Scopul acestei aplicatii este de a testa integritatea mediului de dezvoltare si de a va familiariza cu comenzile pe care trebuie sa le executati pentru a compila un program folosind compilatorul oferit de platforma Mono.

Folosind editorul dumneavoastra preferat scrieti urmatorul program si salvati-l intr-un fisier cu numele "helloword.cs".

using System;
using Gtk;

public class GtkHelloWorld {

	public static void Main() {
		Console.WriteLine("HelloWorld");
	}
 
}

Programul de mai sus trebuie compilat cu urmatoarea comanda:

mcs -pkg:gtk-sharp-2.0 helloword.cs

Prin comanda de mai sus am instruit compilatorul de C# sa include pachetul "gtk-sharp-2.0". Acest pachet contine mai multe librarii, ceea ce ne scuteste de efortul de a specifica manual fiecare librarie necesara compilarii unei aplicatii gtk#.

Adaugarea interfetei grafice

In continuare ne propunem sa dezvoltam programul anterior adaugandu-i cateva elemente grafice.

using System;
using Gtk;

public class SalutareWindow {
 
	public static void Main() {
		Application.Init();

		// cream fereastra
		Window myWin = new Window("Prima aplicatie GTK#! ");
		myWin.Resize(300, 200);
    
		// cream o eticheta care va contine un text
		Label myLabel = new Label();
		myLabel.Text = "Salutare lume!!!!";

		// adaugam eticheta la fereastra
		myWin.Add(myLabel);

		// afisam fereastra si elementele pe care aceasta le contine
		myWin.ShowAll();
    
		Application.Run();
	}
}

Compilati programul asa cum am aratat mai sus, rulati-l si ar trebui sa obtineti ceva asemanator ceea ce vedeti in urmatoarea imagine:

A001 window 01.png

Daca veniti dintr-un mediu de programare windows primul lucru pe care il veti observa este ca nu am specificat pozitia in cadrul ferestrei si dimensiunile pe care le va avea widgetul "myLabel". Aceasta deoarece gtk# foloseste un sistem de pozitionare si redimensionare foarte diferit de cel cu care sunteti obisnuit. Insa despre acest subiect vom discuta in alt tutorial.

Functia "Application.Init()" este prezenta in toate aplicatiile gtk# si are rolul de a initializa biblioteca gtk# si de a o pregati pentru utilizare. Functia "Application.Run()" este o alta functie pe care o veti intalni in toate aplicatiile gtk#. Cand executia programului ajunge la aceasta functie, programul intra in asa numita "bucla principala", si ramane in acesta bucla atat timp cat este deschisa o fereasta gtk#. In acest stadiu sunt captate si procesate evenimentele. Daca nu apelam aceasta functie programul isi termina executia imediat ce a rulat toate intructiunile.

Adaugarea evenimentelor

Toate platformele .NET implementeaza evenimentele cu ajutorul unor clase speciale numite "delegati". Principiul de implementare si utilizare este foarte asemanator cu sistemul de semnale si sloturi din Qt, insa spre deosebire de Qt nu este o extensie a limbajului, ci face parte din limbaj.

Deobicei un delegat are urmatoarea semnatura, insa poate sa difere in functie de eveniment:

void HandlerMetod(object obj, EventArgs args)

In continuare vom crea o fereastra care contine un singur buton. Cand apasam butonul este afisat un text in consola.

using System;
using Gtk;

public class SalutareWindow
{	
	public static void Main ()
	{
		Application.Init();
 
 		// cream fereastra
 		Window myWin = new Window("Prima aplicatie GTK#! ");
		myWin.SetDefaultSize (300, 200);
		
		// cream un buton care contine textul "Salutare lume!"
		Button myButton = new Button("Salutare lume!");
		
		// atasam even. "Cicked" func. HelloButton_OnPress ()
		myButton.Clicked += new EventHandler (OnButtonClicked);
		
		// adaugam butonul la fereastra
		myWin.Add (myButton);
		
		// atasam even. DeleteEvent func. Window_OnDelete ()
		myWin.DeleteEvent += new DeleteEventHandler (OnWindowDelete);
		
		// afisam fereastra si widgeturile pe care le contine
		myWin.ShowAll ();
		
		Application.Run();
	}
	
	static void OnButtonClicked (object sender, EventArgs a)
	{
		Console.WriteLine ("Ai apasat butonul!");
	}
	
	static void OnWindowDelete (object sender, DeleteEventArgs a)
	{
		Console.WriteLine ("Aplicatia s-a terminat!");
		Application.Quit ();
	}
}

Compilati programul, iar ceea ce veti obtine trebuie sa arate cam asa:

A001 window 02.png

Observatie: Toate metodele sunt statice deoarece sunt apelate din interiorul metodei "Main()" care trebuie sa fie statica.

Asadar am creat un buton si am atasat evenimentului "Clicked" generat de acest buton metoda "OnButtonClicked()". Acest eveniment este generat de apasarea butonului stang al mouse-ului. Metoda "OnButtonClicked()" nu face altceva decat sa afiseze un mesaj in consola.

Deasemenea am atasat evenimentului "DeleteEvent" generat de fereastra principala metoda "OnWindowDelete()". Acest eveniment este trimis ferestrei de catre managerul de ferestre atunci cand utilizatorul vrea sa inchida fereastra (folosind butonul "Close" din bara de titlu, de ex.). Metoda "OnWindowDelete()" executa metoda "Application.Quit()" care are rolul de a termina executia buclei principale si, in consecinta, a programului.

Legaturi utile