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