GUI - Graphical User Interface Grafické Uživatelské Prostředí

Obsah:

Úvod

Podrobný popis funkcí
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

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

Ú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;).

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.

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.