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 >
Text File  |  2002-09-17  |  12KB  |  353 lines

  1. GUI - Graphical User Interface
  2.       Grafické Uºivatelské Prost²edí
  3.  
  4. Obsah:
  5.  
  6. Θvod - 1.0
  7.  
  8. Podrobn∞ popis funkcí - 2.0
  9.   ZniƒOkno - 2.1
  10.   P²esuσOkno - 2.2
  11.   Obnov - 2.3
  12.   P²idejPoloºku - 2.4
  13.   MenuV∞b╪rP²idejPoloºku - 2.5
  14.   Spus£PopUpMenu - 2.6
  15.   _KresliMenu - 2.7
  16.   Spus£Menu - 2.8
  17.   Menu - 2.9
  18.   _KresliV∞b╪r - 2.10
  19.   Spus£V∞b╪r - 2.11
  20.   V∞b╪r - 2.12
  21.   _KresliP²epínaƒ - 2.13
  22.   P²epínaƒ - 2.14
  23.   _KresliVypínaƒ - 2.15
  24.   Vypínaƒ - 2.16
  25.   _KresliTextovéPole - 2.17
  26.   UpravTextovéPole - 2.18
  27.   TextovéPole - 2.19
  28.   _KresliText - 2.20
  29.   Text - 2.21
  30.   _KresliTlaƒítko - 2.22
  31.   Tlaƒítko - 2.23
  32.   _KresliOkno - 2.24
  33.   Okno - 2.25
  34.   Události - 2.26
  35.  
  36. P²íklady - 3.0
  37.   3.1 "Hello, World!"
  38.   3.2 PopUp Menu
  39.   3.3 Dialog
  40.  
  41. Dàleºitá upuzorn╪ní a omezení 4.0
  42.  
  43. Práce s VDev 5.0
  44.  
  45. Záv╪r - 6.0
  46.  
  47.  
  48. 1.0 Θvod
  49. --------------------------------------------------------------------------------
  50.  
  51. Soubory:
  52. GUI.SGP - zdrojová knihovna
  53. GUI_VDEV.SGP - VDev (visuální v∞voj)
  54. GUI.PAL - paleta barev windows
  55.  
  56. S pomocí této knihovny + v ní vytvo²eného programu VDev (Visual Developer - vi-
  57. suální v∞voj) a trochou programátorského umu, màºete jednoduτe vytvá²et programy
  58. vyuºívající Grafické Uºivatelské Prost²edí. Parametry vτech objektà jsou uloºeny
  59. v hlavním poli Objekty. To má následující sloºky:
  60.  
  61. struct  GUIObjekt {
  62.           int
  63.             µí²ka,V∞τka,
  64.             X,Y,
  65.             Okno, /* Okno, ke kterému objekt náleºí. */
  66.             ID;   /* Pracovní identifikaƒní ƒíslo. */
  67.           char
  68.             Spec, /* Specifická prom╪nná (nap². stav u vypínaƒe). */
  69.             Druh, /* Druh objektu (nap². 0=Okno,1=Tlaƒítko ...). */
  70.             Styl, /* Styl objektu (nap². v p²ípad╪ tlaƒítka 0=obyƒejné,1=ploché ...). */
  71.             Viditeln∞, /* Viditelnost objektu (1=viditeln∞,0=neviditeln∞) */
  72.             Skupina, /* V p²ípad╪ p²epínaƒe urƒuje skupinu. */
  73.             P²i²azenaUdálost; /* No Comment ;) */
  74.           string
  75.             Text; /* Text, kter∞ je na objektu napsán. */
  76.           void
  77.             (*Klik)(),  /* Událost klik na objekt */
  78.             (*Zm╪na)(), /* Událost zm╪na hodnoty (nap². zm╪na textového pole, zm╪na stavu vypínaƒe ... */
  79.             (*PopUp)(); /* Událost vybrání poloºky PupUp menu */
  80.         } Objekty[105]; /* Hlavní pole, které zdruºuje vτechny objekty.(index=ID) */
  81.  
  82. Objekt vytvo²íme tak ,ºe do prom╪nné p²i²adíme typu int v∞sledek odpovídající
  83. funkce nap². Tl1=Tlaƒítko(50,50,70,20,0,Okno1,"Tl1",&Tl1Klik,NULL); (viz 2.23) .
  84. V prom╪nné Tl1 te╘ máme ID (identifikaƒní ƒíslo) objektu. K jeho parametràm se 
  85. dostaneme tkato: Objekty[Tl1].Text="GUI"; Tím ovτem zm╪níme pouze hodnotu
  86. prom╪nné, ale na obrazovce zàstane stále "Tl1". Proto j╪st╪ zadáme Obnovit=1;
  87. To zajistí, ºe p²i dalτím voání funkce Události se obrazovka obnoví.Konec
  88. programu provedeme tak, ºe do prom╪nné Konec p²i²adíme 1 (Konec=1;).
  89.  
  90.  
  91. 2.0 Podrobn∞ popis funkcí
  92. --------------------------------------------------------------------------------
  93.  
  94. 2.1 void ZniƒOkno( int ID )
  95.  
  96. Zniƒí (vymaºe ho z pole Objekty) okno s identifikaƒním ƒíslem ID.
  97. Nastaví Obnovit na 1.
  98.  
  99. 2.2 void P²esuσOkno( int x,y,ID )
  100.  
  101. P²esune okno s identifikaƒním ƒíslem ID a vτechny jemu náleºící objekty na
  102. pozici x,y.
  103.  
  104. 2.3 void Obnov( void )
  105.  
  106. Znovu postupn╪ vykreslí vτechny viditelné objekty.
  107.  
  108. 2.4 void P²idejPoloºku( int ID,string text )
  109.  
  110. P²idá poloºku s textem text do PopUp menu objektu s identifikaƒním ƒíslem ID.
  111.  
  112. 2.5 void MenuV∞b╪rP²idejPoloºku( int ID, string text )
  113.  
  114. P²idá poloºku s textem text do seznamu poloºek V∞b╪ru nebo Menu s identifikaƒním
  115. ƒíslem ID.
  116.  
  117. 2.6 int Spus£PopUpMenu( int x2,y2,ID )
  118.  
  119. Zobrazí PopUp menu objektu s identifikaƒním ƒíslem ID na pozici x2,y2. Navrací
  120. ƒíslo vybrané poloºky.
  121.  
  122. 2.7 void _KresliMenu( int ID,z )
  123.  
  124. Nakreslí menu s identifikaƒním ƒíslem ID. Pokud je z=1 nakreslí se ve zmáƒlém
  125. stavu.
  126.  
  127. 2.8 int Spus£Menu( int ID )
  128.  
  129. Zobrazí spuτt╪né Menu s identifikaƒním ƒíslem ID. Navrací ƒíslo vybrané poloºky.
  130.  
  131. 2.9 int Menu( int x,y,okno,string text,void (*událost)(),void (*popup)() )
  132.  
  133. Vytvo²í (p²i²adí vlastnosti+vykreslí) Menu na pozici x,y od pravého horního rohu
  134. okna okno s textem text a událostmi událost(=klik) a popup(=spuτt╪ní PopUp menu).
  135. Navrací ID.
  136.  
  137. 2.10 void _KresliV∞b╪r( int ID,z )
  138.  
  139. Nakreslí v∞b╪r s identifikaƒním ƒíslem ID. Pokud je z=1 nakreslí se ve zmáƒklém
  140. stavu.
  141.  
  142. 2.11 int Spus£V∞b╪r( int ID )
  143.  
  144. Zobrazí spuτt╪n∞ V∞b╪r s identifikaƒním ƒíslem ID. Navrací ƒíslo vybrané
  145. poloºky.
  146.  
  147. 2.12 int V∞b╪r(int x,y,τí²ka,okno,string text,void (*událost)(),void (*popup)() ) 
  148.  
  149. Vytvo²í (p²i²adí vlastnosti+vykreslí) V∞b╪r na pozici x,y od pravého horního rohu
  150. okna okno s textem text a událostmi událost(=klik) a popup(=spuτt╪ní PopUp menu).
  151. Navrací ID.
  152.  
  153. 2.13 void _KresliP²epínaƒ( int ID )
  154.  
  155. Nakreslí p²epínaƒ s identifikaƒním ƒíslem ID.
  156.  
  157. 2.14 int P²epínaƒ( int x,y,char stav,skupina,int okno,string text,
  158.                    void (*událost)(),void (*popup)() )
  159.  
  160. Vytvo²í (p²i²adí vlastnosti+vykreslí) p²epínaƒ na pozici x,y od pravého horního
  161. rohu okna okno s textem text a událostmi událost(=klik) a popup(=spuτt╪ní PopUp
  162. menu). skupina udává skupinu p²epínaƒà. stav znaƒí oznaƒení (0=neoznaƒen∞,
  163. 1=oznaƒen∞). Navrací ID.
  164.  
  165. 2.15 void _KresliVypínaƒ( int ID )
  166.  
  167. Nakreslí vypínaƒ s identifikaƒním ƒíslem ID.
  168.  
  169. 2.16 int Vypínaƒ( int x,y,char stav,int okno,string text,void (*událost)(),
  170.                   void (*popup)() )
  171.  
  172. Vytvo²í (p²i²adí vlastnosti+vykreslí) vypínaƒ na pozici x,y od pravého horního
  173. rohu okna okno s textem text a událostmi událost(=klik) a popup(=spuτt╪ní PopUp
  174. menu). stav znaƒí oznaƒení (0=neoznaƒen∞, 1=oznaƒen∞). Navrací ID.
  175.  
  176. 2.17 void _KresliTextovéPole( int ID )
  177.  
  178. Nakreslí vypínaƒ s identifikaƒním ƒíslem ID.
  179.  
  180. 2.18 string UpravTextovéPole( int ID )
  181.  
  182. Spustí úpravu textového pole s identifikaƒním ƒíslem ID. Navrací zadan∞ ²et╪zec.
  183.  
  184. 2.19 int TextovéPole(int x,y,τí²ka,styl,okno,string text,void (*událost)(),
  185.                      void (*popup)() )
  186.  
  187. Vytvo²í (p²i²adí vlastnosti+vykreslí) textové pole na pozici x,y od pravého
  188. horního rohu okna okno s textem text a událostmi událost(=klik) a
  189. popup(=spuτt╪ní PopUp menu). styl znaƒí typ zadané hodnoty - 1 ²et╪zec
  190. 2 celé ƒíslo (int)  3 des. ƒíslo (double) . Navrací ID.
  191.  
  192. 2.20 void _KresliText( int ID )
  193.  
  194. Nakreslí vypínaƒ s identifikaƒním ƒíslem ID.
  195.  
  196. 2.21 int Text( int  x,y,okno, string text,void (*událost)(),void (*popup)() )
  197.  
  198. Vytvo²í (p²i²adí vlastnosti+vykreslí) Text na pozici x,y od pravého horního rohu
  199. okna okno s textem text a událostmi událost(=klik) a popup(=spuτt╪ní PopUp menu).
  200. Navrací ID.
  201.  
  202. 2.22 void _KresliTlaƒítko( int ID,z )
  203.  
  204. Nakreslí tlaƒítko s identifikaƒním ƒíslem ID. Pokud je z=1 nakreslí se ve
  205. zmáƒklém stavu.
  206.  
  207. 2.23 int Tlaƒítko(int x,y,τí²ka,v∞τka,styl,okno,string text,void (*událost)(),
  208.                   void (*popup)() )
  209.  
  210. Vytvo²í (p²i²adí vlastnosti+vykreslí) tlaƒítko na pozici x,y od pravého horního
  211. rohu okna okno s textem text a událostmi událost(=klik) a
  212. popup(=spuτt╪ní PopUp menu). styl znaƒí vzhled tlaƒítka - 1 normální 2 ploché.
  213. Navrací ID.
  214.  
  215. 2.24 void _KresliOkno( int ID,z )
  216.  
  217. Nakreslí okno s identifikaƒním ƒíslem ID. Hodnoty z - 0 nezmáƒkle vykreslí celé
  218. okno 1 zmáƒkle nevykreslí celé okno 2 nezmáƒkle nevykreslí celé okno.
  219.  
  220. 2.25 int Okno( int x,y,τí²ka,v∞τka,string text,void (*událost)(),void (*popup)() )
  221.  
  222. Vytvo²í (p²i²adí vlastnosti+vykreslí) okno na pozici x,y od pravého horního
  223. rohu obrazovky s textem text a událostmi událost(=k²íºek) a
  224. popup(=spuτt╪ní PopUp menu). Navrací ID.
  225.  
  226. 3.0 P²íklady
  227. --------------------------------------------------------------------------------
  228.  
  229. 3.1 "Hello, World!"
  230.  
  231. Vºdy první program ("Ahoj, sv╪te!"). Zkopírujeme soubor GUI.Sgp jako Pokus.Sgp.
  232. V Baltazarovi otev²eme program Pokus.
  233.  
  234. Globaální prom╪nné(Ctrl+G):
  235.  
  236. int Okno1,Text1,Tl1;
  237.  
  238. P²íkaz 2, funkce Init:
  239.  
  240.   Okno1=Okno(220,140,200,200,"1. Program",NULL,NULL);
  241.   Text1=Text((200-StrDélka("Ahoj, sv╪te!")*8)/2,(200-10)/2,Okno1,"Ahoj, sv╪te!",NULL,NULL);
  242.   Tl1=Tlaƒítko((200-70)/2,170,70,25,0,"Konec",Okno1,Tl1Klik,NULL);
  243.  
  244. NULL znamená ºe na tuto událost nechceme reagovat. Musíme vytvo²it novou funkci
  245. Tl1Klik, do které napíτeme toto:
  246.  
  247.   :konec=1!
  248.  
  249. Jakmile uºivatel klikne na tlaƒítko Tl1, zavolá se funkce Tl1Klik aprogram se ukonƒí.
  250.  
  251. 3.2 PopUp Menu
  252.  
  253. Vyuºijeme p²edchozí program. Do p²íkazu 2 funkce Init p²idáme toto:
  254.  
  255.   P²idejPoloºku(Okno1,"Zm╪σ");
  256.   P²idejPoloºku(Okno1,"Zp╪t");
  257.  
  258. Poznámka: V p²ípad╪, ºe chceme mít v poloºce text delτí neº 12 znakà musíme
  259. zm╪nit hodnotu Seznamy[Okno1].µí²ka ( v bodech, màºe b∞t aplikováno i na v∞b╪ry
  260. a menu).
  261.  
  262. A místo 2. NULL v definifi Okna1 napíτeme Okno1PopUp. T╪╘ ovτem musíme vytvo²it
  263. dalτí funkci Okno1PopUp. Do té napíτeme toto:
  264.  
  265.   if(Seznamy[Okno1].V∞b╪r==0) Objekty[Okno1].Text="Zm╪na";
  266.   else if(Seznamy[Okno1].V∞b╪r==1) Objekty[Okno1].Text="Program1";
  267.   Obnovit=1;
  268.  
  269. K parameràm jakéhokoliv objektu se dostaneme takto: Objekty[ID].parametr
  270. (viz 1.0 Θvod). Kdyº zm╪níme n╪ak∞ viditeln∞ parametr (ve v╪tτin╪ p²ípadà), tak
  271. za poslední zm╪nu napíτeme Obnovit=1. Tím zajistíme p²ekreslení.
  272.  
  273. Seznamy[Okno1].V∞b╪r obsahuje ƒíslo vybrané poloºky.
  274.  
  275. PopUp menu vyvoláme tak, ºe stiskneme pravé tlaƒítko  myτi a drºíme ho dokud si
  276. nevybereme poloºku.
  277.  
  278. Podobn∞m zbàsobem pracujeme také s v∞b╪rem a s menu, jen  je místo prom╪nné
  279. Seznamy prom╪nná MenuVybSeznamy.
  280.  
  281.   MenuVybSeznamy[Vyb1].V∞b╪r
  282.  
  283. 3.3 Dialog
  284.  
  285. Existuje jeτt╪ jedna moºnost práce s událostmi, u které ovτem nelze pouºívat
  286. PopUp menu. Funkce Události() vrací ID objektu, u kterého prob╪hla jeho primární
  287. událost. To znamená, ºe v p²ípad╪ ºe uºivatel spustí PopUp menu vrací funkce -1.
  288. Jednouduch∞ dialog v jedné funkci:
  289.  
  290.   int DialogOkno,DialogTlAno,DialogTlNe,DialogText,udalost;
  291.  
  292.   DialogOkno=Okno(220,210,200,70,"Varování",NULL,NULL);
  293.   DialogText=Text(6,25,DialogOkno,NULL,NULL);
  294.   DialogTlNe=Tlaƒítko(10,40,60,25,0,DialogOkno,"Ne",NULL,NULL);
  295.   DialogTlAno=Tlaƒítko(130,40,60,25,0,DialogOkno,"Ano",NULL,NULL);
  296.  
  297.   while(udalost!=DialogTlNe && udalost!=DialogTlAno) {
  298.    udalost=Události();
  299.   }
  300.  
  301.   if (udalost==DialogTlNe) {
  302.     Tón(100);
  303.     ¼ekej(1000);
  304.     VypniTón();
  305.   }
  306.   else if (udalost==DialogTlAno) {
  307.     Tón(1000);
  308.     ¼ekej(2000);
  309.     VypniTón();
  310.     ZniƒOkno(DialogOkno);
  311.   }
  312.  
  313.  
  314. Dàleºitá upuzorn╪ní a omezení 4.0
  315. --------------------------------------------------------------------------------
  316.  
  317. Prom╪nné a konstanty ID"xyz" a Start"xyz" v globálních definicích m╪níme pouze
  318. tehdy, chceme-li SOU¼ASN╖ zobrazit více objektà jednoho druhu neº je rozdíl
  319. konstanty Start"xyz" a Start"dalτíobjekt". Také musíme zm╪nit max. index v
  320. definici pole Objekty. Chceme-li zm╪nit nap². poƒet p²epínaƒà musíme postupn╪
  321. zmenit nastavení i dalτích kostant.
  322.  
  323.  
  324. Práce s VDev 5.0
  325. --------------------------------------------------------------------------------
  326.  
  327. VDev je nástroj pro visuální vytvá²ení grafického prost²edí. Pro vytvo²ení
  328. objektu stiskneme v oblasti okna pravé tlaƒítko myτi a vybereme poloºku
  329. "Nov∞ objekt". Nyní zvolíme druh objektu a stiskneme tlaƒítko Ok. P²esuneme nov╪
  330. vzniklé tlaƒítko na místo, které chceme. Nyní na n╪j màºeme kliknout prav∞m
  331. tlaƒítkem myτi a zvolit "Vlastnosti". Objeví se okno se vτemi dostupn∞mi
  332. vlastnostmi tlaƒítka. Takto postupujeme u kaºdého objektu dokud nevytvo²íme
  333. cht╪né okno. Pak muºeme zvolit v PopUp menu okna poloºku "Vygenerovat". Zadáme
  334. jméno souboru klikneme na Ok. V SGP Editoru potom tento soubor otev²eme a
  335. zkopírujeme jeho obsah na zvolené místo, pop²ípad╪ zkopírujeme prom╪nné do
  336. globálních prom╪nn∞ch.
  337.  
  338.  
  339. Záv╪r 6.0
  340. --------------------------------------------------------------------------------
  341.  
  342. Program jsem nejd²íve programoval v SGP Baltazarovi, ale m╪l jsem jin∞ zpàsob
  343. uloºení vlastností objektà a záhy jsem zjistil, ºe tento zpàsob je nepouºiteln∞.
  344. Program m╪l b∞t uveden uº na sout╪º BB 2001. Potom jsem ho zaƒal programovat v
  345. Pascalu jiº se zde pouºit∞m zpàsobem ukládání vlastností. Tento program stále
  346. vyvíjím, ale musím ²íct ºe verze pro Baltazara je PODSTATN╖ dokonalejτí.
  347. O letních prázdninách 2002 jsem zaƒal programovat verzi pro Baltazara a v∞sledek
  348. práce se dostavil na konci prázdnin. 
  349.  
  350. Máte-li jakékoli p²ipomínky nebo nové nápady màºete je posílat na e-mail:
  351. marek.brysa@post.cz
  352. Pokud budete màj program modifikovat, poτlete mi ho prosím na e-mail.
  353.