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

Berte, dokud je. Mobil pro fajnšmekry po neúspěchu drasticky zlevnil

Essential PH-1

Keramické tělo, jeden z nejmodernějších procesorů, 128 GB vnitřní paměti a velký displej s tenkými rámečky a...

Drsná metoda autoškoly, žáci museli položit své mobily na silnici

Neobvyklý způsob učení parkování v čínské autoškole

V čínské autoškole vymysleli originální způsob, jak naučit studenty velmi opatrně zaparkovat. Na čáry vyhrazené pro...



Američtí teenageři se mohou z iPhonů zbláznit. A zájem roste

iPhone 8 Plus v Drážďanech

Ve Spojených státech je mezi mladými uživateli smartphonů enormní zájem o iPhony - v současnosti je vlastní 82 procent...

Nejnovější smartphone od Samsungu se nedokáže připojit k internetu

Samsung Galaxy J2 Pro ve verzi bez internetu

Samsung připravil smartphone, který by u nás ocenili možná jen senioři. Případně ti, kteří se obávají možného zneužití...

Bezplatná služba Spotify u O2 končí. Zatrhl ji ČTÚ

Operátor O2 nabízí zákazníkům prémiový účet Spotify na tři měsíce zdarma

Od června 2016 umožňovalo O2 zákazníkům využívat službu Spotify zcela bezplatně. Podle Českého telekomunikační úřadu...

Další z rubriky

Online randění pozastaveno. Facebook nechtěně odstřihl uživatele od Tinderu

Aplikace Tinder

Změna bezpečnostních nastavení Facebooku v reakci na nedávné skandály s úniky dat má celkem závažný důsledek pro ty,...

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 dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

Akční letáky
Akční letáky

Prohlédněte si akční letáky všech obchodů hezky na jednom místě!



Najdete na iDNES.cz