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
V CP verzie 3.X (ja som upgradol CP z 2.22 rovno na 3.1+SP2, takže v 3.0 neviem...) našťastie pribudla systémová OCL metóda "system.GetTimeString()", ktorá tvorbu systémového času podstatne zjednodušuje. Predošlý program vyzerá po inovácii takto:
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
autor: Šlosar Peter, e-mail: slosar@yahoo.com, www: http://slosar.tripod.com, http://members.tripod.com/~slosar