Spôsoby tvorby systémových hodín
Snáď nikoho netreba presviedčať, že existencia hodín systémového času v aplikácii (ak hovoríme o riadiacich a monitorovacích systémoch) je takmer povinnosť. V CP je síce doplnková aplikácia "Hodiny", ale ja radšej využívam vlastné, priamo zakompované do aplikácie (v CW sa o to samozrejme starať netreba - vo Win9x, WinNT, Win2000 a čo ja viem ešte v akých Win je to elegantne vyriešené už v taskbare).
Na tvorbu vlastných hodín systémového času máme zhruba 3 spôsoby (alebo 2 a pol). Aby hodiny vyzerali dokonale, musíme pamätať na to, že hodnoty hodín, minút i sekúnd musia byť vždy ukazované dvojciferne (ak je hodnota menšia ako 10).
Nebudem sa rozpisovať úplne dopodrobna, môžte si stiahnuť demo, kde sú demonštrované všetky 3 spôsoby a detaily si preštudovať.
1. spôsob
K zobrazovaniu jednotlivých hodnôt hodín, minút a sekúnd môžme využiť 3 prístroje METER. Dôležité je, aby prístroje pracovali samozrejme v móde "text_display", mali nastavenú masku "@@" a boli časované absolútne s posunom 0 (pozor, nie relatívne) v patričných hodnotách.
Tento spôsob hodín bol kedysi dávno prvý, čo ma napadol. Uznáte i sami, že je síce funkčným, ale nie príliš elegantným spôsobom.
Takže ideme ďalej...
2. spôsob
Šikovnejšia metóda spočíva v zobrazovaní času prístrojom "string_display", pričom využívame systémové premenné "hour", "minute", "second" a prevádzame ich na textové reťazce a spájame do jednoho, ktorý je uvedeným prístrojom zobrazovaný.
Napríklad takto:
program sposob_2; timer = 1, 0; begin if hour<10 then hod=concat('0',str(hour,10)); else hod=str(hour,10); end; if minute<10 then min=concat('0',str(minute,10)); else min=str(minute,10); end; if second<10 then sek=concat('0',str(second,10)); else sek=str(second,10); end; text_cas_2=concat(concat(concat(concat(hod,':'),min),':'),sek); send cas_2; end; end_program;
Ako vidno, na konci programu získame v premennej "text_cas_2" výsledný čas, ktorý zobrazíme v prístroji "string_display" pomenovanom "cas_2". Na záver programu ho aktivujeme, aby nemusel byť časovaný samostatne.
Prevod je relatívne dlhý, pretože musíme ošetrovať dvojcifernosť jednotlivých hodnôt.
Tento spôsob som bol nútený využívať ešte donedávna v CP verzie 2.X. Našťastie vývoj ide ďalej...
3. spôsob
program sposob_3; timer = 1, 0; begin system.GetTimeString(&text_cas_3); send cas_3; end; end_program;
Podstatné zjednodušenie, že? V premennej "text_cas_3" dostávame priamo reťazec času, ktorý zobrazíme prístrojom "cas_3".
Táto OCL metóda je však podľa mňa nedotiahnutá do konca, pretože neumožňuje zvoliť, či chceme čas v tvare HH:MM:SS alebo len HH:MM. Môžme si to však zabezpečiť nasledujúcim spôsobom:
program sposob_3m; timer = 60, 0; begin system.GetTimeString(&text_cas_3m); text_cas_3m=slice(text_cas_3m,0,5); send cas_3m; end; end_program;
Výsledný textový reťazec jednoducho orežeme. Jednoduché, ale nemohlo to už byť rovno v OCL metóde ako voľba?
Všetky 3 spôsoby sú aplikované v demo aplikácii, ktorú si môžte stiahnuť. Na záver ešte poznámka - aktuálny dátum sa dá spracovávať obdobne a to OCL metódou "system.GetDateString()".
download:
cas-demo.zip - 1404 bytov
Ano, ved to v clanku pisem. Ale v case vzniku c...
Ale veď blogger umožňuje publikovať na vlastnej...
Pod "fyzickou postou" myslite papierovu postu?...
Dobry den, da sa opakovany spam nejako legalne...
Zhruba taky postup aplikujem dlhe roky, spisane...