Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 153. - komunikace mezi formuláři

Jan Šindelář 8.9.2004

Dokončíme si dnes povídání z minula a povíme si něco o vzájemné komunikaci mezi formuláři a o předávání hodnot proměnných mezi nimi.

Tématem dnešního závěrečného miniseriálu o formulářích je tedy komunikace mezi nimi. A začneme opět u modálních formulářů. Je až s podivem, kolika začátečníkům dělá problémy například jednoduchá úloha, kdy se má zjistit, jak byl modální formulář uzavřen. Tedy zda bylo stisknuto například tlačítko OK nebo Storno. To je pochopitelně velmi klíčová úloha, protože na dané volbě uživatele pak závisí další běh programu.

Modální formuláře nám nabízí pro tuto typickou úlohu jeden velmi zjednodušující prostředek a tím je jejich vlastnost ModalResult. Pomocí této vlastnosti můžeme zjistit, jak uživatel zareagoval a nemusíme složitě programovat vlastní řešení pomocí nějakých pomocných proměnných (jak to mnozí začínající uživatelé dělají). Jakým způsobem to provedeme? Místo běžného volání ShowModal použijeme tuto metodu v podmínce. Návratová hodnota metody je právě hodnota vlastnosti ModalResult, podle které poznáme, jaké bylo například stisknuto tlačítko. Ve zmiňovaném větvení v hlavním formuláři se pak rozhodneme co dál.

To je snadné, ale zbývá druhá a vlastně nejdůležitější věc. Jakým způsobem při uzavírání modálního formuláře naplníme onu zmiňovanou vlastnost ModalResult příslušnou hodnotou? Ani toto není složité a věc je prakticky automatická. Jelikož formulář uzavíráme v drtivé většině nějakým tlačítkem, má tlačítko ve svých vlastnostech rovněž ModalResult. Přidáme-li tedy na modální formulář tlačítko, stačí pak jen určit, jaký ModalResult má při kliknutí tlačítko vyvolat. Na výběr je od "žádného" (mrNone) přes obvyklé hodnoty jako je OK, Cancel, Abort, Retry a podobně. A to je vše. Kliknutím na tlačítko dojde ke změně vlastnosti ModalResult i u formuláře! A hlavní "kouzlo" na závěr. Jakmile dojde u formuláře ke změně vlastnosti ModalResult, sám se automaticky uzavře. Nemusíte tedy zbytečně programovat nějaké zavírání formuláře. Stačí pouze a jedině nastavit příslušnou vlastnost u tlačítka. Nic víc.

A tím se dostáváme k úplně poslední věci. Nejen tlačítkem můžeme uzavřít modální formulář. V naší ukázce nám k tomu poslouží poněkud netypicky i Label. V jeho události OnClick stačí jen „ručně“ změnit vlastnost ModalResult formuláře a zbytek je stejný. Sám se uzavře a výsledek je pak vyhodnocen v hlavním formuláři. Vše je dobře patrné z ukázkového projektu.

Teď už nám zbývá poslední úloha a to vzájemné sdílení obsahu proměnných mezi formuláři (lhostejno zda modálními či nemodálními). Nejprve si ukážeme jednodušší případ, kdy chceme zjistit stav nějaké komponenty na cizím formuláři. V našem příkladu budeme zjišťovat obsah položky Text u komponenty Edit. Jediné, co musíme udělat, je to, že se odvoláme na příslušnou komponentu včetně názvu formuláře. To je celkem jasné a samozřejmé a většinou se v tom chyby nedělají. Předpokladem je pochopitelně to, že v hlavním formuláři přidáme v implementační části programu do Uses i příslušný formulář, z něhož chceme čerpat informace.

A jak zjistíme obsah vlastní, uživatelem deklarované proměnné cizího formuláře? Předpoklad je ten, že deklaraci vložíme do definice formuláře v části public. Bude tedy globální v rámci daného unitu a bude dostupná (pro čtení i zápis) i z ostatních modulů (formulářů) celého projektu. K takové proměnné pak přistupujeme opět přes název formuláře, ve kterém se nachází (a logicky znovu platí nutnost vložení jednotky do uses hlavního formuláře, resp. do formuláře, ze kterého chceme proměnnou číst). Vše bude dobře viditelné ve zdrojovém kódu naší dnešní ukázky.

Tolik tedy ty nejzákladnější poznatky o formulářích. Omlouvám se těm zkušenějším z vás, pro které byly poslední dva díly seriálu triviální, ale musíme myslet i na začátečníky-samouky. Ukázkový projekt můžete stahovat zde.

Na závěr jednu organizační poznámku. Poslední dobou se mi množí dotazy, zda lze někde stáhnout celý seriál najednou, aby nebylo nutné jej stahovat ručně díl po dílu. Někteří rovnou žádají, abych jim poslal příslušné soubory mailem (což není v mých silách ani v silách mého pomalého připojení). Pravidelní čtenáři samozřejmě dobře ví, že existují offline verze ke stažení. Abych se vyhnul návalu stále stejných dotazů těch méně pravidelných čtenářů, budu vždy na konci každého dílu uvádět odkazy na stažení těchto offline verzí. Tím odlehčím mé emailové schránce a vám ušetřím práci.

Seriálu v podobě nápovědy Windows, díly 1. až 150. (362 kB)

Seriál jako aplikace s možností stahování nových dílů z internetu. (2,2 MB)