home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 December
/
PCWorld_2002-12_cd.bin
/
Software
/
Komercni
/
Baltik
/
katA.exe
/
katA
/
GUI
/
GUI.LAT
< prev
next >
Wrap
Text File
|
2002-09-17
|
12KB
|
353 lines
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.