Premium

Získejte všechny články
jen za 89 Kč/měsíc

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

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

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Pošlete sportovní fotku a vyhrajte smartphone nebo dres Patrika Schicka

8. dubna 2024,  aktualizováno  18.4 13:04

Zachyťte na fotografii sportovní moment a vyhrajte úplnou novinku, smartphone vivo V40 SE s bohatou...

Toto mohl být nevídaný smartphone. Myšlenku však nakonec poslali k vodě

25. dubna 2024

S takovým smartphonem bychom už nikdy nemuseli řešit, že se zpomaluje, nemá dostatek paměti či je...

Samsung má povedenou stylovku. Zkusí to s ní na trhu, kde se mu nedaří

24. dubna 2024

Samsung po velmi dlouhé době oprášil modelovou řadu Galaxy C a představil stylový smartphone se...

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Možná s nenápadnou výbavou, ale je to poctivě postavená stylovka

22. dubna 2024

Oppo se v kontextu dalších čínských výrobců prezentuje jako prémiová značka. Rozhodně se nesnaží o...

Slož puzzle a vyhraj jedinečné dárky od značky BEBELO
Slož puzzle a vyhraj jedinečné dárky od značky BEBELO

Každý den po celý tento týden můžete vyhrávat jedinečné dárky od značky BEBELO.

Manželé Babišovi se rozcházejí, přejí si zachovat rodinnou harmonii

Podnikatel, předseda ANO a bývalý premiér Andrej Babiš (69) s manželkou Monikou (49) v pátek oznámili, že se...

Bývalý fitness trenér Kavalír zrušil asistovanou sebevraždu, manželka je těhotná

Bývalý fitness trenér Jan Kavalír (33) trpí osmým rokem amyotrofickou laterální sklerózou. 19. dubna tohoto roku měl ve...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...