4.14. Funkce pro jednoduché posouvání políčka
V prvních verzích operačního systému PalmOS se vyskytoval jen jediný způsob posouvání políčka nahoru a dolů. Bylo jím použití opakovacích tlačítek s trojúhelníčky směřujícími nahoru a dolů. Pokud pohyb textu daným směrem nebyl možný, byla tlačítka zobrazena v šedé barvě (vytečkována).
Operační systém počítačů Palm Pilot obsahuje několik funkcí, které tento způsob rolování políčka významně zjednodušují. První si uvedeme funkci FldScrollable(), která ověřuje, zda je možné text v políčku posunout příslušným směrem nahoru nebo dolů.
Boolean FldScrollable(const FieldType* políčko, WinDirectionType směr) Zjistí, zda je možné textem v políčku posunout příslušným směrem. | |
Vstupní parametry |
|
Vrácená hodnota |
|
Pokud jsme voláním funkce FldScrollable() ověřili, že je text v políčku možné posunout nahoru nebo dolů, můžeme zavolat funkci FldScrollField(), která text v políčku posune. Funkce FldScrollField() posune text v políčku a obnoví obsah displeje. Pokud políčko není možno zadaným směrem posunout, funkce skončí, aniž by cokoliv udělala.
void FldScrollField(FieldType* políčko, UInt16 početŘádků, WinDirectionType směr) Posune text v políčku nahoru nebo dolů. | |
Vstupní parametry |
|
Jak ale zjistíme, o kolik řádků je potřeba text v políčku posunout při stisknutí tlačítka pro pohyb nahoru nebo dolů? Můžeme si například pamatovat výšku políčka v řádcích tak, jak jsme jej definovali v souboru prostředků aplikace. Jednodušší a elegantnější metoda je použít funkci FldGetVisibleLines(). Tato funkce vrátí výšku políčka v řádcích.
Poté můžeme políčko posunout o celou výšku stránky (o počet řádků políčka). Jinou možností je posunout políčko o výšku stránky zmenšenou o jedničku nebo o polovinu výšky stránky. Oba dva přístupy mají výhodu v tom, že uživatel vidí návaznost mezi stránkami; nevýhodou je pomalejší pohyb po stránkách.
UInt16 FldGetVisibleLines(const FieldType* políčko) Vrátí počet zobrazených řádků políčka. | |
Vstupní parametry |
|
Vrácená hodnota |
|
Popsané tři funkce slouží k zajištění pohybu textu v políčku nahoru a dolů. Poslední funkce, kterou popíšeme, nám zajistí úpravu zobrazení tlačítek pro posuv nahoru a dolů. Pokud není posuv daným směrem možný, mělo by tlačítko být zobrazené jako šedé (vytečkované).
void FrmUpdateScrollers(FormType *formulář, UInt16 indexNahoru, UInt16 indexDolů, Boolean mohuNahoru, Boolean mohuDolů) Upraví zobrazení opakovacích tlačítek podle možnosti posuvu textu v políčku. | |
Vstupní parametry |
|
Funkce FrmUpdateScrollers() vyžaduje jako parametry pořadové číslo prvku ve formuláři, které vrací funkce FrmGetObjectIndex(). Funkci FrmUpdateScrollers() voláme obvykle následujícím způsobem:
FormPtr formular = FrmGetActiveForm(); FieldPtr policko = FrmGetObjectPtr(formular, FrmGetObjectIndex(formular, VstupniPolicko)); FrmUpdateScrollers(formular, FrmGetObjectIndex(formular, TlacitkoNahoru), FrmGetObjectIndex(formular, TlacitkoDolu), FldScrollable(policko, winUp), FldScrollable(policko, winDown)); |
Funkci FrmUpdateScrollers() musíme volat vždy, změní-li se počet řádků v políčku (událost fldChangedEvent), nastavíme-li nový text do políčka nebo po stisknutí tlačítka pro stránkování nahoru a dolů.
K rolování textem políčka používáme nejen opakovací tlačítka, ale i hardwarová tlačítka. V příštím díle si povíme o události vstupu znaku a stisknutí tlačítka.