10. 8. 2021, Vladimír Klaus, navštíveno 107x

Delphi

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í.

Jak v Delphi znepřístupnit hlavní okno, obr. 1

Ř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: