10.08.2021, Vladimír Klaus, navštíveno 998x
Možná jste, podobně jako já, občas potřebovali spustit nějakou akci (stahování, zjišťování informací z internetu, aktualizaci dat...) a bylo nanejvýš vhodné, aby uživatel nemohl v tu danou chvíli s aplikací nic dělat. Mohl by spustit onu akci znovu, nebo začít upravovat data a jistě i řadu dalších operací.
Řešení tohoto probému je celá řada, od modálního dialogu, přes schování hlavního formuláře. Také je možné totálně znepřístupnit hlavní formulář.
MainForm.Enabled:=false;
Ale to má bohužel nežádoucí vedlejší efekt - s oknem nejde pohnout, minimalizovat, ale ani ho (tedy aplikaci) vypnout. Může to být někdy žádoucí, ale nikoliv v mém případě.
Já jsem nakonec (pro svůj případ) dospěl k poměrně jednoduchému řešení, které mi (a zákazníkům) zatím vyhovuje. Znepřístupním všechny hlavní "sekce" na hlavním formuláři. Což je "menu", hlavní část a stavová řádka.
//zablokuji uživatelské prostředí
MainForm.MainRibbon.Enabled:=false;
MainForm.MainPageControl.Enabled:=false;
MainForm.StatusBar.Enabled:=false;
A cože je to ten můj případ? Nedostupnost internetu/serveru/databáze. V takovém případě opravdu nechcete, aby se uživatel o cokoliv pokoušel, protože to jednoznčně skončí nějakou chybou, nekonzistentností dat apod.
I zde je jistá nepříjemnost a to ta, že pokud akce trvá dlouho, případně je vykonávána tak, že úplně vše blokuje, místo celého hlavního okna/formuláře se vykreslí černý obdélník. To se pochopitelně dá řešit třeba tím, že akce se pustí v samostatném vláknu apod. Ale to není podstatné, hlavní účel - aby nešlo na nic kliknout - je tímto řešen jednoduše a zároveň dokonale.
A po akci zase vše obnovím...
//obnovím uživatelské prostředí
MainForm.MainRibbon.Enabled:=true;
MainForm.MainPageControl.Enabled:=true;
MainForm.StatusBar.Enabled:=true;
Jinak vemi doporučuji prostudovat odkazovaný článek!
Zdroj: