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

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)

Diskuze (4) Další článek: Volný zvýšil kapacitu emailových schránek

Témata článku: Software, Programování, Úloha, Trik, Jednoduchá úloha, Formulář, Ostatní moduly, Stejný dotaz, Složitá část, Stejná úloha, Pravidelný čtenář, Hlavní kouzlo, Díl, Stejný závěr, Celý seriál, Stejná metoda, DEL, Cancel, TRI


Určitě si přečtěte

Biblická potopa Česka: Jak bychom dopadli, kdyby nás zatopil oceán

Biblická potopa Česka: Jak bychom dopadli, kdyby nás zatopil oceán

** Představte si biblickou potopu ** Nejprve zaniknou Děčín a Břeclav, pak i Brno a Praha ** Hlavním městem se stane Jihlava a zbytky Čechů přežijí na Kvildě

Jakub Čížek | 93

České Rajče je stále plné dětských nahotin. Student pomocí A.I. analyzoval miliony fotek

České Rajče je stále plné dětských nahotin. Student pomocí A.I. analyzoval miliony fotek

** Rajče.net má odjakživa problémy s choulostivými fotkami dětí ** Student zlínské univerzity analyzoval jeho katalog ** Neuronová síť doposud prozkoumala 6 milionů snímků

Jakub Čížek, Filip Šedivý | 75

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

** Strojové učení ještě nepřitáhlo takový zájem jako na začátku prázdnin ** Ne, umělá inteligence nenašla lék na rakovinu ** Naučila se svlékat ženy nejen z plavek

Jakub Čížek | 35

Podívejte se, jak umírá váš laptop. Desítky na to mají mocný nástroj powercfg

Podívejte se, jak umírá váš laptop. Desítky na to mají mocný nástroj powercfg

** Hardware současných laptopů už tak rychle nestárne ** Tedy až na baterie – ty umírají děsivou rychlostí ** Ve Windows to můžete sledovat skoro v přímém přenosu

Jakub Čížek | 72

Co je TikTok: Svérázná sociální síť chytla mladé uživatele, už jich má už 1,5 miliardy

Co je TikTok: Svérázná sociální síť chytla mladé uživatele, už jich má už 1,5 miliardy

** Sociální síť TikTok získala stamiliony uživatelů a stále roste ** Jaký obsah na ní najdete a co můžete v jejím rámci čekat? ** Je to zábava pro mladé, nebo platforma pro úchyláky?

Karel Kilián | 38

Český Turris MOX: Nejbláznivější síťový počítač nejen pro fanoušky Lega

Český Turris MOX: Nejbláznivější síťový počítač nejen pro fanoušky Lega

** CZ.NIC začal prodávat svůj Turris MOX ** Z několika základních jednotek postavíte skoro cokoliv ** Kompletní Wi-Fi router, rozsáhlý switch i univerzální linuxový server

Jakub Čížek | 31



Aktuální číslo časopisu Computer

Megatest 12 bezdrátových sluchátek

Vyplatí se Apple z bazaru?

Test batohů pro notebooky

Vybíráme nejlepší sportovní hodinky