Programování pro PalmOS počítače krok za krokem (52)

V tomto dílu si doplníme náš šifrovací program o obsluhu posuvníku, který je ve formuláři pro zobrazení výsledků.

4.20 Použití posuvníku v naší aplikaci

Nyní zcela opustíme historickou techniku stránkování pomocí opakovacích tlačítek a použijeme posuvník ve vstupním i výstupním formuláři. Začneme drobnou změnou souboru prostředků aplikace. Změna se bude týkat vstupního formuláře, ve kterém vynecháme opakovací tlačítka a vedle textu zobrazíme posuvník.

FORM ID FormularVstupni AT (0 0 160 160)
BEGIN
    ...
    FIELD ID PoleTextVstupni AT (5 30 145 88) HASSCROLLBAR ... 
    SCROLLBAR ID PosuvnikTextVstupni AT (RIGHT@159 PREVTOP 7 PREVHEIGHT) ... 
    ...
END

Změní se výška políčka a vedle políčka bude zobrazen posuvník. Všimněte si, že definice posuvníku kopíruje výšku políčka a jeho pravý okraj je zarovnán s pravým okrajem formuláře. Tato definice kopíruje definici políčka a posuvníku, kterou jsme uváděli ve výstupním formuláři. Upravený vstupní formulář bude na displeji vypadat takto:

Z původního zdrojového textu použijeme funkci PosunTextOStranku(). Tuto funkci budeme používat při stránkování pomocí hardwarových kláves.

Pro pohyb pomocí posuvníku budeme potřebovat doplnit ještě jednu funkci. Bude jí funkce PosunTextORozdil(). Nově definovaná funkce bude jako parametr vyžadovat počet řádků, o které budeme text v políčku posouvat. Bude-li počet řádků kladný, posouváme text směrem dolů; pro záporný počet řádků budeme text posouvat nahoru.

void PosunTextORozdil(UInt16 polickoID, Int16 rozdil)
{
    WinDirectionType smer = winDown;
    FieldPtr policko = (FieldPtr)Objekt(polickoID);

    if(rozdil < 0)
    {
        smer = winUp;
        rozdil = -rozdil;
    }

	// Pokud bude možné text posunout, posuneme jej
	
    if(FldScrollable(policko, smer))
    {
        FldScrollField(policko, rozdil, smer);
    }
}

Pro úpravu pozice vozíku posuvníku použijeme funkci UpravPosuvnikDlePolicka(), kterou jsme si uvedli výše. Ve funkci provedeme pouze jednoduchou úpravu tak, aby jako parametry požadovala konstanty pro jednoznačnou identifikaci políčka a posuvníku.

Uvedené tři funkce (PosunTextORozdil(), PosunTextOStranku() a UpravPosuvnikDlePolicka()) použijeme ve funkci formuláře. V následující tabulce uvedeme události, které budeme zpracovávat, a reakce na ně.

Zpráva Chování programu
frmOpenEvent Po nastavení textu políčka upravíme zobrazení posuvníku voláním funkce UpravPosuvnikDlePolicka().
sclRepeatEvent Spočteme z dat předaných ve zprávě počet řádků, o které budeme políčko posouvat, a zavoláme funkci PosunPolickoORozdil().
keyDownEvent Podle stisknuté klávesy zavoláme funkci PosunPolickoOStranku() pro odstránkování políčka. Poté upravíme zobrazení posuvníku funkcí UpravPosuvnikDlePolicka().
fldChangedEvent Upravíme zobrazení posuvníku voláním funkce UpravPosuvnikDlePolicka().

Pokud bychom při definici políčka zapomněli na vlastnost HASSCROLLBAR, nebude posuvník pracovat správně. Zapíšeme-li na konec políčka znak, kterým text políčka posuneme, nebude naší aplikaci zaslána zpráva fldChangedEvent a zobrazení posuvníku nebude upraveno.

V následujícím rámečku si uvedeme příklad funkce vstupního formuláře.

Zdrojový text aplikace si můžete stáhnout zde.


V příštím dílu si povíme o uživatelské nabídce (menu) a připomeneme si její definici v souboru prostředků aplikace.