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   
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.