home *** CD-ROM | disk | FTP | other *** search
- GUI - Graphical User Interface
- Grafické Uºivatelské Prost²edí
-
- Obsah:
-
- Θvod - 1.0
-
- Podrobn∞ popis funkcí - 2.0
- 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
- Události - 2.26
-
- 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
-
-
- 1.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;).
-
-
- 2.0 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.
-
- 2.25 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.
-