Popis problému:
Editace data a času je v knihovně Menulib verze 2.002 a starší podporována pouze ve tvaru samostatného "submenu", kde jsou jednotlivé položky data a času editovány samostatně jako položky submenu. V řadě případů je tento způsob řešení nevyhovující a je nanejvýš vhodné mít k dispozici editor umožňující editaci času ve formátu HH:MM a editaci data ve formátu DD.MM.
Řešení:
Řešení přináší příklad dvojitého editoru pro potřeby nastavení hodin a minut nebo dne a měsíce v jediném řádku menu. Funkce dvojitého editoru MeDouble je principiálně postavena na dvojici editorů či zobrazení údajů oddělených oddělovacím řetězce a ukončeným zakončovacím řetězcem. Funkce je deklarována takto:
subroutine MeDouble(var word left, word lmin, word lmax, const string ldelim, var word right,word rmin, word rmax, const string rdelim)
kde jednotlivé parametry mají význam:
-
-
- left - levý (první) údaj v zobrazení
- lmin - minimální mez pro editaci levého údaje
- lmax - maximální mez pro editaci levého údaje
- ldelim - oddělovací řetězec znaků mezi prvním a druhým údajem (může být prázdný tj. "")
- right - pravý (druhý) údaj v zobrazení
- rmin - minimální mez pro editaci pravého údaje
- rmax - maximální mez pro editaci pravého údaje
- rdelim - ukončovací řetězec znaků tisknutý za druhým údajem (může být prázdný tj. "")
Podprogram MeDouble se chová stejně jako ostatní funkce knihovny menu tj. respektuje aktuálně nastaveý formát tisku na displej. Z tohoto důvodu je vhodné formát vždy nastavit na pevný počet míst (maximální) obou editovaných údajů. Editor se ovládá standardně. Pro přechod mezi editačními poli levého a pravého údaje je nutné stisknout klávesu "Enter".
Příklad volání a začlenění do menu pro čas:
format = 0x1120 ; vyhradi dva znaky pro kazdou polozku ; editace, neumi predsadit nulu if (MeLine("HODINY: ")) then MeDouble(hour,0,23,":",minute,0,59," ")
Příklad volání a začlenění do menu pro datum:
format = 0x0; vyhradi dva znaky pro kazdou polozku ; editace, neumi predsadit nulu if (MeLine("DATUM: ")) then MeDouble(day,1,31,".",month,1,12," ")
Omezení:
Zobrazení a editor neumí předsadit 0 před číslo, které má méně než maximální počet míst.
|