Programování oken
DEFINE WINDOW <okno1>
FROM <řd1>, <sl1> TO
<řd2>, <sl2>
[IN [WINDOW] <okno2> | IN
SCREEN]
[TITLE <expC1>] [FOOTER
<expC2>]
[DOUBLE | PANEL | NONE | SYSTEM |
<definice rámečku>]
[CLOSE | NOCLOSE] [FLOAT | NOFLOAT]
[GROW | NOGROW] [ZOOM | NOZOOM]
[SHADOW]
[MINIMIZE]
[FILL <expC3>]
[COLOR <seznam dvojic barev> |
COLOR SCHEME <expN>]
Vytvoří okno (připraví,
ale nezobrazí ani neaktivuje). <okno1>
jméno vytvářeného okna (max 10 znaků).
ACTIVATE WINDOW <okno> | <seznam oken> | ALL
[IN [WINDOW] <oknoN> | SCREEN]
[BOTTOM | TOP | SAME] [NOSHOW]
Zobrazí a aktivuje okno. Lze
otevřít okno nebo okna vyjmenovaná v seznamu nebo všechna již definovaná
okna (frází ALL). Do naposledy jmenovaného okna je směrován výstup. Je-li
současně zobrazeno více oken, výstupní okno se umístí do nejvrchnější
vrstvy (žádné jiné je nepřekrývá). Umístění oken ve vrstvách mění
fráze BOTTOM či SAME. Aktivace s NOSHOW okno nezobrazí, ale případný výstup
se do něj zapisuje normálně.
ACTIVATE WINDOW vyst_okno
DEACTIVATE WINDOW <okno> | <seznam oken> |
ALL
Deaktivuje okno (okna) a
odstraní je z obrazovky. Deaktivuje-li se aktuální výstupní okno, přechází
tato vlastnost na nejblíže před ním aktivované okno, které je
dosud aktivní. Není-li takové, výstup je směrován na obrazovku.
Deaktivované okno (okna) je možné opětně aktivovat.
DEACTIVATE WINDOW vyst_okno
<řd1>, <sl1>
souřadnice levého horního rohu okna.
<řd2>, <sl2>
souřadnice pravého dolního rohu okna relativně k obrazovce nebo nadřazenému
oknu.
TITLE <expC1>
text v horní hraně okna.
FOOTER <expC2>
text ve spodní hraně okna.
DOUBLE | ...
zadání rámečku okna (implicitně jednoduchá čára). Při uvedení
SYSTEM a současném CLOSE, FLOAT, GROW,
ZOOM se vytváří okno s
vlastnostmi systémového okna.
CLOSE
povolí uzavření okna interaktivně (implicitně NOCLOSE).
FLOAT, GROW
povolí posun či změny rozměrů okna (implicitně NOFLOAT, NOGROW).
ZOOM okno lze zvětšovat na
celou plochu obrazovky (implicitně NOZOOM).
SHADOW
okno bude zobrazeno se stínem (implicitně bez něj).
MINIMIZE
okno lze zmenšovat na minimální rozměr (např ^F9).
FILL <expC3>
znak pro vyplnění okna (implicitně mezera).
DEFINE WINDOW okno_2 FROM 5,1 TO 12,45 TITLE
"druhé okno" DOUBLE GROW
FLOAT
HIDE WINDOW [<okno> | <seznam oken>] | ALL
[IN [WINDOW] <oknoN> | SCREEN]
[SAVE]
Odstraní okno z obrazovky.
Odstraní okno nebo vyjmenovaná okna nebo všechna okna z obrazovky. Znamená
to pouze zneviditelnění oken, jinak lze s nimi dále běžně pracovat. Opětovné
zviditelnění příkazy SHOW a ACTIVATE. Fráze SAVE ponechá obraz odstraněného
okna pasivně na obrazovce (pokud nejde o okno výstupní). Fráze IN WINDOW
skrytě přemisťuje <okno> do okna <oknoN>.
HIDE WINDOW vyst_okno
MOVE WINDOW <okno> TO <řd>, <sl> | BY
<expN1>, <expN2>
Posune okno buď na zadanou
pozici nebo relativně. <řd>,<sl>
nové absolutní souřadnice levého horního rohu okna.
<expN1>,<expN2> počet
řádků a sloupců, o které se okno posune. Posunované okno nemusí být ani
aktivní, ani zobrazené.
MOVE WINDOW vyst_okno BY 5,-3
RESTORE WINDOW <seznam oken> | ALL
FROM <soubor> | FROM MEMO
<memo položka>
Vyzvedne uschovaná okna ze
souboru nebo memo položky. Vyzvednutím se obnoví definice oken i jejich
status v době uschování (případně se přepíší stávající).
RESTORE WINDOW vyst_okno FROM ul_okno
SAVE WINDOW <seznam oken> | ALL
TO <soubor> | TO MEMO <memo
položka>
Uschová definici okna do
souboru nebo memo položky. Uschová definici okna (oken) včetně současného
statutu okna (např "aktivní"). Okno zůstává v paměti, jeho stav
se nemění. Opětovné vyzvednutí se provede příkazem RESTORE WINDOW.
<soubor> má implicitně příponu WIN.
SAVE WINDOW vyst_okno TO ul_okno
SCROLL <řd1,sl1>, <řd2,sl2>, <expN1>
[, <expN2>]
Posun uvnitř zadané části
obrazovky nebo okna. V oblasti zadané souřadnicemi levého horního rohu
<řd1,sl1> a pravého dolního rohu <řd2,sl2> lze zadat
posun o <expN1> řádků dolů nebo nahoru
(kladná nebo záporná hodnota, ev. 0) a o <expN2> sloupců vpravo
nebo vlevo (kladná nebo záporná
hodnota, ev. 0).
SCROLL 0,0, 10,60, -3,1
SET BORDER TO [SINGLE | DOUBLE | PANEL | NONE |
<definice
rámečku1> [, <definice rámečku2>]]
Definuje tvar rámečku pro
obdélníkový prostor (box), okna,. menu a popup. SINGLE - jednoduchá čára
DOUBLE - zdvojená čára PANEL – zvýraznění NONE - bez ohraničení. Pomocí
<definice rámečku> lze nadefinovat vlastní tvar rámečku. Uvedeme jím
seznam jednoho až osmi znaků, postupně pro horní, dolní, levou, pravou
hranu, levý, pravý horní, levý, pravý dolní roh. Uvedeme-li pouze jeden
znak, platí pro celý rámeček. uvedeme-li 2 až 7 znaků, nespecifikované
zachovají implicitní nastavení. Pro menu, popup a box se uplatní pouze
<definice rámečku1>. Pro okna lze zadat <definice rámečku1> rovněž,
uvedeme-li ale navíc i <definice rámečku2>, pak první platí pro okno
když je právě aktuální výstupní, druhý pro ostatní stavy okna. Jinak
lze rámeček objektu změnit (po změně nastavení SET BORDER) pouze opětovným
definováním objektu. SET BORDER TO bez parametrů vrátí nastavení na
implicitní stav. Před náročnějším použitím doporučujeme funkce příkazu
dobře prověřit.
SET BORDER TO
'.','.','.','.','.','.','.','.','.','#','#','#','#'
SET CURSOR ON | OFF
Zapíná nebo vypíná
zobrazení kurzoru. Uplatní se v souvislosti s GET, INKEY() a WAIT. Implicitní
nastavení ON.
SET SHADOWS ON | OFF
Řídí použití stínů u
objektů, které je mohou použít (okna, dialogy a pod.)
SHOW WINDOW <okno> | <seznam oken> | ALL
[IN [WINDOW] <oknoN> | SCREEN]
[REFRESH] [TOP | BOTTOM | SAME]
[SAVE]
Zobrazí (neaktivuje) okno na
obrazovce. Okno, které nebylo aktivované, se zobrazí aniž by se aktivovalo.
Skryté aktivní okno ("hidden") se opět zobrazí. Pořadí (umístění
ve vrstvách) zobrazených oken lze ovlivnit frázemi TOP, BOTTOM, SAME (a to i
pro již zobrazená okna). REFRESH ve spojitosti s oknem Browse jej znovu obnoví.
SHOW WINDOW vyst_okno
Funkce je použitelná pouze
ve výrazu u fráze SHOW příkazu READ.
Vrací jméno okna použitého
v posledním příkazu SHOW GETS.
WINDOW.
WBORDER([<okno>])
Zjišťuje, zda okno má rámeček.
Pro zadané jméno okna (implicitně aktuální výstupní okno) vrací .T. když
okno má rámeček (.F. viz fráze NONE v DEFINE WINDOW).
? WBORDER("vyst_okno")
WCHILD([<okno>] | [<expN1>] | [<okno> ,
<expN2>])
Zjišťuje podřízená (spřažená)
okna. <okno> Jméno okna, implicitně aktuální výstupní okno (není-li
právě žádné, pak obrazovka). Při
tomto způsobu zadání vrací funkce počet podřízených oken. <expN1>
Pro <expN1>=0 vrací jméno okna podřízeného k aktuálnímu výstupnímu
oknu. Pro <expN1>#0 vrací jméno dalšího podřízeného okna, opětovné
vyvolání funkce jméno dalšího v pořadí (není-li již, pak prázdný
řetězec). <okno>,<expN2>
Vrací jméno okna podřízeného k zadanému oknu. Hodnota <expN2>
je použita ve stejném významu jako <expN1>.
? WCHILD ("vyst_okno",0)
WCOLS([<okno>])
Vrací počet sloupců okna
nebo obrazovky. Týká se buď zadaného okna nebo není-li parametr uveden, pak
aktuálního výstupního okna ( není-li právě žádné, pak obrazovky). Zadáme-li
prázdný řetězec, označíme tak vždy obrazovku.
? WCOLS("vyst_okno")
WEXIST(<okno>)
Vrací .T., jestliže zadané
okno existuje (tj. bylo-li. definováno) Je-li zadáno systémové okno, které
je uzavřeno, vrací .F. (výjimky okna Command a Debug).
WLAST([<okno>])
Dotaz na předchozí aktuální
výstupní okno. Vrací .T., když zadané <okno> bylo výstupní před
aktuálním výstupním oknem. Jestliže <okno> není zadáno, pak vrací
jméno okna, které bylo výstupní před aktuálním výstupním oknem.
? WLAST()
WLCOL([<okno>])
Zjistí pozici levé hrany
okna. Pro zadané okno (implicitně aktuální výstupní okno) vrací číslo
sloupce (vzhledem k obrazovce) levé hrany okna. Nebylo-li okno zadáno a žádné
není aktivní, vrací 0. Lze použít i pro systémová okna (nejsou-li zavřena).
?WLCOL("help")
WLROW([<okno>])
Zjistí pozici horní hrany
okna. Pro zadané okno (implicitně aktuální výstupní okno) vrací číslo
řádku (vzhledem k obrazovce) horní hrany okna. Nebylo-li okno zadáno a žádné
není aktivní, vrací 0. Lze použít i pro systémová okna (nejsou-li zavřena).
? WLROW()
WMAXIMUM([<okno>])
Zjišťuje, zda zadané okno
lze zvětšit na celou plochu. obrazovky Vrací .T., má-li okno vlastnost ZOOM,
která jej umožňuje zvětšit. Není-li tomu tak, nebo bylo-li zadáno jméno
neexistujícího okna, vrací .F. Při neuvedení parametru <okno> se
zkoumá aktuální výstupní okno.
WMINIMUM([<okno>])
Zjišťuje, zda zadané okno
lze minimalizovat. Vrací .T., má-li okno vlastnost MINIMIZE, která jej umožňuje
zmenšit na minimální rozměr. Není-li tomu tak, nebo bylo-li zadáno jméno
neexistujícího okna, vrací .F. Při neuvedení parametru <okno> se
zkoumá aktuální výstupní okno.
WONTOP([<okno>])
Zjišťuje okno ve vrchní
vrstvě (není překryto jiným). Vrací .T., když zadané okno je ve vrchní
vrstvě. Není-li okno zadáno, vrací jméno okna ve vrchní vrstvě.
IF .NOT. WONTOP('okno1')
ACTIVATE WINDOW okno1
WOUTPUT([<okno>])
Zjišťuje aktuální výstupní
okno. Vrací .T., když zadané okno je aktuálním výstupním oknem. Není-li
okno zadáno, vrací jméno aktuálního výstupního okna.
IF WOUTPUT('okno1')
WPARENT([<okno>])
Zjišťuje jméno nadřazeného
okna k zadanému oknu. K zadanému oknu (implicitně aktuálnímu výstupnímu
oknu) vrací jméno nadřazeného okna, pokud neexistuje, pak prázdný řetězec.
WREAD([<okno>])
Vrací .T., když je zadané
okno zúčastněno v aktuálním. příkaze READ Není-li <okno> uvedeno,
bere se aktuální výstupní okno. Nezúčastňuje-li se zadané okno v READ
nebo takové jméno okna neexistuje, vrací se .F. Za okno zúčastněné v aktuálním
příkaze READ se považuje to, v němž je
uplatněn příkaz @ ... GET, nebo okno uvedené ve frázi WITH u příkazu
READ.
WROWS([<okno>])
Vrací počet řádků okna
nebo obrazovky. Týká se buď zadaného okna, není-li parametr uveden, pak
aktuálního výstupního okna (není-li právě žádné, pak obrazovky). Zadáme-li
prázdný řetězec, označíme tak vždy obrazovku.
?WROW("vyst_okno")
WTITLE([<okno>])
Vrací titulek určeného
okna. Není-li zadáno jméno okna <okno>, vrací titulek okna ve
vrchní vrstvě (není překryto jiným).
WVISIBLE(<okno>)
Vrací .T., jestliže zadané
okno bylo aktivováno nebo. zobrazeno (SHOW) a není z obrazovky odstraněno
(HIDE)
ZOOM WINDOW <okno> MIN | MAX | NORM
[AT <řd1,sl1> | FROM <řd1,sl1>
[SIZE <řd2,sl2> | TO
<řd3,sl3>]]
Změní velikost zobrazeného
okna. <řd1,sl1> nové souřadnice
levého horního rohu okna. <řd2,sl2>
výška a šířka změněného okna. <řd3,sl3> nové souřadnice pravého dolního rohu okna. Minimalizuje
(MIN) nebo rozšiřuje na celou obrazovku (MAX) nebo vrací okno na původní
rozměr (NORM). Při minimalizaci lze zadat umístění (AT). Při použití fráze
NORM je možno zadat posunutí okna (AT) a současně změnu rozměru odvozenou
od polohy levého horního rohu (SIZE nebo TO).
ZOOM WINDOW vyst_okno MIN AT 23,0
ACTIVATE SCREEN
Směruje výstup na
obrazovku.
Běžné použití je přesměrování
výstupu z okna na obrazovku. Všechna okna, která byla v tomto okamžiku
zobrazena, na obrazovce zůstávají. Obrazovku pod nimi lze "odkrýt"
stlačením kombinace Ctrl+Shift+Alt.
Cvičení
Příklad
programování tabulkového
procesoru s použitím uživatelsky definovaných oken. Ukazuje jak v souboru
VYKON_VOZ(OZNACENI C(),KM
N(),NAKLAD N()) se v reálném čase vypočítávají tunokilonetry jsou uložené
státní poznávací znač Příklad využívá příkazu
Browse, který umísťuje do
okna VYKON. Tím mu předepisuje atributy okna,
Programování tabulkového
procesoru
N="Příklad programování tabulkového
procesoru"
&& Název úlohy
SET TALK OFF
&& Bez zobrazování mezivýsledků
CLEAR ALL
&& Úklid paměti a souborů
CLEAR
&& Výnaz obrazovky
p_cena ='9999999.99'
&& Obraz hodnoty cena
p_naklad='999999.9'
&& Obraz hodnoty náklad
p_km ='9999999'
&& Obraz hodnoty km
p_tkm ='999999999'
&& Obraz hodnoty tunokilometrů
@ 2,8 SAY N
&& Zbrazení názvu úlohy
cena=2.60
DEFINE WINDOW vykon FROM 4,8 TO 20,67;
COLOR SCHEME 8 DOUBLE
&& Okno pro tabulkový procesor
DEFINE WINDOW suma FROM 21,8 TO 23,67;
COLOR SCHEME 2 DOUBLE
&& Okno pro výsledky
USE vykon_voz ORDER TAG oznaceni && Otevření
souboru evidence výkonů
DO suma
&& Sumace a zobrazení výkonů
BROWSE TITLE "Výkony autoparku" WINDOW vykon;
FIELD
oznaceni:H='Vozidlo'
,;
km
:p=p_km:v=suma():H='Ujeté km'
,;
naklad
:p=p_naklad:v=suma():H='Váha nákladu'
,;
tkm =
km*naklad :p=p_tkm:H='TKM
****'
,;
cena =
km*naklad*cena :p=p_cena:H='Cena ****'
&&
Všimnene si klauzule v=suma()
DEACTIVATE WINDOW ALL
&& Ukončení úlohy, deaktivace oken
USE
&& Uzavření souborů
PROCEDURE suma
&& Procedura použita jako funkce
ACTIVATE WINDOW suma
&& Aktivace okna výsledků
rec=RECNO()
&& Zapamatování polohy ukazatele
SUM ALL km,naklad,km*naklad,km*naklad*cena;
&& Sumace položek
TO s_km, s_naklad, s_tkm,
s_cena
&& Zobrazení výsledků
@ 0,0 SAY
" c e l k e m"
@ 0,15 SAY s_km PICTURE p_km
@ 0,27 SAY s_naklad PICTURE p_naklad
@ 0,38 SAY s_tkm PICTURE p_km
@ 0,46 SAY s_cena PICTURE p_cena
GO rec
&& Poloha ukazatele na původní záznam
ACTIVATE WINDOW suma BOTTOM
RETURN .T.
&& Musí vracet pravdivostní hodnotu
Pseudonáhodné generovaní
miniaturních oken
CLEAR ALL
N=" Příklad
pseudonáhodného "+;
"generovaní miniaturních oken
"
cis_okna=0
&& Čítač generovaných oken
SET ESCAPE OFF
&& Klávesa ESC neukončí práci programu
SET TALK OFF
&& Nezobrazovat mezivýsledky
SET COLOR TO GR+/B
&& Základní barva písma a pozadí (žlutá na modré)
CLEAR
&& Výmaz obrazovky s barvou pozadí
roko=4
&& Řádek okna
soko=4
&& Sloupec okna
m_max=19
&& Maximální počeet generovaných mini oken
DECLARE ta[m_max,3]
&& Pole souradnic oken
@roko-2,soko+2 SAY N
&& Zobrazení názvu
@roko-3,soko TO roko-1,;
soko+LEN(N)+5 DOUBLE
&& Rámeček kolem názvu
DEFINE WINDOW oko FROM roko,soko TO ;
roko+20,soko+20*3 DOUBLE COLOR W+/N
&&
Definice pravoúhelníka, ve kterém se budou mini
ACTIVATE WINDOW oko
&& okna pohybovat, současně jeho aktivace
ba='brgw'
&& Seznam základních barev pro náhodné genetování
FOR i=1 TO m_max
&& Pro všechna mini okna
ta[i,1]=SUBSTR(ba,INT(MOD(RAND()*11
,3))+1,1) && Generuj náhodně barvu
ta[i,1]= ta[i,1]+SUBSTR(ba,;
INT(MOD(RAND()*11,3))+1,1)
&& Geenruj náhodný odstín
ta[i,2]=INT(MOD(RAND()*99 ,m_max))
&&
Generuj náhodný řádek mini
okna
ta[i,3]=INT(MOD(RAND()*99 ,m_max))*3
&&
Generuj náhodný sloupec mini okna
ENDFOR (i)
DO zobrazeni
&& Zobraz vypočtená okna
CLEAR TYPE
&& Výmaz náhodného znaku v bufferu klávesnice
DO WHILE !CHRSAW()
&& Ukončení bude zmáčnutím libovolné klávesy
FOR i=1 TO m_max
&& Pro všechna okna
ta[i,2]=ta[i,2]+INT(MOD(RAND()*11,3))-1
&&
Náhodná změna souradnic okna o jednu
ta[i,3]=ta[i,3]+INT(MOD(RAND()*11,3))-1
&&
pozici v libovolném směru, 0 = na místě
ENDFOR (i)
DO zobrazeni
&& Zobraz vypočtená okn
ENDDO (!CHRSAW())
&& Ukončení bude zmáčnutím libovolné klávesy
DEACTIVATE WINDOW ALL
&& Deaktivace oken
SET COLOR TO W/B
&& Původní barvy
CLEAR
&& Výmaz obrazovky
PROCE zobrazeni
&& Zobraz vypočtená okn
FOR i=1 TO m_max
&& Pro všechna okna
N='ok'+STRTRAN(STR(i,3),' ','0')
&& Generování jména okna mini okna "OKnnn"
DEACTIVATE WINDOW &n
&& Deativace okna
B='/'+ta[i,1]
&& Řetězec pro programování pozadí mini okna
DEFINE WINDOW &n FROM
ta[i,2],ta[i,3] ;
TO
ta[i,2],ta[i,3] COLOR &b NONE
&& Redefinice mini okna
ACTIVATE WINDOW &n IN WINDOW oko
&& Aktivace mini okna
ENDFOR (i)
&& Další mini okno