# demultiplexer

### Funkce

Zobrazení výsledku libovolného numerického výrazu pomocí ručkového přístroje, grafu, popř. displeje. Hodnota výrazu je nejen zobrazena, ale také vyslána na výstupní proměnné (kanály), které mají splněnu podmínku výběru.

### Syntax

      demultiplexer demultiplexer_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;
        output_item
          condition = boolean_expression;
          output_to = real_dataelement;
        end_output_item;
        output_item
          . . .
        end_output_item;
        input = real_expression;
        show_outputs boolean;
        show_numbers boolean;
        mode = identifier;
        content = identifier;
        range_from = real;
        range_to = real;
        low_limit = real;
        high_limit = real;
        history = integer;
        dec_places = integer;
        real_step = real;
        h_grid = integer;
        v_grid = integer;
        font = font_identifier, integer, style_identifier;
        mask = string;
        driver_exception = driver_name;
        colors
          border_ink = color;
          border_paper = color;
          top_shadow = color;
          bottom_shadow = color;
          ink = color;
          paper = color;
          value = color;
          low_limit = color;
          high_limit = color;
          h_grid = color;
          v_grid = color;
          data_background = color;
          number_color = color;
        end_colors;
      end_demultiplexer;

### Specifické parametry přístroje

- output_item a end_output_item
  Klíčová slova, která uzavírají parametry jedné z výstupních možností demultiplexeru. Každá opakovatelná položka má parametry condition a output_to. Počet opakování položky output_item není omezen.
- condition
  Obsahuje podmínku, při jejímž splnění bude na datový element určený parametrem output_to poslána hodnota vstupního výrazu. Výsledek výrazu podmínky musí být typu boolean.
- output_to
  Obsahuje název proměnné nebo kanálu, na který bude demultiplexer posílat zobrazenou hodnotu numerického výrazu.
- input
  Tento parametr musí obsahovat numerický výraz, který demultiplexer zobrazí a zároveň pošle na všechny výstupy definované v sekcích output_item, které mají splněnu podmínku výběru určenou parametrem condition.
- show_inputs
  Je-li uveden, zobrazí se symboly výstupů demultiplexeru.
- show_numbers
  Je-li uveden, zobrazí se u symbolů výstupů demultiplexeru i jejich čísla.
- mode
  Určuje grafickou podobu přístroje uvedením jednoho z názvů módu:
    pointer - ručkový přístroj
    digital - digitální přístroj s celistvými číslicemi
    dot_digital - digitální přístroj s bodovými číslicemi
    vertical_bar - poměrná svislá barevná plocha
    horizontal_bar - poměrná vodorovná barevná plocha
    flow_graph - posunující se graf
    sweep_graph - stojící graf
    text_display - textový displej
- content
  Má rovněž vliv na grafickou podobu přístroje. Může nabýva tří hodnot: max, med a min. Pro všechny módy znamená nastavení content = max zobrazení kompletní podoby přístroje. Některé módy navíc umožňují schovat jednu ze svých částí, a to nastavením parametru content = med , popř. content = min.
- range_from a range_to
  Jsou parametry udávající rozsah přístroje. Bude-li hodnota vstupního výrazu přístroje menší, než je hodnota range_from, přístroj se nastaví právě na hodnotu uvedenou v range_from, stejně tak bude-li hodnota vstupního výrazu přesahovat range_to, přístroj se nastaví právě na hodnotu uvedenou v range_to. Hodnoty jsou numerické.
- low_limit a high_limit
  Jsou parametry ovlivňující barevné zobrazení vykreslované hodnoty. Je–li hodnota menší než low_limit, vykresluje se barva uvedená v parametru colors–low_limit, přesáhne–li hodnota high_limit, pak je aktuální barva parametru colors–high_limit. V rozsahu mezi limitami se hodnota vykresluje barvou colors–value. Podle zvoleného módu se bude měnit např. barva pozadí přístroje , popř. se danými barvami vykreslí hodnoty obou limit v grafu.
- history
  Udává počet zobrazených hodnot v grafu. Parametr by měl být celočíselný. U jiných módů nemá význam.
- dec_places
  Je počet zobrazovaných desetinných míst pro módy s číselným vykreslováním hodnoty. Parametr by měl být celočíselný.
- real_step
  Je parametr důležitý pro nastavování limitů přístroje pomocí numerického řádku. Jeho numerická velikost udává přírůstek hodnoty při použití přičítacích a odečítacích šipek numerického řádku.
- h_grid a v_grid
  Jsou parametry určující zobrazení vodorovných a svislých čar do grafu jako jeho pomocné síťování. Velikost parametrů h_grid a v_grid udává počet zobrazených vodorovných a svislých čar. Hodnoty obou parametrů musí být numerické.
- font
  Je parametr určující font při vykreslování hodnoty módem text_display. Má vždy tři části. První z nich font_name určuje typ písma (např. TIMES, SYSTEM, aj.), druhý integer jeho velikost v tiskových bodech a třetí parametr style_name rozhoduje o tom, zda bude písmo normální (normal), tučné (bold) nebo skloněné (italic).
- mask
  Je šablona pro vypisování libovolného textu současně s numerickou hodnotou přístroje. Parametr má význam při mode = text_display;. V textovém režimu se zadává v uvozovkách, v inspektoru přístroje bez uvozovek. Může mít např. tvar mask = 'rychlost = ##.## m/s'; , kde znak # udává umístění a velikost zobrazované numerické hodnoty. Implicitně je tento parametr prázdný.
- driver_exception
  Jméno ovladače, od kterého budou přijímány výjimky.
- colors
  Seznam prvků přístroje, kterým lze měnit nastavení barvy:
    border_ink - okrajová linka
    border_paper - podkladový papír
    top_shadow - horní stín
    bottom_shadow - dolní stín
    ink - linky přístroje
    paper - papír přístroje
    value - hodnota mezi limitami
    low_limit - hodnota pod low_limit
    high_limit - hodnota nad high_limit
    h_grid - vodorovná síť grafu
    v_grid - svislá síť grafu
    data_background - papír pro show_numbers
    number_color - barva číslic show_numbers

### Poznámky

- Demultiplexer vyšle zobrazenou hodnotu na všechny output_name, které mají splněnu podmínku výběru condition. Není–li žádná z podmínek splněna, neposílá demultiplexer hodnotu nikam.
- Demultiplexer je v podstatě přístroj meter, rozšířený o možnost výběru nastavení jedné hodnoty na více kanálů a proměnných.
- Je–li přístroj v okně s lištou menu, je možné měnit mód přístroje za běhu programu.
- Podoba módů je popsána u přístroje meter.
- Implicitně se nastaví tyto hodnoty parametrů:
    position = 0, 0, 100, 80;
    mode = pointer;
    content = min;
    range_from = 0;
    range_to = 100;
    low_limit = 25;
    high_limit = 75;
    history = 2;
    dec_places = 2;
    real_step = 1;
    h_grid = 0;
    v_grid = 0;
    font = SYSTEM, 9, normal;

### Příklad

Příklad nastavení:

      window demultiplexer hodiny;
        owner = background;
        position = 10, 10, 100, 100;
        win_disable = move, zoom, minimize, maximize;
        input = hodiny;
        output_item
          condition = hodiny < 12;
          output_to = dopoledne;
        end_output_item;
        output_item
          condition = hodiny >= 12;
          output_to = odpoledne;
        end_output_item;
        mode = text_display;
        content = min;
      end_demultiplexer;

### Nativní procedury přístroje

    SetLowLimit( LowLimit : real )
    SetHighLimit( HighLimit : real )

Nastavení horní a dolní meze zobrazovaných hodnot. Přístroj bude výsledek vstupního výrazu porovnávat s hodnotami HighLimit a LowLimit; bude-li vstupní hodnota menší než LowLimit nebo větší než HighLimit, bude jednou z těchto limitních hodnot nahrazena.

    SetRange( RealFrom : real, RealTo : real )

Nastavení rozsahu přístroje. Historické hodnoty uložené ve vyrovnávací paměti případně přesahující nový rozsah budou ořezány. Stejně tak budou případně upraveny i limity. V rámci této metody bude přístroj v nové podobě i překreslen.

    SetMode( Mode : real )

Pomocí této metody je možné za běhu přístroje nastavovat jeho vzhled. Čísla módů a jejich stručný popis uvádí tabulka:

  0 pointer - ručkový přístroj
  1 digital - digitální výstup bodový
  2 dot_digital - digitální výstup
  3 vertical_bar - poměrná svislá barevná plocha
  4 horizontal_bar - poměrná vodorovná barevná plocha
  5 flow_graph - posunující se graf
  6 sweep_graph - stojící graf
  7 text_display - návěští s aktuální hodnotou

    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.

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

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 )
    OnSelect()
    OnDeselect()
    OnShow()
    OnHide()
    OnNewPosition( RectX, RectY, RectW, RectD : integer )
    OnWindowMinimize()
    OnWindowMaximize()
    OnWindowRestore( WasMinimized, WasMaximized : boolean )

Podrobnější informace k těmto procedurám lze nalézt v kapitole Programování a procedury.