Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu

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

aktualizováno 
Dnes dokončíme popis jednoduchého stránkování a doplníme zdrojový text o stránkování ve vstupním formuláři.

4.16. Stránkování pomocí opakovacích tlačítek

Pokud chceme náš formulář doplnit o nejjednodušší metodu posouvání textu v políčku nahoru a dolů, musíme splnit několik podmínek. Nejprve musíme zkontrolovat, zda je v souboru prostředků aplikace definováno příslušné políčko pro editaci textu s vlastností MULTIPLELINES. V blízkosti políčka musí být dvě opakovací tlačítka s šipkami nahoru a dolů. Tato opakující tlačítka budou obsahovat znaky na první a druhé pozici písma obsahujícího symboly (písmo číslo 5).

FORM ID FormularVstupni AT (0 0 160 160)
BEGIN
...
    FIELD ID PoleTextVstupni AT (...) MULTIPLELINES 
    REPEATBUTTON "\001" ID OpakujTextNahoru AT (...) NOFRAME FONT 5
    REPEATBUTTON "\002" ID OpakujTextDolu AT (...) NOFRAME FONT 5
...
END

Opakovací tlačítka většinou umisťujeme pod pravý roh políčka, ke kterému patří. Vlastnost NOFRAME určuje, že opakovací tlačítka si nepřejeme orámovat.

Do zdrojového textu naší aplikace musíme doplnit zpracování zpráv ctlRepeatEvent a keyDownEvent. Jako reakci na stisknutí opakovacího tlačítka nebo hardvarové klávesy pro stránkování musíme posunout text v políčku funkcí FldScrollField(). Text posouváme o stránku nahoru nebo dolů. Počet řádků, o které text v políčku posouváme nahoru nebo dolů, zjistíme funkcí FldGetVisibleLines().

Můžeme napsat pomocnou obalující funkci, která posune text v políčku nahoru nebo dolů. Tuto funkci budeme volat při jakémkoliv posunutí textu v políčku.

void PosunTextOStranku(UInt16 idPolicka, WinDirectionType smer)
{
    FieldPtr policko = (FieldPtr)Objekt(idPolicka);
    UInt16 radky;

    if(policko)
    {
        radky = FldGetVisibleLines(policko);
        FldScrollField(policko, radky, smer);
    }
}

Pomocnou obalující funkci PosunTextOStranku() budeme volat při zpracování událostí stisknutí hardwarových kláves pro posuv nahoru nebo dolů. Parametr smer může nabývat hodnot winUp nebo winDown.

static Boolean UdalostVstupnihoFormulare(EventPtr udalost)
{
    Boolean zpracovano = false;

    switch(udalost->eType)
    {
        ...
		 					  
        case keyDownEvent:

            // Stisk klávesy - zajímají nás pouze hardwarové klávesy

            switch(udalost->data.keyDown.chr)
            {
                case vchrPageUp:
                    PosunTextOStranku(PoleTextVstupni, winUp);
                    zpracovano = true;
                    break;

                case vchrPageDown:
                    PosunTextOStranku(PoleTextVstupni, winDown);
                    zpracovano = true;
                    break;

                default:
                    break;
            }
            break;
    }
...

Podobně budeme postupovat i při zpracování zprávy ctlRepeatEvent. Nesmíme však zapomenout nenastavovat při zpracování události stisknutí opakovacích tlačítek příznak zpracování události. Pokud funkce formuláře vrátí nenulovou hodnotu, nebude se operační systém již zpracovávanou událostí zabývat. Při stisknutí opakovacích tlačítek však potřebujeme, aby se operační systém PalmOS postaral o automatické opakování, a funkce formuláře musí vrátit hodnotu false.

static Boolean UdalostVstupnihoFormulare(EventPtr udalost)
{
    Boolean zpracovano = false;

    switch(udalost->eType)
    {
        ...
    
        case ctlRepeatEvent:

            // Strankovani nahoru a dolu pomoci tlacitek

            switch(udalost->data.ctlRepeat.controlID)
            {
                case OpakujTextNahoru:
                    PosunTextOStranku(PoleTextVstupni, winUp);
                    break;

                case OpakujTextDolu:
                    PosunTextOStranku(PoleTextVstupni, winDown);
                    break;

                default:
                    break;
            }
			
                // Nesmí být nastaven příznak zpracováno

            break;

        default:
            break;
    }

    return zpracovano;
}

Ještě musíme vyřešit poslední úkol: upravit po každé změně textu v políčku zobrazení opakujících tlačítek. Opakující tlačítka pro posuv textu nahoru a dolů informují uživatele o tom, zda může posunovat text nahoru nebo dolů. Příkazy pro úpravu zobrazení opakovacích tlačítek jsme již v této kapitole uváděli. Doplníme náš zdrojový text o další pomocnou funkci, která bude upravovat zobrazení opakujících tlačítek v uávislosti na textu v políčku.

void UpravTlacitkaStrankovani(UInt16 idPolicka, UInt16 idNahoru, UInt16 idDolu)
{
    FormPtr formular = FrmGetActiveForm();
    FieldPtr policko = (FieldPtr)Objekt(idPolicka);

    if(policko)
    {
        FrmUpdateScrollers(formular,
            FrmGetObjectIndex(formular, idNahoru),
            FrmGetObjectIndex(formular, idDolu),
            FldScrollable(policko, winUp),
            FldScrollable(policko, winDown));
	}
}

Popsané funkci UpravTlacitkaStrankovani() předáme čísla prostředků jak políčka, tak obou opakujících tlačítek. Tuto funkci musíme zavolat po každé úpravě textu v políčku: přidání nebo vymazání znaku, táhnutí perem v políčku, stisknutí stránkovacího tlačítka. Nejjednodušší je volat funkci UpravTlacitkaStrankovani() při každém volání funkce formuláře.

static Boolean UdalostVstupnihoFormulare(EventPtr udalost)
{
    Boolean zpracovano = false;

    switch(udalost->eType)
    {
        ...
	
        default:
            break;
    }

        // Voláme při každém průběhu funkcí formuláře 
		
    UpravTlacitkaStrankovani(PoleTextVstupni, OpakujTextNahoru, OpakujTextDolu);

    return zpracovano;
}

Kompletní zdrojový text aplikace, ve které je doplněno jednoduché stránkování pomocí opakovacích tlačítek, si můžete prohlédnout zde.


Příště přikročíme k popisu posouvání textu v políčku pomocí posuvníku.



Nejčtenější

Takto vypadá boj o zákazníky: pětkrát více dat a úhrada smluvní pokuty

Slovenský operátor O2 navýšil základní data u vybraných tarifů

Od revoluce v roce 2013 zažívá český mobilní trh spíše menší otřesy, zákazníci operátorů toužící po neomezeném tarifu s...

Huawei se směje Applu. Lidem ve frontě na iPhony rozdával občerstvení

Huawei rozdával čekajícím ve frontě na nové iPhony džus a nabíjel jejich...

Minulý pátek se zájemci o nové iPhony tradičně postavili do front, aby mohli mít nový smartphone mezi prvními. Toho...



Konkurence se trefuje do „předražených“ nových iPhonů

Všechny tyto produkty Xiaomi stojí stejně, jako nový model iPhone XR

Na vysoké ceny novinek od Applu reagovali konkurenti poněkud posměšnými nabídkami. Ukazují v nich, co všechno z jejich...

Feministky kritizují nové iPhony. Jsou moc velké na ženskou ruku

iPhone XS/XS Max

Od doby, kdy Apple upustil od malých smartphonů, úhlopříčka nových modelů prudce narůstá. Nejnovější model ve verzi Max...

Toto je prapředek vašich smartphonů. První android slaví 10 let

T-Mobile G1

Prvnímu mobilnímu telefonu s operačním systémem Android je 10 let. Stroj známý jako T-Mobile G1 byl totiž představen...

Další z rubriky

Záchranku volejte přes aplikaci. Pomoc je rychlejší než při volání na 155

Simulovaná dopravní nehoda jako praktická ukázka fungování mobilní aplikace...

„Záchranná služba, tísňová linka, dobrý den,“ ohlašuje se operátorka volajícímu, který se stal svědkem dopravní nehody....

Google loni zlikvidoval 700 tisíc aplikací

Mobilní aplikace

Z aplikačního obchodu Google Play bylo loni odstraněno 700 tisíc aplikací, většina zmizela prakticky ihned po umístění...

Na aplikace alternativních taxi útočí virus. Pase po údajích ke kartám

Virus pro Android

Uživatelé mobilních aplikací alternativních taxi včetně aplikace Uber by měli být obezřetní. Ohrožuje je totiž nový...

Najdete na iDNES.cz