Programování řídících dialogů

 

 

Význam a použití řídicích dialogů

Řídící dialogy dávají možnost uživateli zasahovat do průběhu výpočtu. V přeneseném slova smyslu domlouvat se s počítačem o způsobu pokračování výpočtu. Umožňují kombinovat rychlost výpočtu a kapacitu paměti počítače s rozhodovací schopností člověka, při které se využívá, kromě znalostí též zkušenost a intuice. Řídící dialogy jsou neodmyslitelnou složkou modelování. Mezi řídící dialogy lze rozdělit na dva druhy. Výběrové a nastavovací.

Do první skupiny patří takové dialogy, které z řady možností dovolují (v jednom rozhodování) vybrat pouze jedinou možnost. Mezi tento druh patří též rozhodování alternativní. Význačnou vlastností je, že stačí jediné paměťové místo (například proměnná, položka nebo prvek pole) pro zapamatování rozhodnutí. (Například, rozhoduje-li se z konečného počtu možností, pak v nějaké proměnné se může pamatovat číslo nabídky.) Patří sem různé formy seznamů, tlačítkové spínače, překrývaná okna a citlivá pole.

Druhá skupina je náročnější na paměťová místa i na algoritmus vlastního rozhodování. Potřebuje tolik paměťových míst kolik je nabídek (možností rozhodování). Často jde o rozhodování alternativní. Tuto skupinu reprezentují řídící a výběrová pole.

Terminologie řídících dialogů v současné době pouze vzniká, není sjednocená. Proto jsou v závorkách uvedeny pojmy používané v zahraniční literatuře.

Seznamy

Seznamy jsou tvořeny vodorovně, nejčastěji však svisle uspořádanými nabídkami (Američané říkají prompt = nápověď nebo option = možnost volby). Volba se provádí navedením širokého kurzoru (bar = kláda) na vhodnou nabídku směrovými klávesami nebo myší. Vlastní výběr se programuje na stisk klávesy ENTER a na jednoduché stisknutí tlačítka myši. Samozřejmá je již kombinace vyhledání a okamžitého výběru nabídky po zmáčknutí klávesy, odpovídající prvnímu nebo zvýrazněnému znaku (písmenu) nabídky.

Seznam může počtem nabídek překročit rozsah okna, ve kterém je zobrazen. Zvláště nutno s touto eventualitou počítat při programování předem nedefinovatelných seznamů (například seznam je tvořen položkami souboru, prvky paměťového pole, atd.). Tyto nelze předem napsat do programu jako klasický seznam ( posloupnost prvků, oddělených čárkami). Převyšuje-li počet nabídek rozměr okna, pak nutno programovat dvojí pohyb (pohyb okna nad seznamem (rolování) a pohyb širokého kurzoru v rámci okna. Obojí se ovládá směrovými klávesami, ke kterým přistupují klávesy stránkové (PgDn,PgUp), posouvávající seznam o velikost okna. Profesionálně programované seznamy mají po pravé straně umístěno polohové měřítko (scroll bar), informující o velikosti a poloze zobrazené části vůči seznamu jako celku. Měřítka lze použít pro rychlý přesun v rámci seznamu. Počet prvků seznamu by neměl být větší než několik tisíc. V náročnějších případech je vhodné seznamy rozčlenit a stránkovat (problémy s pamětí počítače).

Nutno pamatovat na možnost vyskočení z okna seznamu klávesou Esc. Při programování se ukládá do proměnné volby pro tuto klávesu standardní (default) hodnota nebo hodnota předchozího výběru (dříve se přisuzovala prázdní hodnota). Jinak se do proměnné volby ukládá v jednoduchých případech pořadové číslo nabídky nebo, ve složitějších případech, přímo vybraný prompt (nemusí být úplný). Této taktiky se použije zvláště při výběru záznamu z databázového souboru, kde vybraná nabídka se použije jako klíč vyhledání. Málokdy se do proměnné volby ukládá přímo ukazatel na záznam (náročnější na paměť).

Překrývaná okna

Překrývané okno (v angličtině popup = objevit se znenadání) je zvláštním typem seznamu, který nutno programovat tam, kde není místa pro trvalé umístění celého okna seznamu. Pak se místo okna zobrazuje pravoúhelník, obsahující standardní (default) nebo naposledy vybranou hodnotu. Konvence vyžaduje zdvojení pravé a spodní hrany pravoúhelníku.

Při výběru překrývaného okna se toto musí rozevřít do seznamu pomocí klávesy ENTER. Rozevřené okno , dokud není ukončen výběr. Jinak je ovládání stejné jako u seznamu.

 

 

Tlačítka

Tlačítko (anglicky push button = tlačítkový knoflík) je v podstatě spínačem činnosti zapsané v ostrých závorkách. Tlačítko aktivuje činnost po zmáčknutí levého tlačítka myši nebo klávesy Enter. Zvláštní postavení má tlačítko vyznačené dvojitými ostrými závorkami. Například « OK » . Takové tlačítko je v dialogu pouze jediné. Aktivuje hlavní činnost. Lze ho přepnout, v libovolném okamžiku, klávesami CTRL+ENTER.

 

 

Citlivé oblasti

Citlivá oblast (Američané říkají invisible buttons = neviditelné knoflíky) jsou pravoúhlé oblasti obrazovky nebo okna, které jsou sensitivní na stisk myši nebo klávesu ENTER. Proměnná volby získává hodnotu pořadí oblasti. Oblasti se v praxi vhodně podmalovávají nebo vyznačují textem. Oblast může být zmenšena do velikosti bodu. Často se citlivých oblastí používá v technice ikon.

 

 

Výběrová pole

Výběrové pole (v originálu radio buttons = radiové knoflíky) je seskupení alternativních nabídek, které se navzájem vylučují. Výběrové pole umožňuje nastavení pouze jediné možnosti. Volba se zaznamená (nebo zruší) zmáčknutím levého tlačítka myši nebo klávesou ENTER v prostoru vymezeného kulatými závorkami. Tvar připomíná rádiové knoflíky (tlačítkové), které stlačením vypnou (vytlačí) všechny zbylé. Pro každou nabídku nutno vyčlenit zvláštní paměťový prostor. Nejčastěji se používají logické proměnné.

 

 

Řídící pole

Řídící pole (ve firemní literatuře check box = kontrolní krabička) je seskupení alternativních nabídek, které se navzájem nevylučují. Řídící pole umožňuje nastavení více možností najednou. Nastavení se zaznamená (nebo zruší) zmáčknutím levého tlačítka myši nebo klávesou Enter v prostoru vymezeného hranatými závorkami. Samotné nastavení často vede na upřesňující (pomocný) dialog.

Programování řídících dialogů

Přes značnou složitost a vnější odlišnost řídících dialogů, lze je poměrně snadno programovat běžným příkazem pro vstup hodnot, který se aktivuje příkazem READ. Odlišnosti jsou pouze v parametrech jednotlivých klauzulí. Obecná definice zní:

 

GET <výběrová proměnná> | <položka>|<prvek pole>

FROM <název pole> [RANGE <počáteční index> [, <počet prvků>]] |

POPUP <jméno definice popup menu>

   [FUNCTION <řetězec funkce>] | [PICTURE <řetězec obrazu hodnoty]

   [DEFAULT <počáteční hodnota výběrové proměnné>]

   [SIZE [<svislý rozměr>], [<vodorovný rozměr>],[<mezery>]

   [ENABLE | DISABLE]

   [MESSAGE <vysvětlující text nabídky>]

   [VALID < řídící logický výraz>]

   [WHEN <podmínka provedení>]

   [COLOR SCHEME <číslo schémy> | COLOR <seznam dvojic barev>]

Vysvětlivky

a) řetězec funkce klauzule FUNCTION je tvořen znakem (kódem) podle níže uvedené tabulky. Za ním může následovat znak kvalifikátoru.

 

   T Y P        KÓD     KVALIFIKÁTOR     SPECIÁLNÍ ZNAKY  
                                                          
   Seznamy       &      N | T               N/A            
 
   Překrývaná    ^      N | T               \< | \\        
   okna                                                   
 
   Tlačítka      *      N | T | H | V       \< | \\        
                                            \! | |?        
 
   Citlivé       *I     N | T | H | V       \\             
   oblasti                                                
 
   Výběrová      *R     N | T | H | V       \< | \\        
   pole                                                   
 
   Řídící        *C     N | T               \< | \\        
   pole                                                   

 

 

      Kvalifikátor       činnost příkazu read po výběru      
  ------------------------------------------------------------
           T             je ukončen                          
           N             je povolen další výběr (standard)   
           V             vertikální uspořádání nabídek       
           H             horizontální uspořádání nabídek     

 

 

                                                             
   Speciální znaky    │význam pro nabídku (kde jsou umístěny)│ 
  ------------------------------------------------------------
                                                             
            \<          znak uvedený za touto kombinací      
                        umožní okamžitou volbu přísluš-      
                        né nabídky ( znak je zvýrazněn)      
                                                             
                                                             
            \\          nabídka bude nedostupná              
                                                             
                                                             
            \!          tlačítko bude aktivováno klávesami   
                        CTRL+ENTER nebo CTRL+W               
                                                             
                                                             
            \?          tlačítko bude aktivováno klávesou    
                        ESC                                  
                                                             

 

b) Řídící logický výraz klauzule VALID se programuje jako uživatelská funkce (UDF), vracející logickou hodnotu (velice často konstantu true). Do funkce se zařazují nejrůznější další akce. Například přemístění kurzoru na jiný objekt GET, zpřístupnění či znepřístupnění objektů, ukončení aktuálního READ příkazem CLEAR READ a jiné.

c) Podmínka provedení klauzule WHEN povolí nebo zabrání přemístění kurzoru na daný dialog. Pokud následuje v pořadí další objekt GET, kurzor se přemístí na něj.

d) Klauzule DISABLE | ENABLE umožňují ovládat přístup k dialogu. Fráze DISABLE ponechá zobrazení ovladače (ev. celé sady ovladačů) s barevným odlišením, ale znemožní jejich výběr (aktivaci). Pozdější zpřístupnění možno provést příkazem SHOW GETS ENABLED. (Znepřístupnění jednotlivých nabídek ze sady nebo prvků lze ovládat též znaky \\ v nabídce.)

e) U klauzule SIZE se první parametr obvykle ignoruje a nahrazuje se hodnotou 1 (řádek). Výjimku činí seznam a citlivé pole. Druhý parametr (šířka) se respektuje pouze když je větší než šířka textu nabídky.

f) Jsou-li pochybnosti o funkci jednotlivých klauzulí, platí zásada, že pokud je klauzule nebo její parametry logické a v souladu s fungováním dialogu, pak je možné je použít v kontextu s tímto fungováním. V opačném případě se ignorují.

g) Klauzule MESSAGE zobrazí následující text na posledním řádku obrozovky (jako vysvětlující zprávu).

 

 

Cvičení

Seznamy

Příklad zobrazí seznam, který je vytvořen ze souboru EVID_VOZ pomocí pole. Umožní výběr i pohyb okna jak klávesami tak myší. Zobrazí vybraný klíč, který lze použít v vzhledání záznamu.

 

nazev =  'PŘÍKLAD PROGRAMOVÁNÍ SEZNAMU'           && Název úlohy

DO pr206_z WITH nazev                                                      && Záhlaví úlohy

PUBLIC vozidla[300,1]                    && Výběr bude prováděn podle dvourozměrného pole !

&& ( jinak nebude fungovat )

vozidla=' '                                          && Definování prvků "jednorozměrné matice"

SELECT 0                                          && Výběr první volné pracovní oblasti

USE evid_voz ORDER TAG oznaceni           && Otevření souboru,

&& který bude použit pro tvorbu seznamu

COPY ALL TO ARRAY vozidla  FIELD oznaceni ;

FOR !EMPTY(oznaceni)                    && Načtení všech neprázdných záznamů

A=ASCAN(vozidla,' ')-1                    && Vyhledání indexu prvního prázdného prvku matice,

&& který nutno zmenšit o jedničku

vyber='              '                                && Počáteční hodnota výběrové proměnné

rada = "Výběr provádět pomocí klávesy  ENTER nebo mezera "

@ 3,8 GET vyber FROM vozidla FUNCTION '&N';

SIZE 10,13 ;

RANGE 1,A ;

COLOR W/N,N/W,W+/GR,,W/G,W+/W

READ

DO vypis

RELEASE vozidla                              && Vymazání pole vozidla z paměti

CLOSE DATA                                    && Uzavření souboru

DO pr206_y                                       && Závěr programu

 

PROCE vypis

@ 17,1 CLEAR TO 23,40

@ 18,2 SAY  'Zobrazení  vybrané hodnoty'

@ 21,2 SAY  'výběr=     '+vyber                   && V této proměnné bude vybraný klíč

&&   pro vyhledání záznamu !

@ 22,2 SAY  'pocet prvků= '+STR(A,3)

RETURN

 

 

Překrývaná okna

Program zobrazí překrývané okno, umožní výběr myší nebo klávesou ENTER a zobrazí volbu

 

nazev =    'PŘÍKLAD PROGRAMOVÁNÍ PŘEKRÝVANĚHO OKNA'

DO pr206_z WITH nazev                   && Záhlaví úlohy

vyber='41.msp'                                  && Počáteční hodnota výběrové proměnné

 

* Zobrazení překrývaného okna

 

rada = "Výběr provádět pomocí klávesy  ENTER nebo mezera "

@ 7,18 GET  vyber FUNCTION '^ 41.msp;42.msp;12.rb;34.tpr' ;

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE rada ;

SIZE 0,15,2

 

* Řízení výběru

 

READ

 

* Zobrazení výsledků;

 

@ 13,1 SAY  'Zobrazení  vybrané hodnoty'

@ 15,1 SAY  'výběr= '+vyber

DO pr206_y                                       && Závěr programu

 

 

Tlačítka

Program zobrazí dvě tlačítka a umožní jejich cyklickou volbu

 

nazev =    'PŘÍKLAD PROGRAMOVÁNÍ TLAČÍTEK'

DO pr206_z WITH nazev                              && Záhlaví úlohy

vyber='OK'                                                    && Počáteční hodnota výběrové proměnné

rada = "Výběr provádět pomocí klávesy  ENTER nebo mezera "

 

* Zobrazení tlačítek < ...... >

 

@ 5,5 GET vyber FUNCTION '*     OK;CANCEL';

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE rada ;

SIZE 0,10,1

 

* Řízení výběru tlačítka (cyklicky, konec ESC)

 

READ CYCLE

 

* Zobrazení výsledků výběru

 

@ 13,1 SAY  'Zobrazení  vybrané hodnoty'

@ 15,1 SAY  'výběr= '+vyber

DO pr206_y                                                   && Závěr programu

 

 

Citlivé oblasti

Program nakreslí pozadí ve tvaru čtyř karet. Zobrazí, podle pozadí, vybranou oblast.

 

nazev =     'PŘÍKLAD PROGRAMOVÁNÍ CITLIVÉ OBLASTI'

DO pr206_z WITH nazev                   && Záhlaví úlohy

&& Podbarvení citlivých oblastí

@ 5,4,8,7 BOX                                   && Orámování citlivých oblastí

@ 5,9,8,12 BOX

@ 5,14,8,17 BOX

@ 5,19,8,22 BOX

@ 6, 5 SAY REPLICATE (CHR(3),2)            &&  znaky  "HERCE"

@ 7, 5 SAY REPLICATE (CHR(3),2)            &&  znaky  "HERCE"

@ 6,10 SAY REPLICATE (CHR(4),2)           &&  znaky  "KÁRY"

@ 7,10 SAY REPLICATE (CHR(4),2)           &&  znaky  "KÁRY"

@ 6,15 SAY REPLICATE (CHR(6),2)           &&  znaky  "PIKY"

@ 7,15 SAY REPLICATE (CHR(6),2)           &&  znaky  "PIKY"

@ 6,20 SAY REPLICATE (CHR(5),2)           &&  znaky  "KŘÍŽE"

@ 7,20 SAY REPLICATE (CHR(5),2)           &&  znaky  "KŘÍŽE"

volba=0

@ 5,4 GET volba FUNCTION "*IH ;;;" SIZE 4,4,1;                     && Vymezení citlivých oblastí

VALID (obrkart()) MESSAGE;

"VYTÁHNETE LIBOVOLNOU KARTU, KONEC KLÁVESOU ESC"

READ CYCLE                        &&    Řízení výběru (včetně myši), konec ESC

DO pr206_y                           &&    Závěr programu

 

PROCEDURE obrkart                      &&    Zobrezení výběru, použito v klausuli VALID

@ 16,1

DO CASE

CASE volba=1

@ 16,1 SAY "HERCE"

CASE volba=2

@ 16,1 SAY "KÁRY"

CASE volba=3

@ 16,1 SAY "PIKY"

СASE volba=4

@ 16,1 SAY "KŘÍŽE"

ENDCASE

RETURN .T.

Výběrová  pole

Příklad zobrazí výběrové pole, umožní cyklický výběr a zobrazí volbu

 

nazev = 'PŘÍKLAD PROGRAMOVÁNÍ VÝBĚROVÉHO POLE'

DO pr206_z WITH nazev                   && Záhlaví úlohy

vyber='Následující'                            && Počáteční hodnota výběrové proměnné

rada = "Výběr provádět pomocí klávesy  ENTER nebo mezera "

&& Definování radiových knoflíků (o)

@ 5,5 GET vyber FUNCTION '*RNV     \<První;Pře\<dchozí;\<Následující;P\<oslední ';

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE rada ;

SIZE 1,22,0 ;

VALID provedeni()

&& Vlastní provedení výběru (cyklicky, konec ESC)

READ CYCLE

DO pr206_y                                       && Závěr úlohy

 

FUNCTION provedeni                      && Zobrazení výsledků výběru

@ 15,1

@ 13,1 SAY  'Zobrazení  vybrané hodnoty'

@ 15,1 SAY  'výběr= '+vyber

RETURN .T.

 

 

Řídící pole

Program nabídne pět možností, každou z nich lze zvolit. Volba probíhá cyklicky

 

nazev = 'PŘÍKLAD PROGRAMOVÁNÍ ŘÍDÍCÍHO POLE'

DO pr206_z WITH nazev                   && Záhlaví úlohy

archivace=1                                      && Počáteční hodnoty řídících proměnných,

kontrola=1                                        && kromě čísel ve významu 0=.t. !0=.F. lze

vypis=0                                              && použít přímo logických konstant.

protokol=0

rada = "Výběr provádět pomocí klávesy  ENTER nebo mezera"

&& Zobrazení řídícího pole [X]

@ 5,5 GET archivace FUNCTION '*C \<Archivace   ';

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE rada

@ 6,5 GET kontrola  FUNCTION '*C \<Kontrola    ';

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE rada

@ 7,5 GET vypis     FUNCTION '*C \<Výpis obsahu';

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE rada

@ 8,5 GET protokol  FUNCTION '*C \<Protokol    ';

COLOR ,,,,,W+/N,N/W,W/N,N/W ;

MESSAGE 'Konec klávesou ESC'

READ CYCLE                                    && Provedení výběru (cyklicky, konec ESC)

&& Zobrazení navolených hodnot

@ 13,1 SAY  'Zobrazení  požadovaných  hodnot'

@ 15,1 SAY  'archivace= '+STR(archivace ,3)

@ 16,1 SAY  'kontrola=  '+STR(kontrola ,3)

@ 17,1 SAY  'vypis=     '+STR(vypis ,3)

@ 18,1 SAY  'protokol=  '+STR(protokol ,3)

&& Závěr programu

Pomocné procedury

Procedury, které  zahajují a ukončují výše uvedené příklady

 

PARAMETERS nazev

PUBLIC s                                                      && Proměnná s předává hodno jiné

&& proceduře, na stejné úrovni

s=SYS(2001,"COLOR")                                && Úschova palety barev

SET COLOR TO W+/B

CLEAR                                                          && Výmaz obrazovky

SET TALK OFF                                            && Potlačení zobrazování mezivýsledků

@1,4 SAY "  "+nazev+"  "                           && Název úlohy

@0,3 TO 2,LEN(nazev)+4+3  DOUBLE      && Rámeček

SET COLOR TO W/N                        && Barvy pro výběrové pole

@4,3,11,LEN(nazev)+4+3  BOX 'ÇÇÇÇÇÇÇÇÇ'  && Vymezení výběrového pole

SET TALK OFF                                            && Potlačení zobrazování mezivýsledků

 

WAIT "Konec  - lib.   klávesa" WINDOW     && Čekání  na zásah uživatele

SET COLOR TO &s                                       && Obnovení barev ( viz PR206_z)

CLEAR ALL                                                  && Výmaz paměti, uzavžení všech souborů

CLEAR                                                          && Výmaz obrazovky