home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 December
/
PCWorld_2002-12_cd.bin
/
Software
/
Komercni
/
Baltik
/
katA.exe
/
katA
/
GUI
/
GUI.TXT
< prev
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.