GUI - Graphical User Interface GrafickΘ U₧ivatelskΘ Prost°edφ

Obsah:

┌vod

Podrobn² popis funkcφ
ZniΦOkno - 2.1
P°esu≥Okno - 2.2
Obnov - 2.3
P°idejPolo₧ku - 2.4
MenuV²b∞rP°idejPolo₧ku - 2.5
Spus¥PopUpMenu - 2.6
_KresliMenu - 2.7
Spus¥Menu - 2.8
Menu - 2.9
_KresliV²b∞r - 2.10
Spus¥V²b∞r - 2.11
V²b∞r - 2.12
_KresliP°epφnaΦ - 2.13
P°epφnaΦ - 2.14
_KresliVypφnaΦ - 2.15
VypφnaΦ - 2.16
_KresliTextovΘPole - 2.17
UpravTextovΘPole - 2.18
TextovΘPole - 2.19
_KresliText - 2.20
Text - 2.21
_KresliTlaΦφtko - 2.22
TlaΦφtko - 2.23
_KresliOkno - 2.24
Okno - 2.25

P°φklady - 3.0
3.1 "Hello, World!"
3.2 PopUp Menu
3.3 Dialog

D∙le₧itß upuzorn∞nφ a omezenφ 4.0

Prßce s VDev 5.0

Zßv∞r - 6.0

┌vod


Soubory: GUI.SGP - zdrojovß knihovna
GUI_VDEV.SGP - VDev (visußlnφ v²voj)
GUI.PAL - paleta barev windows

S pomocφ tΘto knihovny + v nφ vytvo°enΘho programu VDev (Visual Developer - vi sußlnφ v²voj) a trochou programßtorskΘho umu, m∙₧ete jednoduÜe vytvß°et programy vyu₧φvajφcφ GrafickΘ U₧ivatelskΘ Prost°edφ. Parametry vÜech objekt∙ jsou ulo₧eny v hlavnφm poli Objekty. To mß nßsledujφcφ slo₧ky:

 struct GUIObjekt {
 int
   èφ°ka,V²Üka,
   X,Y,
   Okno, /* Okno, ke kterΘmu objekt nßle₧φ. */
   ID; /* Pracovnφ identifikaΦnφ Φφslo. */
 char
   Spec, /* Specifickß prom∞nnß (nap°. stav u vypφnaΦe). */
   Druh, /* Druh objektu (nap°. 0=Okno,1=TlaΦφtko ...). */
   Styl, /* Styl objektu (nap°. v p°φpad∞ tlaΦφtka 0=obyΦejnΘ,1=plochΘ ...). */
   Viditeln², /* Viditelnost objektu (1=viditeln²,0=neviditeln²) */
   Skupina, /* V p°φpad∞ p°epφnaΦe urΦuje skupinu. */
   P°i°azenaUdßlost; /* No Comment ;) */
 string
   Text; /* Text, kter² je na objektu napsßn. */
 void
   (*Klik)(), /* Udßlost klik na objekt */
   (*Zm∞na)(), /* Udßlost zm∞na hodnoty (nap°. zm∞na textovΘho pole, zm∞na stavu vypφnaΦe ... */
   (*PopUp)(); /* Udßlost vybrßnφ polo₧ky PupUp menu */
 } Objekty[105]; /* Hlavnφ pole, kterΘ zdru₧uje vÜechny objekty.(index=ID) */

Objekt vytvo°φme tak ,₧e do prom∞nnΘ p°i°adφme typu int v²sledek odpovφdajφcφ funkce nap°. Tl1=TlaΦφtko(50,50,70,20,0,Okno1,"Tl1",&Tl1Klik,NULL); (viz 2.23) . V prom∞nnΘ Tl1 te∩ mßme ID (identifikaΦnφ Φφslo) objektu. K jeho parametr∙m se dostaneme tkato: Objekty[Tl1].Text="GUI"; Tφm ovÜem zm∞nφme pouze hodnotu prom∞nnΘ, ale na obrazovce z∙stane stßle "Tl1". Proto j∞st∞ zadßme Obnovit=1; To zajistφ, ₧e p°i dalÜφm voßnφ funkce Udßlosti se obrazovka obnovφ.Konec programu provedeme tak, ₧e do prom∞nnΘ Konec p°i°adφme 1 (Konec=1;).

Podrobn² popis funkcφ


2.1 void ZniΦOkno( int ID )

ZniΦφ (vyma₧e ho z pole Objekty) okno s identifikaΦnφm Φφslem ID. Nastavφ Obnovit na 1.

2.2 void P°esu≥Okno( int x,y,ID )

P°esune okno s identifikaΦnφm Φφslem ID a vÜechny jemu nßle₧φcφ objekty na pozici x,y.

2.3 void Obnov( void )

Znovu postupn∞ vykreslφ vÜechny viditelnΘ objekty.

2.4 void P°idejPolo₧ku( int ID,string text )

P°idß polo₧ku s textem text do PopUp menu objektu s identifikaΦnφm Φφslem ID.

2.5 void MenuV²b∞rP°idejPolo₧ku( int ID, string text )

P°idß polo₧ku s textem text do seznamu polo₧ek V²b∞ru nebo Menu s identifikaΦnφm Φφslem ID.

2.6 int Spus¥PopUpMenu( int x2,y2,ID )

Zobrazφ PopUp menu objektu s identifikaΦnφm Φφslem ID na pozici x2,y2. Navracφ Φφslo vybranΘ polo₧ky.

2.7 void _KresliMenu( int ID,z )

Nakreslφ menu s identifikaΦnφm Φφslem ID. Pokud je z=1 nakreslφ se ve zmßΦlΘm stavu.

2.8 int Spus¥Menu( int ID )

Zobrazφ spuÜt∞nΘ Menu s identifikaΦnφm Φφslem ID. Navracφ Φφslo vybranΘ polo₧ky.

2.9 int Menu( int x,y,okno,string text,void (*udßlost)(),void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) Menu na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). Navracφ ID.

2.10 void _KresliV²b∞r( int ID,z )

Nakreslφ v²b∞r s identifikaΦnφm Φφslem ID. Pokud je z=1 nakreslφ se ve zmßΦklΘm stavu.

2.11 int Spus¥V²b∞r( int ID )

Zobrazφ spuÜt∞n² V²b∞r s identifikaΦnφm Φφslem ID. Navracφ Φφslo vybranΘ polo₧ky.

2.12 int V²b∞r(int x,y,Üφ°ka,okno,string text,void (*udßlost)(),void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) V²b∞r na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). Navracφ ID.

2.13 void _KresliP°epφnaΦ( int ID )

Nakreslφ p°epφnaΦ s identifikaΦnφm Φφslem ID.

2.14 int P°epφnaΦ( int x,y,char stav,skupina,int okno,string text, void (*udßlost)(),void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) p°epφnaΦ na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). skupina udßvß skupinu p°epφnaΦ∙. stav znaΦφ oznaΦenφ (0=neoznaΦen², 1=oznaΦen²). Navracφ ID.

2.15 void _KresliVypφnaΦ( int ID )

Nakreslφ vypφnaΦ s identifikaΦnφm Φφslem ID.

2.16 int VypφnaΦ( int x,y,char stav,int okno,string text,void (*udßlost)(), void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) vypφnaΦ na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). stav znaΦφ oznaΦenφ (0=neoznaΦen², 1=oznaΦen²). Navracφ ID.

2.17 void _KresliTextovΘPole( int ID )

Nakreslφ vypφnaΦ s identifikaΦnφm Φφslem ID.

2.18 string UpravTextovΘPole( int ID )

Spustφ ·pravu textovΘho pole s identifikaΦnφm Φφslem ID. Navracφ zadan² °et∞zec.

2.19 int TextovΘPole(int x,y,Üφ°ka,styl,okno,string text,void (*udßlost)(), void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) textovΘ pole na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). styl znaΦφ typ zadanΘ hodnoty - 1 °et∞zec 2 celΘ Φφslo (int) 3 des. Φφslo (double) . Navracφ ID.

2.20 void _KresliText( int ID )

Nakreslφ vypφnaΦ s identifikaΦnφm Φφslem ID.

2.21 int Text( int x,y,okno, string text,void (*udßlost)(),void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) Text na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). Navracφ ID.

2.22 void _KresliTlaΦφtko( int ID,z )

Nakreslφ tlaΦφtko s identifikaΦnφm Φφslem ID. Pokud je z=1 nakreslφ se ve zmßΦklΘm stavu.

2.23 int TlaΦφtko(int x,y,Üφ°ka,v²Üka,styl,okno,string text,void (*udßlost)(), void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) tlaΦφtko na pozici x,y od pravΘho hornφho rohu okna okno s textem text a udßlostmi udßlost(=klik) a popup(=spuÜt∞nφ PopUp menu). styl znaΦφ vzhled tlaΦφtka - 1 normßlnφ 2 plochΘ. Navracφ ID.

2.24 void _KresliOkno( int ID,z )

Nakreslφ okno s identifikaΦnφm Φφslem ID. Hodnoty z - 0 nezmßΦkle vykreslφ celΘ okno 1 zmßΦkle nevykreslφ celΘ okno 2 nezmßΦkle nevykreslφ celΘ okno.

int Okno( int x,y,Üφ°ka,v²Üka,string text,void (*udßlost)(),void (*popup)() )

Vytvo°φ (p°i°adφ vlastnosti+vykreslφ) okno na pozici x,y od pravΘho hornφho rohu obrazovky s textem text a udßlostmi udßlost(=k°φ₧ek) a popup(=spuÜt∞nφ PopUp menu). Navracφ ID.

3.0 P°φklady


3.1 "Hello, World!"

V₧dy prvnφ program ("Ahoj, sv∞te!"). Zkopφrujeme soubor GUI.Sgp jako Pokus.Sgp. V Baltazarovi otev°eme program Pokus.

Globaßlnφ prom∞nnΘ(Ctrl+G):

int Okno1,Text1,Tl1;

P°φkaz 2, funkce Init:

 Okno1=Okno(220,140,200,200,"1. Program",NULL,NULL);
 Text1=Text((200-StrDΘlka("Ahoj, sv∞te!")*8)/2,(200-10)/2,Okno1,"Ahoj, sv∞te!",NULL,NULL);
 Tl1=TlaΦφtko((200-70)/2,170,70,25,0,"Konec",Okno1,Tl1Klik,NULL);

NULL znamenß ₧e na tuto udßlost nechceme reagovat. Musφme vytvo°it novou funkci Tl1Klik, do kterΘ napφÜeme toto:

:konec=1!

Jakmile u₧ivatel klikne na tlaΦφtko Tl1, zavolß se funkce Tl1Klik aprogram se ukonΦφ.

3.2 PopUp Menu

Vyu₧ijeme p°edchozφ program. Do p°φkazu 2 funkce Init p°idßme toto:

 P°idejPolo₧ku(Okno1,"Zm∞≥");
 P°idejPolo₧ku(Okno1,"Zp∞t");

Poznßmka: V p°φpad∞, ₧e chceme mφt v polo₧ce text delÜφ ne₧ 12 znak∙ musφme zm∞nit hodnotu Seznamy[Okno1].èφ°ka ( v bodech, m∙₧e b²t aplikovßno i na v²b∞ry a menu).

A mφsto 2. NULL v definifi Okna1 napφÜeme Okno1PopUp. T∞∩ ovÜem musφme vytvo°it dalÜφ funkci Okno1PopUp. Do tΘ napφÜeme toto:

 if(Seznamy[Okno1].V²b∞r==0) Objekty[Okno1].Text="Zm∞na";
 else if(Seznamy[Okno1].V²b∞r==1) Objekty[Okno1].Text="Program1";
 Obnovit=1;

K paramer∙m jakΘhokoliv objektu se dostaneme takto: Objekty[ID].parametr (viz 1.0 ┌vod). Kdy₧ zm∞nφme n∞ak² viditeln² parametr (ve v∞tÜin∞ p°φpad∙), tak za poslednφ zm∞nu napφÜeme Obnovit=1. Tφm zajistφme p°ekreslenφ.

Seznamy[Okno1].V²b∞r obsahuje Φφslo vybranΘ polo₧ky.

PopUp menu vyvolßme tak, ₧e stiskneme pravΘ tlaΦφtko myÜi a dr₧φme ho dokud si nevybereme polo₧ku.

Podobn²m zb∙sobem pracujeme takΘ s v²b∞rem a s menu, jen je mφsto prom∞nnΘ Seznamy prom∞nnß MenuVybSeznamy.

MenuVybSeznamy[Vyb1].V²b∞r

3.3 Dialog

Existuje jeÜt∞ jedna mo₧nost prßce s udßlostmi, u kterΘ ovÜem nelze pou₧φvat PopUp menu. Funkce Udßlosti() vracφ ID objektu, u kterΘho prob∞hla jeho primßrnφ udßlost. To znamenß, ₧e v p°φpad∞ ₧e u₧ivatel spustφ PopUp menu vracφ funkce -1. Jednouduch² dialog v jednΘ funkci:

int DialogOkno,DialogTlAno,DialogTlNe,DialogText,udalost;

 DialogOkno=Okno(220,210,200,70,"Varovßnφ",NULL,NULL);
 DialogText=Text(6,25,DialogOkno,NULL,NULL);
 DialogTlNe=TlaΦφtko(10,40,60,25,0,DialogOkno,"Ne",NULL,NULL);
 DialogTlAno=TlaΦφtko(130,40,60,25,0,DialogOkno,"Ano",NULL,NULL);

 while(udalost!=DialogTlNe && udalost!=DialogTlAno) {
 udalost=Udßlosti();
 }

if (udalost==DialogTlNe) {
 T≤n(100);
 ╚ekej(1000);
 VypniT≤n();
 }
 else if (udalost==DialogTlAno) {
 T≤n(1000);
 ╚ekej(2000);
 VypniT≤n();
 ZniΦOkno(DialogOkno);
 }

D∙le₧itß upuzorn∞nφ a omezenφ 4.0


Prom∞nnΘ a konstanty ID"xyz" a Start"xyz" v globßlnφch definicφch m∞nφme pouze tehdy, chceme-li SOU╚ASN╠ zobrazit vφce objekt∙ jednoho druhu ne₧ je rozdφl konstanty Start"xyz" a Start"dalÜφobjekt". TakΘ musφme zm∞nit max. index v definici pole Objekty. Chceme-li zm∞nit nap°. poΦet p°epφnaΦ∙ musφme postupn∞ zmenit nastavenφ i dalÜφch kostant.

Prßce s VDev 5.0


VDev je nßstroj pro visußlnφ vytvß°enφ grafickΘho prost°edφ. Pro vytvo°enφ objektu stiskneme v oblasti okna pravΘ tlaΦφtko myÜi a vybereme polo₧ku "Nov² objekt". Nynφ zvolφme druh objektu a stiskneme tlaΦφtko Ok. P°esuneme nov∞ vzniklΘ tlaΦφtko na mφsto, kterΘ chceme. Nynφ na n∞j m∙₧eme kliknout prav²m tlaΦφtkem myÜi a zvolit "Vlastnosti". Objevφ se okno se vÜemi dostupn²mi vlastnostmi tlaΦφtka. Takto postupujeme u ka₧dΘho objektu dokud nevytvo°φme cht∞nΘ okno. Pak mu₧eme zvolit v PopUp menu okna polo₧ku "Vygenerovat". Zadßme jmΘno souboru klikneme na Ok. V SGP Editoru potom tento soubor otev°eme a zkopφrujeme jeho obsah na zvolenΘ mφsto, pop°φpad∞ zkopφrujeme prom∞nnΘ do globßlnφch prom∞nn²ch.

Zßv∞r 6.0


Program jsem nejd°φve programoval v SGP Baltazarovi, ale m∞l jsem jin² zp∙sob ulo₧enφ vlastnostφ objekt∙ a zßhy jsem zjistil, ₧e tento zp∙sob je nepou₧iteln². Program m∞l b²t uveden u₧ na sout∞₧ BB 2001. Potom jsem ho zaΦal programovat v Pascalu ji₧ se zde pou₧it²m zp∙sobem uklßdßnφ vlastnostφ. Tento program stßle vyvφjφm, ale musφm °φct, ₧e verze pro Baltazara je PODSTATN╠ dokonalejÜφ. O letnφch prßzdninßch 2002 jsem zaΦal programovat verzi pro Baltazara a v²sledek prßce se dostavil na konci prßzdnin.

Mßte-li jakΘkoli p°ipomφnky nebo novΘ nßpady m∙₧ete je posφlat na e-mail: marek.brysa@post.cz Pokud budete m∙j program modifikovat, poÜlete mi ho prosφm na e-mail.