# control

### Funkce

Nastavení číselné hodnoty do datového elementu pomocí knoflíku, rolovací lišty, numerického řádku, editačního řádku nebo dialogového okna.

### Syntax

      control control_name;
        rem = string;
      	bubble = string;
        owner = owner_name;
        timer = timer_name;
        position = integer, integer, integer, integer;
        win_disable = [ identifier, . . . ];
        win_title = string;
        access = integer;
        tab_select = integer;
        send_same_data;
        output = real_dataelement;
        blink = boolean_expression;
        blink_rate = identifier;
        mode = identifier;
        content = identifier;
        range_from = real;
        range_to = real;
        init_value = real;
        real_step = real;
        dec_places = integer;
        font = font_identifier, integer, style_identifier;
        change_icon = file_name;
        receivers = [ identifier, . . . ];
        auto_update;
        colors
          border_ink = color;
          border_paper = color;
          top_shadow = color;
          bottom_shadow = color;
          ink = color;
          paper = color;
          selected_text_ink = color;
          selected_text_paper = color;
          text_ink = color;
          text_paper = color;
        end_colors;
        blink_colors
          border_ink = color;
          border_paper = color;
          top_shadow = color;
          bottom_shadow = color;
          ink = color;
          paper = color;
          selected_text_ink = color;
          selected_text_paper = color;
          text_ink = color;
          text_paper = color;
        end_blink_colors;
      end_control;

### Specifické parametry přístroje

- output
  Udává jméno výstupního datového elementu, kam se bude hodnota nastavená přístrojem control zapisovat.
- auto_update
  Příznak definuje, že se přístroj při jakékoliv aktivaci (tedy časovačem, jiným přístrojem atd.) s výjimkou aktivity na základě události způsobené obsluhou nastaví podle hodnoty veličiny ve svém výstupním datovém elementu. Tak může např. více přístrojů nastavovat a zároveň sledovat jeden datový element.
- 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
- mode
  Určuje grafickou podobu přístroje uvedením jednoho z módů:
  knob - knoflík
  turn - ikona knoflíku
  horizontal_slider - vodorovná posuvná lišta
  vertical_slider - svislá posuvná lišta
  count_box - numerický řádek
  edit_box - editační řádek
  change_box - dialogové okno vyvolané dvojklikem na ikonu
- content
  V některých módech ovlivňuje grafickou podobu přístroje. Může nabývat tří hodnot:
  min - minimum - přístroj je v základní podobě
  max a med - maximum a medium - přístroj je v módech knob horizontal_slider a vertical_slider doplněn o číselnou indikaci a možnost nastavení prostřednictvím numerického řádku
- range_from a range_to
  Jsou číselné parametry udávající rozsah přístroje. Nebude-li vložená hodnota v rozsahu přístroje, nastaví se přístroj na mezní hodnotu rozsahu.
- init_value
  Nastavuje počáteční hodnotu přístroje při jeho inicializaci.
- real_step
  Je krok změny výstupní hodnoty přístroje.
- dec_places
  Je počet zobrazovaných desetinných míst na číslicovém zobrazovači v čítacím editačním řádku. Parametr by měl být celočíselný. Při nastavení tohoto parametru na hodnotu větší nebo rovnou 15 (implicitní hodnota parametru je právě 15), budou čísla zobrazována s maximální možnou přesností mantisy. Mají-li být čísla zobrazována s požadovanou přesností, je to nutno specifikovat právě nastavením tohoto parametru.
- font
  Je parametr určující font při vypisování hodnoty v módu count_box a edit_box. Má vždy tři parametry. První z nich font_identifier určuje typ písma (např. TIMES, SYSTEM, aj.), druhý určuje jeho velikost v tiskových bodech a třetí parametr style_identifier rozhoduje o tom, zda bude písmo normální (normal), tučné (bold) nebo skloněné (italic).
- change_icon
  Je parametr obsahující jméno souboru s ikonou `*.ICO`. Podobu takto definované ikony má přístroj pouze při mode = change_box.
- receivers
  Seznam příjemců výjimky časování při aktivitě přístroje.
- colors a blink_colors
  Seznam částí kresby přístroje, kterým lze nastavit barvu:
  border_ink - inkoust okrajů
  border_paper - papír okrajů
  top_shadow - horní stín
  bottom_shadow - dolní stín
  ink - inkoust přístroje
  paper - papír přístroje
  mark - značka pozice knoflíku
  selected_text_ink - text ve vybraném čítacím řádku
  selected_text_paper - papír ve vybraném čítacím řádku
  selected_text_ink - text v čítacím řádku
  selected_text_ink - papír v čítacím řádku

### Poznámka

Přístroj je vždy aktivován obsluhou stiskem klávesy <Enter> nebo levým tlačítkem myši na ovládacích prvcích. Navíc může být také aktivován také např. časovačem nebo jiným přístrojem, kdy se může automaticky nastavovat podle hodnoty ve svém výstupním datovém elementu nebo cokoliv realizovat ve své proceduře OnActivate().
V žádném módu se nemění funkce přístroje, mění se pouze způsob jeho zobrazení a způsob zadávání numerické hodnoty.
Některé parametry mají implicitní nastavení:

      position = 0, 0, 80, 80;
      access = 4294967295;
      tab_select = 4294967295;
      mode = knob;
      content = min;
      range_from = 0;
      range_to = 100;
      init_value = 0;
      real_step = 1;

### Ovládání jednotlivých módů:

- mode = knob, mode = turn
  Oba módy zobrazují knoflík, který má nastavovací rysku. Kliknete-li myší na plochu knoflíku, pootočí se knoflík tak, že jeho ryska prochází bodem kliknutí myši. Odpovídajícím způsobem se změní i výstupní hodnota. Podržíte-li levé tlačítko myši stisknuté, můžete pohybem myši plynule (s nastaveným krokem) měnit výstupní hodnotu přístroje:
- mode = horizontal_slider, mode = vertical_slider
  Oba módy se ovládají stejným způsobem. Umístěte kursor myši na rolovací lištu, stiskněte levé tlačítko a za stálého držení posouvejte lištu požadovaným směrem.
- mode = count_box
  Do numerického řádku lze zadat hodnotu pomocí klávesnice (numerické znaky, šipky a klávesa <Enter>) i myší prostřednictvím šipek napravo od řádku:
- mode = edit_box
  Do editačního řádku lze zadat hodnotu jen pomocí klávesnice.
- mode = change_box
  Obrázek ikony představuje aktivní plošku:
  Po dvojkliku na plošku ikony se objeví modální okno, ve kterém lze zadat novou numerickou hodnotu pomocí klávesnice.

### Příklad

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

      window control potenciometr_1;
        owner = background;
        position = 128, 48, 82, 85;
        win_disable = move, zoom, minimize, maximize, lower;
        win_title = 'CONTROL';
        output = promenna;
        mode = turn;
        content = max;
        change_icon = CONTROL.ICO;
        receivers = id_2;
        colors
          mark = black;
        end_colors;
      end_control;

### Nativní procedury přístroje control

    Update()

Nastavení ovládacího prvku podle aktuálního stavu jeho výstupního datového elementu včetně překreslení přístroje v novém stavu.

    Update( SetOutput : boolean )

Nastavení přístroje podle aktuálního stavu jeho výstupního datového elementu. Parametr SetOutput určuje, budou-li nová data zpětně zapsána do výstupního datového elementu.

    SetValue( Value : real )

Nastavení ovládacího prvku na novou hodnotu Value včetně zápisu této hodnoty do výstupního datového elementu.

    SetRange( RangeFrom, RangeTo : real )

Nastavení číselného rozsahu přístroje.

    MoveTo( x, y : real )

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

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

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

    Hide()

Skrytí viditelného přístroje.

    Show()

Zobrazení skrytého přístroje.

    Select()

Přístroj je vybrán, takže do něj přichází všechny události od klávesnice. Přístroj má smysl vybrat, jen je-li ve viditelném panelu a je-li sám viditelný. Má-li přístroj nastaven parametr tab_select, je možno jej ve vybraném stavu plně ovládat klávesnicí.

    Disable()

Zablokování přístroje. Po zavolání této metody aktivní plocha ovládacího prvku sešedne (bude překryta 50% rastrem) a přístroj nebude reagovat na některé události od myši a klávesnice.

    Enable()

Odblokování přístroje dříve zablokovaného metodou Disable(). Objekt se překreslí v původním vzhledu.

    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 control

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

    OnOutput( Output : real )

Procedura je zavolána před každým zápisem do výstupního datového elementu. V proměnné Output je hodnota, které bude bude 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 pouze před takovým zápisem do výstupního datového elementu, kdy se nová hodnota liší od hodnoty ve výstupním datovém elementu. Proměnná Output je naplněna hodnotou, která bude bude po dokončení procedury zapsána do výstupního datového elementu. Toto hodnotu je možno v proceduře změnit.