Aktualizováno v únoru 2019

      
 

   Základy programování - vidlácký experiment s objekty ...
 
Vidlácké kreslení objektů - rozhraní pro nastavování frekvence generátoru

V předchozím článku jsme si řekli, že objekty, resp. jejich prvky, jsou zapouzdřené prvky, které mají rozhraní a pomocí tohoto rozhraní (a nijak jinak) umožňují s nimi dělat. Odborně se říká, že s objekty modelujeme svůj program (já někdy říkám, že ho kreslíme) a pomocí tzv. metod nám objekty poskytují operace, které vykonávají. V Toolboxu Visula Basicu (Gambasu, Xojo) najdeme spoustu objektů. Před časem jsem potřeboval nastavovat kmitočet generátoru v rozsahu do 99.999 999 MHz z obrazovky laptopu.

Poznámka: Generátor komunikoval po sériovém portu, parametry rozhraní a protokol byly známé (to není předmětem dnešní úlohy, ale dostanem se k tomu).

Program na nastavování frekvence jsem potřeboval rychle nakreslit (namodelovat). Rychle, to znamená u rozhraní za hodinu a u protokolu za další. V Toolboxu Visual Basicu jsem však žádný vhodný prvek nenašel. Profesionální programátor by si ho možná začal psát a ladit v jiném prostředí a asi za měsíc by měl výsledek. Já to musel vyřídit supervidlácky. Nechtěl jsem se však vzdát jedné funkcionality, a sice, abych mohl frekvenci nastavovat svižně s kroky 1 Hz, 1 kHz, 1MHz, 1/10 MHz a 1/100 MHz. A také mít možnost zadat frekvenci napsáním hodnoty. V poměrně chudém Toolboxu Visual Basic 2008 jsem našel zajímavý objekt NumericUpDown. Nakreslil jsem uživatelské rozhraní, které vypadalo takto:

Program pro Windows (exe, cca 25 kB) lze stáhnout pro vyzkoušení rozhraní zde. Zdrojový projekt (zazipovaný, cca 250 kB) lze stáhnout k vyzkoušení zde.
Program jde spustit po stažení v Linuxu pomocí tzv. zavaděče Wine:

Jak to nakreslíme a jak to funguje?

Namalujeme vše v designéru Visual Basic:

Potom musíme vyplnit vlastnosti objektů, hodnoty, které budou načteny při startu Form1, a to vyplněním do tabulek Properties u všech objektů (Form1, Label1 až Labelx, NumericUpDown1 až 5, ...)
NumericUpDown1 se liší od ostatních velikostí (šířkou), která je dostatečná pro zobrazení číslic do rozsahu 99.999999, NumericUpDown2 až NumericUpDown5 jsou užší, nepotřebujeme, aby cokoliv zobrazovaly.

Zdůrazním zde důležitou vlastnost NumericUpDown.Increment. Jeho hodnota se u každého z objektů liší. Byly použity hodnoty Increment = 1; 0.1; 0.01; 0.001; 0.000001. Tabulky Properties jsou zde. Pokud jsou "vybrané" dva nebo více objektů, zůstávají políčka s rozdílnými hodnotami vlastnosti prázdná (poslední vpravo):

       

Bez psaní kódu to nepůjde :-)

Kód tvoří celkem 5 procedur, protože při nastavování frekvence rejdíme celkem s 5 objekty NumericUpDown1 až 5. V každé proceduře jsou pouze 4 dosazovací příkazy. První vypadá takto:

Na pravé straně každého dosazovacího příkazu je hodnota NumericUpDown boxu, jehož hodnotu měníme. V uvedeném obrázku prvního. Na levé straně jsou uvedeny vždy všechny ostatní NumericUpDown boxy, do kterých se musí změněná hodnota po rejdění každého z nich dosadit. Vystačíme tedy pouze s jediným typem příkazu, s dosazovacím příkazem. Celý kód, obsažený ve Form1 lze stáhnout zde.

Co je na programu nejvíc vidlácké?

Bylo použito celkem 5 NumericUpDown boxů. U každého byly nastavované různé parametry. Budiž, geometrické rozměry, polohu, to jsem nakreslil v GUI. U každého objektu však bylo třeba nastavit několik stejných výchozích hodnot (např. Value, Maximum, Minimum) a několik rozdílných hodnot (např. Increment). Vidlácké vyplnění tabulek bylo ještě použitelné, nikoliv přehledné. Přehlednější je napsat odpovídající dosazovací příkazy do Procedury Sub Form1_Load, která je prováděna při spuštění wokna Form1.

Tip 1: Přepište tak program jako domácí úkol.
Tip 2: Zhotovte obdobný program v Gambasu (pokud máte někde nainstalovaný Linux).

Poznámka 1: Všiml jsem si, že administrátoři složitých serverů provádějí nastavování parametrů editací konfiguračních souborů. Je to přehlednější, než hledat v mnoha formulářích, které obsahují proměnné, které ani nechceme měnit.

 

Zpět na obsah


TU 73, Mira, ok1ufc