Autor: Michal Pohořelský
Uveřejněno: New P+C 04/94, str. 59-60
Vylepšení příkazu @...EDIT (trik)


Když programátor potřebuje ve FoxPro 2.0 nebo FoxPro 2.5 vytvořit libovolnou uživatelskou vstupní obrazovku, určitě přitom využije výborný Screen Builder, který umožňuje vytvořit všechno velmi rychle. Ve Screen Builderu můžeme pracovat také s MEMO položkami databáze. Příkaz @...EDIT vytvoří standartní objekt typu GET pro prohlížení a editaci MEMO položek, který má v sobě integrovan posuvník. Tak si můžeme prohlížet i velice rozsáhlé MEMO položky.
Pokud vstupní obrazovku používají obyčejní uživatelé je nutné jejich počínání důkladně kontrolovat. Proto editaci každého objektu na obrazovce můžeme v libovolném okamžiku zakázat nebo povolit, dle naší aktuální potřeby pomocí příkazů:

* SHOW GETS [ENABLE | DISABLE]
* SHOW GET < proměnná > [ENABLE | DISABLE]
* SHOW OBJECT < číslo > [ENABLE | DISABLE]

Má to ovšem jeden háček ! Zakáz editace objektu EDIT je značně problematické, poněvadž se tím zároveň zablokuje posuvník a uživatel si nemůže prohlédnout celou MEMO položku záznamu. Tento nedostatek mi při vytváření jednoho programu silně vadil, a proto jsem vymyslel následující trik.
Na obrázku číslo 1 je zřejmé, že základní vtip je ve vytvoření dvou naprosto stejných objektů @...EDIT, které se vážou na jednu jedinou položku v záznamu. První objekt EDIT vytvoříme klasickým způsobem a zkopírujeme ho zkratkou CTRL+C do clipboardu. Druhý objekt vytvoříme jako kopii prvního záznamu zkratkou CTRL+V. V závěru této operace se ujistíme, že oba EDIT objekty se skutečně používají stejnou položku databáze nebo pamětovou proměnnou a mají stejnou velikost.
Na obrázku číslo 2 je vidět WHEN klauzule prvního objektu EDIT. Na obrázku číslo 3 je vidět WHEN klauzule druhého objektu EDIT. Když oba obrázky porovnáte uvidíte, že klauzule WHEN druhého objektu EDIT je přesným opakem klauzule WHEN prvního objektu EDIT a navíc je přidán parametr NOMODIFY. Přesně podle obrázků přidáme do klauzule WHEN prvního objektu EDIT výraz - "MemoFlag". Do klauzule WHEN druhého objektu EDIT přidáme výraz - "NOT MemoFlag NOMODIFY". Když ve Screen Builderu vygenerujete obrazovku do souboru s příponou SPR, oba objekty EDIT budou vypadat asi takto:

Edit Region 1:
@ < řádek, sloupec > EDIT < proměnná > ... WHEN MemoFlag Edit Region 2:
@ < řádek, sloupec > EDIT < proměnná > ... WHEN NOT MemoFlag NOMODIFY

Protože oba objekty EDIT jsou umístěné na sobě, uživatel vidí na obrazovce pouze jediné EDIT pole. Když má proměnná MemoFlag hodnotu FALSE, WHEN klauzule prvního objektu EDIT vrátí hodnotu .F. a FoxPro zablokuje první objekt. Uživatel si může Memo položku pohodlně celou prohlédnout, ale nesmí ji editovat. Když má proměnná MemoFlag hodnotu TRUE, vrátí WHEN klauzule prvního objektu hodnotu .T. a FoxPro zablokuje druhý objekt. Uživatel může Memo položku editovat normálně.




Skok na další stránku Skok na hlavní menu Skok na další stránku


Copyright (c) 1993-2000 Michal Pohořelský