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