Programování tisků a řízení tiskárny

 

 

Příkazy tisku

Ve FoxPro je velká nabídka příkazů pro tisk sestav (výsledků). Nutno zdůraznit, že mezi zobrazováním na obrazovce a tiskem výsledků činnosti programu nebo jejich zaznamenáním do souboru jsou z hlediska programování ve FoxPro 2.0 pouze rozdíly plynoucí z technických možností jednotlivých zařízení. Například příkaz @ řádek,sloupec SAY ... se nemůže u tiskárny vracet na předchozí řádek. Když má programovaný řádek příkazu menší hodnotu než je počet vytisknutých řádků, pak tisk je proveden na nové straně.

Existují však speciální příkazy pro tisky, které se mohou použít při zobrazování. To má velikou výhodu, že sestavy lze odladit bez plýtvání papíru.

FoxPro má dva nástroje typu low lever case (REPORT a LABEL) pro programování sestav s tiskem mezivýsledků a možností použití jednoduché semigrafiky a typů písma. Produkty těchto nástrojů pokryjí většinu praktických aplikací.

V profesionální praxi se programátor neobejde bez znalosti následujících příkazů. Jsou jednoduché, rychlé a v praxi velice oblíbené příkazy, které vyhodnotí a vytisknou výsledek výrazů.

 

? | ?? [<expr1> [PICTURE <expC1>] [FUNCTION <expC2>] [AT

<expN>] [STYLE <expr>] [, <expr2>]] ...

 

? tisknee na nový řádek, ?? od aktuální pozice na výstupním zařízení. Směrování výstupu se řídí nastavením příkazů SET PRINTER a SET CONSOLE. Tvar výstupu je možno upravovat zadáním klauzulí FUNCTION a PICTURE - popis viz @ ... SAY/GET. V klauzuli FUNCTION lze v tomto příkazu použít speciální kód V<n>, který umožní zadat vertikální uspořádání výstupu. Hodnota <n> určuje maximální počet sloupců, které výstup zabere. Klauzulí AT se určí sloupec, od kterého se začne výstup zobrazovat. Klauzulí STYLE se zadává typ a velikost písma pro výstup na tiskárnu - při výstupu na obrazovku se ignoruje.

 

? "Datum:", DATE(), "."

 

Pro řízení tiskáren pomocí řídicích kódů (takzvaných escape sekvencí) se používá příkazu:

 

??? <expC>

 

který nemění hodnotu aktuální pozice řádku ani sloupce. Ve výrazu <expC> lze použít funkce CHR() nebo kód uzavřený do složených závorek { }.

 

??? CHR(27)+CHR(15)

 

Kreslení rámečků a čar se provádí příkazem:

 

DEFINE BOX FROM <sl1> TO <sl2>

HEIGHT <expN1>

[AT LINE <expN2>]

[SINGLE | DOUBLE | <definice rámečku>]

 

Nakreslení rámečku lze použít pouze ve spojení s příkazy ? nebo ??, nikoliv s příkazy @ ... SAY. Šířka rámečku je zadaná levým a pravým sloupcem <sl1> a <sl2>, výška parametrem <expN1>, polohu horní hrany lze zadat parametrem <expN2>, standardní hodnota je aktuální číslo řádku. Výška rámečku je ještě ovlivňována hodnotou systémové proměnné _PSPACING. Rámeček může být jednoduchý, dvojitý nebo zadaný řetězcem <definice rámečku> (bližší popis viz SET BORDER). Pro vykreslení rámečku je třeba nastavit systémovou proměnnou _BOX = .T. a příkaz SET PRINTER ON.

 

DEFINE BOX FROM 1 TO 32 HEIGHT 10 DOUBLE

 

 

Příkazy a funkce pro programové řízení tisku

Tisk se programově řídí pomocí speciálních příkazů a funkcí a měněním obsahu systémových proměnných. Jména systémových proměnných začínají znakem podtržení. Funkce systémových proměnných budou probrány spolu s příkazy a funkcemi, ve kterých se používají. Okamžitá poloha na výstupu se zjišťuje funkcemi:

 

PROW()

PCOL()

 

které vrací číslo aktuálního řádku a sloupce na "tištěné" straně, (analogicky jako funkce ROW() a COL() v okně). Hodnota je relativní vzhledem k nastavenému levému okraji (SET MARGIN) nebo proměnné _PLOFFSET.

 

@ PROW(), PCOL()+1 SAY "...."

 

Provedení zadaného příkazu v okamžiku naplnění určeného počtu řádků stránky výstupu (obvykle příkaz volání procedury nebo funkce) se programuje:

 

ON PAGE [AT LINE <expN> <příkaz>]

 

Počítání řádků se provádí v systémové proměnné _PLINENO. V okamžiku překročení hodnoty <expN> se provede činnost zadaná příkazem. Příkaz ON PAGE může být též vyvolán jako efekt při provádění příkazu EJECT PAGE. ON PAGE bez parametrů ruší předchozí nastavení příkazu.

 

ON PAGE AT LINE 24 do obrazek

 

Nastavení tiskárny na další stranu se programuje příkazem:

 

EJECT

 

Přesná funkce příkazu závisí na obsahu systémové proměnné _PADVANCE. Příkaz nemá vliv na obsah proměnných _PAGENO nebo _PLINENO.

 

EJECT PAGE

 

příkaz provede čtyři činnosti:

- zapíše prázdné řádky chybějící do konce strany (počet rádků je dán rozdílem mezi obsahem systémové proměnné _PLENGTH, která obsahuje délku strany a systémové proměnné _PLINENO, která obsahuje aktuální počet řádků na straně) prázdných řádků na obrazovku a nebo do souboru, který byl přiřazen příkazem SET ALTERNATE,

- nastaví novou stránku na tiskárně (když je připojena),

- zvětší o jedničku systémovou proměnnou _PAGENO,

- nastaví na nulu systémovou proměnnou _PLINENO .

Funkce příkazu souvisí s nastavením systémové proměnné _PADVANCE a s příkazem ON PAGE: Je-li _PADVANCE="LINEFEEDS", příkaz ON PAGE byl vyslán a obsh proměnné _PLINENO je menší než číslo řádku zadané v příkaze ON PAGE, provede se:

- potřebné množství nových řádků na tiskárnu, obrazovku a eventuálně do souboru přiřazeného příkazem SET ALTERNATE tak, aby byla nastavena nová stránka. Je-li _PADVANCE="LINEFEEDS", příkaz ON PAGE nebyl vyslán a proměnná _PLINENO je větší než číslo řádku zadané v ON PAGE, provede se:

- _PLENGTH-_PLINENO nových řádků se vyšle na tiskárnu, obrazovku eventuálně do souboru (SET ALTERNATE).

- _PAGENO se zvětší o jedničku.

- _PLINENO se nastaví na nulu.

 

Podmíněné nastavení tiskárny na novou stránku.

 

**EJECT PAGE **

 

 

Výpis obsahu databázového souboru

Pro výpis položek nebo výrazů databáze je výhodné použít příkaz:

 

LIST [FIELDS <seznam výrazů>]

[<rozsah>] [FOR <expL1>] [WHILE <expL2>]

[OFF] [TO PRINTER | TO FILE <soubor>]

[NOCONSOLE] [NOOPTIMIZE]

 

Příkaz má standardně hodnotu rozsahu všechno (ALL). Věty označené ke zrušení se při nastavení SET DELETED ON nevypisují. Klausule NOCONSOLE potlačí výstup na obrazovku.

Použití nástrojů pro tvorbu sestav

Ve foxpro existují výkonné nástroje, které nevatvářejí program, ale speciální soubor obsahující dedinifci tisku ve tvaru tabulky.

Programování sestav se nejrychleji programuje příkazem:

 

CREATE REPORT <soubor1> | ?

[NOOVERWRITE] FROM <soubor2>

[FIELDS <seznam položek>]

[FORM | COLUMN]

[ALIAS | NOALIAS] [WIDTH <expN>]

 

příkaz vytvoří definici jednoduché výstupní sestavy. Standardní přípona definice je FRX . NOOVERWRITE zamezí vytvoření definice sestavy, pokud <soubor1> již existuje. FROM <soubor2> specifikuje jméno databázového souboru, podle jehož struktury má být sestava definována. Soubor nemusí být otevřen. FORM uspořádá sestavu po řádcích (každá položka jeden řádek), COLUMN (implicitní) po sloupcích. ALIAS způsobí uvedení jmen databázových položek včetně jmen alias. WIDTH <expN> specifikuje šířku sestavy v počtu sloupců.

 

CREATE REPORT vypis FROM seznam

 

Následující příkaz není analogií předchozího, jelikož zahajuje proces interaktivního vytváření souboru (.FRX) s definicí výstupní sestavy

 

CREATE REPORT [<soubor> | ?]

[[WINDOW <okno1>]

[IN [WINDOW] <okno2> | SCREEN]]

 

CREATE REPORT vyhodnoceni

 

Úprava definice sestavy se provádí interaktivně příkazem:

 

MODIFY REPORT [<soubor> | ?]

[[WINDOW <okno1>] [IN [WINDOW] <okno2> | SCREEN]]

[NOENVIRONMENT]

[NOWAIT]

[SAVE]

 

NOENVIRONMENT potlačí obnovení prostředí, ve kterém byl soubor s definicí výstupní sestavy vytvářen. Při neuvedení fráze je prostředí automaticky obnoveno (za předpokladu, že bylo uloženo ve fázi vytváření). SAVE ponechá po ukončení příkazu na obrazovce pasivní obraz okna s návrhem výstupní sestavy.

 

MODIFY REPORT vypis NOENVIRONMENT

 

Vlastní tisk setavy podle souboru s definicí provádí příkaz:

 

REPORT [FORM <soubor1> | ?]

[ENVIRONMENT]

[<rozsah>] [FOR <expL1>] [WHILE <expL2>]

[HEADING <expC>] [PLAIN] [NOEJECT]

[SUMMARY] [PREVIEW]

[NOCONSOLE] [PDSETUP]

[NOOPTIMIZE]

[TO PRINTER | TO FILE <soubor2>]

 

FORM <soubor1>|? specifikuje soubor s definicí sestavy (standardní přípona .FRX). ENVIRONMENT obnoví prostředí, ve kterém byl soubor s definicí sestavy vytvářen. Předpokladem je jeho uložení ve fázi vytváření, kdy se uloží všechny informace o otevřených databázových a indexových souborech a nastavených vazbách. Pokud nelze využít ENVIRONMENT, pak musí být zdrojové databázové soubory a jejich indexové soubory otevřeny včetně nastavení potřebných vazeb mezi soubory. HEADING <expC> určuje dodatečnou hlavičku každé stránky sestavy. PLAIN omezí výpis hlaviček stránky pouze na první stránku sestavy. NOEJECT potlačí přechod na novou stránku před zahájením tisku. NOCONSOLE potlačí při tisku sestavy její výstup na obrazovku. PREVIEW provede výstup sestavy na obrazovku (netiskne se). SUMMARY omezí výpis pouze na součtové a mezisoučtové řádky. TO PRINTER | TO FILE <soubor2> provede směrování výstupu na tiskárnu nebo do souboru zadaného jména. PDSETUP použije nastavení tiskárny - viz dialog Report.

 

REPORT FORM vyhodnoceni TO PRINTER

 

Použití nástrojů pro tvorbu jmenovek

Jmenovky jsou speciální sestavy, které mají text umístěn ve vymezeném prostoru. Nástroje pro tvorbu jmenovek se používají se při programování tisku adres (lepených na poštovní zásilky), štítků materiálu ve skladech, k tisku rozborových sestav, apod. Vytvoření definičního souboru jmenovek (standardně LBX), zabezpečuje příkaz:

 

CREATE LABEL [<soubor> | ?]

[[WINDOW <okno1>] [IN [WINDOW] <okno2> | SCREEN]]

 

CREATE LABEL adresy

 

Změna souboru definice jmenovek se programuje příkazem:

 

MODIFY LABEL [<soubor> | ?]

[[WINDOW <okno1>] [IN [WINDOW] <okno2> | SCREEN]]

[NOENVIRONMENT]

[NOWAIT]

[SAVE]

 

Klauzule jsou stejné jako u příkazu MODIFY REPORT.

 

MODIFY LABEL adresy NOENVIRONMENT

 

Vlastní tisk jmenovek se programuje příkazem:

 

LABEL [FORM <soubor> | ?]

[TO PRINTER | TO FILE <soubor2>]

[ENVIRONMENT]

[<rozsah>] [FOR <expL1>] [WHILE <expL2>]

[NOCONSOLE] [SAMPLE]

[NOOPTIMIZE]

[PREVIEW] [PDSETUP]

 

Význam klausulí je stejný jako u příkazu REPORT.

 

LABEL FORM adresy TO PRINTER

 

Řízení tiskárny

Příkaz pro určení výstupného zařízení (výběru tiskárny) má čtyři modifikace:

 

SET PRINTER ON | OFF

 

přepne výstup na tiskárnu, (neplatí pro příkazy @ ... SAY, u nich nutno použít příkazu SET DEVICE). Nastavení tiskárny lze testovat funkcí:

 

SYS(102)

 

která vrací nastavení příkazu SET PRINTER (ON nebo OFF).

 

SET PRINTER TO [<soubor> [ADDITIVE] | <port>]

 

nasměruje výstup do souboru nebo zadané výstupní zařízení (LPT1|2|3 nebo COM1|2). Výstupní soubor se přepíše když nebude zadána fráze ADDITIVE.

 

SET PRINTER TO [\\<jméno stanice v síti>

\<jméno tiskárny sítě> = <LPT1|2|3>]

 

přesměruje výstup na síťovou tiskárnu.

 

SET PRINTER TO [\\SPOOLER [\NB] [\F = <expN>] [\B = <expC>]

[\C = <expN>] [\P = <expN>] [\S = <server>] [\Q = <queue>]]

 

příkaz určený pro síť Novell Advance Netware (R) revision 2.00 nebo vyšší. \NB potlačuje tisk titulní stránky; \F=<expN> číslo formátu (0 až 255); \B=<expC> text titulní stránky (max. 12 znaků - standardně je jméno uživatele); \C=<expN> počet kopií (1 až 255, implicitně jedna); \P=<expN> číslo tiskárny (standardně nula); \S=<server> specifikace tiskárny, je-li v síti u serveru připojeno více tiskáren (neuzavřené v uvozovkách); \Q=<queue> umožní zadat jméno fronty pro zadanou tiskárnu (neuzavřené v uvozovkách).

 

SYS(6)

 

Vrací jméno zařízení, na které je směrován výstup příkazem SET PRINTER.

 

Nastavení hodnot prostředí pro výstup na tiskárnu se programuje strukturou, která začíná příkazem PRINTJOB a končí příkazen ENDPRINTJOB. Struktura inicializuje systémové proměnné související s tiskem. Struktura má tvar:

 

PRINTJOB

<příkazy>

ENDPRINTJOB

 

PRINTJOB provede:

- vyšle inicializační tiskové kódy uložené v proměnné _PSCODE.

- nastaví novou stránku, je-li proměnná _PEJECT="BEFORE" nebo "BOTH".

- do proměnné _PCOLNO uloží nulu.

ENDPRINTJOB provede:

- vyšle tiskové kódy pro konec tisku uložené v proměnné  _PECODE (umožní tak vrátit stav před PRINTJOB).

- nastaví novou stránku, je-li proměnná _PEJECT="AFTER" nebo "BOTH".

- provede znovu PRINTJOB, je-li nastaven počet kopií v proměnné _PCOPIES.

 

PRINTSTATUS()

Funkce vrací .T., když je tiskárna nebo zařízení definované pro tisk připraveno k tisku

 

SYS(13)

 

Vrací stav tiskárny ( "READY" - tiskárna je připravena, jinak "OFFLINE").

Přesná funkce příkazu závisí na obsahu systémové proměnné _PADVANCE. Příkaz nemá vliv na obsah proměnných _PAGENO nebo _PLINENO. Nastaví tiskárnu na začátek další stránky. Funkce příkazu souvisí s nastavením systémové proměnné _PADVANCE a s příkazem ON PAGE. Je-li _PADVANCE = "FORMFEED" a příkaz ON PAGE nebyl vyslán, příkaz EJECT PAGE provede:

- nastavení nové stránky na tiskárně (je-li připojena).

- (_PLENGTH-_PLINENO) prázdných řádek na obrazovku a/nebo do souboru, který byl přiřazen příkazem SET ALTERNATE.

- systémová proměnná _PAGENO se zvětší o jedničku.

- systémová proměnná _PLINENO se nastaví na nulu.

Je-li _PADVANCE="LINEFEEDS", příkaz ON PAGE byl vyslán a obsah proměnné _PLINENO je menší než číslo řádku zadané v příkaze ON PAGE, provede se:

- potřebné množství nových řádků na tiskárnu, obrazovku a eventuálně do souboru přiřazeného příkazem SET ALTERNATE tak, aby byla nastavena nová stránka. Je-li _PADVANCE="LINEFEEDS", příkaz ON PAGE nebyl vyslán a proměnná _PLINENO je větší než číslo řádku zadané v ON PAGE, provede se:

- _PLENGTH-_PLINENO nových řádků se vyšle na tiskárnu, obrazovku eventuálně do souboru (SET ALTERNATE).

- _PAGENO se zvětší o jedničku.

- _PLINENO se nastaví na nulu.

Podmíněné nastavení tiskárny na novou stránku.

Vrací číslo aktuálního sloupce na tiskárně. Hodnota je relativní vzhledem k nastavenému levému okraji (SET MARGIN) nebo proměnné _PLOFFSET. Místo této funkce lze použít speciální operátor $.

 

@ PROW(), PCOL()+1 SAY "...."

 

@ PROW(),PCOL()+1 SAY "...."

 

Vrací číslo aktuálního řádku na tiskárně.

 

SET MARGIN TO <expN>

 

Určuje odsazení levého okraje výstupu na tiskárnu. Hodnota <expN> se uloží do systémové proměnné _PLOFFSET. Odsazení levého okraje je též ovlivňováno proměnnou _LMAGRIN. Nastavení levého okraje tímto příkazem nemá vliv na výstupy příkazem REPORT FORM. Implicitní hodnota je nula.

 

SET PDSETUP TO [[<expC> [, <expr1> [, <expr2> ... ]]] [WITH

<expr3> [, <expr4> ... ]]]

 

Nastavuje soubor s informacemi pro tisk. Soubor s informacemi pro tisk je kombinace programu pro ovladač tiskárny a tiskových informací jako orientace stránky, implicitní velikost a typ písma, nastavení okrajů atd. Jméno souboru <expC> je uloženo ve zdrojovém souboru FoxPro (FOXUSER.DBF). Je možno ho vytvořit a pojmenovat interaktivně v dialogu SET EDITING DIALOG. Jméno souboru se ukládá též do proměnné _PDSETUP. Výrazy <expr1>, <expr2> ... jsou parametry pro program ovladače tiskárny. Hodnoty výrazů <expr3>, <expr4> ... jsou určeny pro naplnění systémového pole _PDPARMS.