# tank

### Funkce

Zobrazení výsledku numerického výrazu v podobě míry naplněnosti symbolu nádrže. Přístroj nepřekresluje celou plochu své obdélníkové oblasti. Pro správnou činnost musí být umístěn v panelu, který zajistí správné kreslení pozadí.

### Syntax

      tank tank_name;
        rem = string;
        bubble = string;
        timer = timer_name;
        owner = owner_name;
        position = integer, integer, integer, integer;
        win_disable = [identifier, . . . ];
        win_title = string;
        access = integer;
        tab_select = integer;
        send_same_data;
        expression = real_expression;
        blink = boolean_expression;
        blink_rate = identifier;
        mode = identifier;
        content = identifier;
        range_from = real;
        range_to = real;
        low_limit = real;
        high_limit = real;
        driver_exception = identifier;
        colors
          border_ink = color;
          border_paper = color;
          value = color;
          low_limit = color;
          high_limit = color;
        end_colors;
        blink_colors
          border_ink = color;
          border_paper = color;
          value = color;
          low_limit = color;
          high_limit = color;
        end_blink_colors;
      end_tank;

### Specifické parametry přístroje

- expression
  Obsahem tohoto parametru je numerický výraz, jehož výsledek bude přístroj zobrazovat.
- blink
  Parametr uvádí logický výraz, jehož výsledek rozhoduje o tom, bude-li přístroj blikat -- tedy periodicky se překreslovat se střídavým použitím barevných sad colors a blink_colors. Po zastavení blikání se přístroj vždy vrátí do základní barevné sady colors.
- blink_rate
  Určuje frekvenci blikání přístroje uvedením jednoho z identifikátorů:
  slow - blikání s periodou 2 sekundy
  normal - blikání s periodou 1 sekunda
  quick - blikání s periodou 0.5 sekundy
- range_from a range_to
  Jsou parametry udávající rozsah stupnice přístroje a tím i rozsah výstupních hodnot. Nebude-li výstupní hodnota v rozsahu přístroje, nastaví se mezní hodnota rozsahu. Hodnoty jsou numerické.
- mode
  Určuje tvar nádrže uvedením jednoho z názvů módu:
  tank1 - nádrž zakulacená nahoře i dole
  tank2 - nádrž nahoře rovná a dole kónická
  tank3 - nádrž nahoře zakulacená a dole kónická
- content
  Určuje způsob vykreslování nádrže uvedením jednoho z názvů:
  shaded - stínovaná kresba
  shaded_convex - stínovaná kresba, v prázdné části je kresba stínována opačně než v naplněné
  flat - plochá kresba
- low_limit a high_limit
  Dva parametry, podle kterých se nastaví limity. Je–li hodnota menší než low_limit, použije se barva uvedená v parametru colors–low_limit, přesáhne–li hodnota high_limit, pak je aktuální barvou barva parametru colors–high_limit. V rozsahu mezi limitami se hodnota vykresluje barvou colors–value. Hodnoty limit jsou numerické.
- colors a blink_colors
  Seznam prvků přístroje, kterým lze měnit nastavení barvy:
  border_ink - okrajová linka
  border_paper - podkladový papír
  value - barva hodnoty mezi limity
  low_limit - barva hodnoty pod dolním limitem
  high_limit - barva hodnoty nad horním limitem

### Poznámka

Šířka přístroje nemůže přesáhnout jeho výšku. Nejplošším tvarem je tedy kruh.
Implicitně jsou nastaveny parametry:

      position = 0, 0, 50, 150;
      tab_select = 4294967295;
    	mode = tank1;
    	content = shaded;
      range_from = 0;
      range_to = 100;
      low_limit = 25;
      high_limit = 75;
      colors
        border_ink = black;
        border_paper = lgray;
        value = lblue;
        low_limit = lcyan;
        high_limit = lred;
      end_colors;

### Příklad

Příklad nastavení parametrů přístroje tank:

      tank id_1;
        timer = time_step;
        owner = panel_1;
        position = 57, 264, 80, 220;
        expression = level;
      end_tank;

### Nativní procedury přístroje tank

    SetValue( Value : real )

Nastavení přístroje na novou hodnotu Value včetně případného zápisu této hodnoty do výstupního datového elementu.

    NewRect( x, y, width, depth : real )

Zavoláním metody je možné přístroji změnit současně jeho pozici a velikost. Velikosti hodnot x, y, width, a depth jsou v bodech obrazovky.

    MoveTo( x, y : real )

Posunutí přístroje na pozici x, y. Velikosti hodnot x a y jsou v bodech obrazovky.

    Show()

Zobrazení skrytého přístroje.

    Hide()

Skrytí viditelného přístroje.

    SetNewValueColor(r, g, b : real)

Nastavení libovolné barvy pro zobrazování normální výstupní veličiny (tj. mezi varovnými limity). Čtyřiadvacetibitová barva je zadána v podobě red, green a blue složky, kdy každá může nabývat hodnot od 0 do 255.

    Blink( BlinkingActive : boolean )

Zapnutí a vypnutí blikání. Voláním procedury Blink s parametrem BlinkingActive nastaveným na true začne přístroj blikat (tj. střídavě se překreslovat s použitím barevných sad colors a blink_colors). Blikání je možno zastavit voláním procedury Blink s parametrem BlinkingActive nastaveném na hodnotu false. Frekvence blikání je dána parametrem přístroje blink_rate.

    ToggleBlink()

Přepnutí vzhledu přístroje do alternativní sady barev, tedy z colors do blink_colors nebo naopak podle okamžitého stavu. Po zastavení blikání se přístroj vždy vrátí do standardní barevné sady bez ohledu na předchozí volání procedury ToggleBlink.

### Událostní procedury přístroje tank

Přístroj může volat standardní událostní procedury:

    OnActivate()
    OnMouseDown( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseDoubleClick( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseUp( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseMove( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnKeyDown( Character : cardinal )
    OnKeyRepeat( Character : cardinal )
    OnKeyUp( Character : cardinal )
    OnSelect()
    OnDeselect()
    OnShow()
    OnHide()
    OnNewPosition( RectX, RectY, RectW, RectD : integer )
    OnWindowMinimize()
    OnWindowMaximize()
    OnWindowRestore( WasMinimized, WasMaximized : boolean )
    OnWindowClose()

### Specifické událostní procedury přístroje tank

    OnOutput( Output : real )

Procedura je zavolána po každém vyhodnocení výrazu před každým zobrazením a před každým případným zápisem do výstupního datového elementu. V proměnné Output je hodnota, která bude přístrojem zobrazena a která bude případně po dokončení procedury zapsána do výstupního datového elementu. Toto hodnotu je možno v proceduře změnit.

    OnOutputChanged( Output: real )

Procedura je zavolána jen při změně výsledku vyhodnocovaného výrazu oproti výsledku předchozímu. Proměnná Output je naplněna hodnotou, která bude přístrojem zobrazena a která bude případně po dokončení procedury zapsána do výstupního datového elementu. Toto hodnotu je možno v proceduře změnit.