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