Jakým způsobem vytvořit editor data nebo času v běžném formátu XX:YY ?

Knihovna menu lib nepodporuje editaci data resp. času ve formátu DD:MM resp. HH:MM. Příklad dvojitého editoru tento nedostatek řeší.

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

lightbulb Ř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.

Soubor ke stažení: dvojity_editor