Autor: Michal Pohorelsky
Uverejneno: New P+C 04/94, str. 59-60
Vylepseni prikazu @...EDIT (trik)


Kdyz programator potrebuje ve FoxPro 2.0 nebo FoxPro 2.5 vytvorit libovolnou uzivatelskou vstupni obrazovku, urcite pritom vyuzije vyborny Screen Builder, ktery umoznuje vytvorit vsechno velmi rychle. Ve Screen Builderu muzeme pracovat take s MEMO polozkami databaze. Prikaz @...EDIT vytvori standartni objekt typu GET pro prohlizeni a editaci MEMO polozek, ktery ma v sobe integrovan posuvnik. Tak si muzeme prohlizet i velice rozsahle MEMO polozky.
Pokud vstupni obrazovku pouzivaji obycejni uzivatele je nutne jejich pocinani dukladne kontrolovat. Proto editaci kazdeho objektu na obrazovce muzeme v libovolnem okamziku zakazat nebo povolit, dle nasi aktualni potreby pomoci prikazu:

* SHOW GETS [ENABLE | DISABLE]
* SHOW GET < promenna > [ENABLE | DISABLE]
* SHOW OBJECT < cislo > [ENABLE | DISABLE]

Ma to ovsem jeden hacek ! Zakaz editace objektu EDIT je znacne problematicke, ponevadz se tim zaroven zablokuje posuvnik a uzivatel si nemuze prohlednout celou MEMO polozku zaznamu. Tento nedostatek mi pri vytvareni jednoho programu silne vadil, a proto jsem vymyslel nasledujici trik.
Na obrazku cislo 1 je zrejme, ze zakladni vtip je ve vytvoreni dvou naprosto stejnych objektu @...EDIT, ktere se vazou na jednu jedinou polozku v zaznamu. Prvni objekt EDIT vytvorime klasickym zpusobem a zkopirujeme ho zkratkou CTRL+C do clipboardu. Druhy objekt vytvorime jako kopii prvniho zaznamu zkratkou CTRL+V. V zaveru teto operace se ujistime, ze oba EDIT objekty se skutecne pouzivaji stejnou polozku databaze nebo pametovou promennou a maji stejnou velikost.
Na obrazku cislo 2 je videt WHEN klauzule prvniho objektu EDIT. Na obrazku cislo 3 je videt WHEN klauzule druheho objektu EDIT. Kdyz oba obrazky porovnate uvidite, ze klauzule WHEN druheho objektu EDIT je presnym opakem klauzule WHEN prvniho objektu EDIT a navic je pridan parametr NOMODIFY. Presne podle obrazku pridame do klauzule WHEN prvniho objektu EDIT vyraz - "MemoFlag". Do klauzule WHEN druheho objektu EDIT pridame vyraz - "NOT MemoFlag NOMODIFY". Kdyz ve Screen Builderu vygenerujete obrazovku do souboru s priponou SPR, oba objekty EDIT budou vypadat asi takto:

Edit Region 1:
@ < radek, sloupec > EDIT < promenna > ... WHEN MemoFlag Edit Region 2:
@ < radek, sloupec > EDIT < promenna > ... WHEN NOT MemoFlag NOMODIFY

Protoze oba objekty EDIT jsou umistene na sobe, uzivatel vidi na obrazovce pouze jedine EDIT pole. Kdyz ma promenna MemoFlag hodnotu FALSE, WHEN klauzule prvniho objektu EDIT vrati hodnotu .F. a FoxPro zablokuje prvni objekt. Uzivatel si muze Memo polozku pohodlne celou prohlednout, ale nesmi ji editovat. Kdyz ma promenna MemoFlag hodnotu TRUE, vrati WHEN klauzule prvniho objektu hodnotu .T. a FoxPro zablokuje druhy objekt. Uzivatel muze Memo polozku editovat normalne.




Skok na dalsi stranku Skok na hlavni menu Skok na dalsi stranku


Copyright (c) 1993-2000 Michal Pohorelsky