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ší

HTC U11
HTC může být od zítřka součástí Googlu. Očekává se zásadní oznámení

Tchajwanská burza přestane od zítřka kvůli velkému oznámení obchodovat akcie firmy HTC. Podle analytika agentury Bloomberg je část centrály firmy zavřená a...  celý článek

Ohnutý iPhone 6 Plus
Tři roky, nebo jeden? Apple má o životnosti iPhonu jasno, řekl u soudu

Apple iPhone je nejtrvanlivější zařízení na trhu, hlásil letos v srpnu viceprezident produktového marketingu firmy. A už v září se společnost u soudu brání, že...  celý článek

Huawei Mate 10
Poslední letošní supersmartphone uvede Huawei. Mate 10 je za dveřmi

Letošní sestava nejlepších smartphonů je téměř kompletní. Už se čeká jen na nové Pixely od Googlu a zejména na rodinu Mate 10 od čínského Huaweie. Ten bude...  celý článek

Apple Watch Series 3
Nové Watch nefungují, jak by měly. Apple připustil problémy s připojením

Již zítra začne Apple současně s iPhony 8 a 8 Plus prodávat také novou generaci chytrých hodinek Watch. Recenzenti ovšem jejich koupi nedoporučují, a to kvůli...  celý článek

HTC U11
HTC překvapí. Změnilo plány a letos ještě uvede tři modely

HTC možná začíná těžit z užší spolupráce s Googlem. Původně mělo letos představit jen několik smartphonů, které už známe. Ale nakonec v tomto roce dočkáme...  celý článek

Další z rubriky

Aplikace Facebook Messenger Lite je dostupná i v Česku
Šetří místo i data. Dietní Messenger od Facebooku je i v Česku

Facebook Messenger je jedním z nejpoužívanějších kecálků, ale ne všechny telefony si s ním poradí. Loni se tak zrodila myšlenka na odlehčenou verzi určenou pro...  celý článek

Logo aplikace Sarahah
Už přes ni vyhrožovali smrtí. Přesto je aplikace extrémně populární

Vysoký nárůst popularity zaznamenala aplikace Sarahah, určená k posílání anonymních zpráv. Ačkoliv se v posledních týdnech těší velké oblibě, zahaluje ji také...  celý článek

Ilustrační snímek
S těmito aplikacemi se o dovolené neztratíte. Najdou let i levný hotel

Místo slovníku, mapy a průvodce už řada lidí vyráží na dovolenou na neznámé místo jen se svým telefonem. V mnoha situacích je totiž neocenitelným pomocníkem....  celý článek

Najdete na iDNES.cz



mobilní verze
© 1999–2017 MAFRA, a. s., a dodavatelé Profimedia, Reuters, ČTK, AP. Jakékoliv užití obsahu včetně převzetí, šíření či dalšího zpřístupňování článků a fotografií je bez souhlasu MAFRA, a. s., zakázáno. Provozovatelem serveru iDNES.cz je MAFRA, a. s., se sídlem
Karla Engliše 519/11, 150 00 Praha 5, IČ: 45313351, zapsaná v obchodním rejstříku vedeném Městským soudem v Praze, oddíl B, vložka 1328. Vydavatelství MAFRA, a. s., je členem koncernu AGROFERT.