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 (40)

aktualizováno 
Dnes si znovu připomeneme základní kostru programu a zkusíme si program spustit v emulátoru. Pak začneme s popisem zacházení s políčky textu.

4.3. Základ programu

Připravili jsme si soubor prostředků aplikace sifruj.rcp a hlavičkový soubor s čísly prostředků sifruj.h. Nyní vytvoříme základ programu, který se od programu v minulé kapitole bude lišit jen v použití dvou formulářů. V následujících několika odstavcích shrnu to, co už umíte udělat sami.

Vstupní bod programu - funkce PilotMain() -  zůstává stejná, podobně jako pomocné funkce ZacatekAplikace() a KonecAplikace(). Ve funkci ZacatekAplikace() nesmíme zapomenout přejít do prvního formuláře, který si přejeme zobrazit na displeji. Půjde o formulář FormularVstupni pro vstup hesla a textu.

Dále si definujeme dvě funkce formuláře - jednu pro formulář vstupní a jednu pro formulář zobrazující výsledný text. Vhodně je pojmenujeme a v každé z nich zpracujeme událost frmOpenEvent tak, že vykreslíme formulář na displeji.

V každé funkci formuláře zpracujeme zprávu ctlSelectEvent, která je zasílána naší aplikaci jako odpověď na stisk tlačítka. Stiskne-li uživatel příslušné tlačítko ve formuláři (nespleťte si, které tlačítko máte ve kterém formuláři), bude volat funkci FrmGotoForm(), kterou přejde do druhého formuláře. Příklad funkce výstupního formuláře je v rámečku:

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

    switch(udalost->eType)
    {
        case frmOpenEvent:
            FrmDrawForm(FrmGetActiveForm());
            zpracovano = true;
            break;

        case ctlSelectEvent:

                // Osetrime tlacitko (Sifruj) pro prechod zpet do druheho
                // formulare

            switch(udalost->data.ctlSelect.controlID)
            {
                case TlacitkoZpet:
                    FrmGotoForm(FormularVstupni);
                    zpracovano = true;
                    break;

                default:
                    break;
            }
            break;

        default:
            break;
    }

    return zpracovano;
}

Funkci ZpracovaniUdalosti() můžeme zkopírovat z programu v předchozí kapitole. Do funkce UdalostZpracovanaAplikaci() musíme však doplnit do příkazu case větve pro oba formuláře:

static Boolean UdalostZpracovanaAplikaci(EventPtr udalost)
{
    Boolean zpracovano = false;
    UInt16 cisloFormulare;
    FormPtr formular;

    if(udalost->eType == frmLoadEvent)
    {
        cisloFormulare = udalost->data.frmLoad.formID;
        formular = FrmInitForm(cisloFormulare);
        FrmSetActiveForm(formular);

        switch(cisloFormulare)
        {
            case FormularVstupni:
                FrmSetEventHandler(formular, UdalostVstupnihoFormulare);
                zpracovano = true;
                break;

            case FormularVystupni:
                FrmSetEventHandler(formular, UdalostVystupnihoFormulare);
                zpracovano = true;
                break;

            default:
                break;
        }
    }

    return zpracovano;
}

Tím máme zdrojový text programu kompletní a můžeme jej přeložit. Chybí jen maličkost: soubor Makefile. Jistě však přijdete na to, že je velmi jednoduchý a jeho napsání nezabere mnoho práce. Kompletní zdrojový text programu můžete stáhnout, prohlédnout a vyzkoušet zde.

4.4. Políčka

V příkladu jsme si mohli prohlédnout a vyzkoušet, jak fungují políčka pro vstup textu, která jsme umístili do formuláře, ale která ještě neumíme používat. Text je však už nyní možné zapisovat, označovat tažením perem a podobně.

Pro políčka v našem příkladu jsme použili vlastnost UNDERLINED, která určuje, že políčka pro vstup textu budou podtržená tečkovanou čarou. Tato políčka jsou na displeji zřetelně ohraničená a hodí se pro vstup textu. Pokud tuto vlastnost nepoužijeme, bude text zobrazen bez podtržení a uživatel bude mít potíže políčka na displeji nalézt.

Délka textu v políčku není omezena rozměry políčka na displeji; budeme-li zapisovat dlouhý text, bude se v jednořádkovém políčku posouvat. U víceřádkových políček se bude text správně lámat při pravém okraji. Bude-li text ve víceřádkovém políčku příliš dlouhý, bude políčko po řádcích rolovat nahoru a dolů. To vše řeší operační systém PalmOS zcela automaticky.

Ukazatel na data políčka

Data políčka jsou po inicializaci formuláře uložena ve struktuře FieldType. Ukazatel na tuto strukturu je datový typ FieldPtr. Funkce, které pracují s políčky, vyžadují jako parametr právě ukazatel na datovou strukturu políčka, tedy FieldPtr.

V minulé kapitole jsme si ukázali funkci FrmGetObjectPtr(), která vrátí ukazatel na data prvku formuláře. Tuto funkci můžeme použít i pro získání ukazatele na data políčka v závislosti na čísle prostředku. K tomu použijeme obalující funkci Objekt(), kterou jsme definovali v předchozí kapitole. Hodnotu, kterou funkce vrací, musíme jen přetypovat na typ FieldPtr.

MemPtr Objekt(UInt16 prvek)
{
    FormPtr formular = FrmGetActiveForm();
    return FrmGetObjectPtr(formular, FrmGetObjectIndex(formular, prvek));
}

FieldPtr policko = (FieldPtr)Objekt(PolickoVstup);

V příštím dílu si krátce povíme o zprávách, které jsou generovány při práci s políčky, a začneme mluvit o funkcích, které s políčky manipulují.



Nejčtenější

Tak bude vypadat letošní nejlevnější iPhone, zepředu připomíná desítku

Render chystaného LCD iPhonu s 6,1palcovým panelem ve společnosti menšího...

Uvedení nových iPhonů se blíží, jejich oficiální odhalení proběhne už za dva měsíce. Víme, že budou tři a alespoň z...

Blesková krádež. Zloději za 30 sekund vybílili obchod Applu

Blesková krádež v kalifornském Apple Storu

Skupina mužů za méně než minutu vykradla před očima zákazníků i personálu obchod Apple Store v kalifornském Fresnu....



Xiaomi pokračuje v dumpingových akcích. Redmi S2 bude za 300 korun

Nová prodejna mobilů v Olomouci přilákala stovky lidí

Agresivní marketing čínské značky v Česku pokračuje. Xiaomi otevírá třetí obchod a tradičně první den nabízí produkty s...

Novinka za 975 korun nahradí smartphone a nepotřebuje dotykový displej

JioPhone 2

Obyčejné mobily nejsou mrtvé. Právě naopak. Jestliže prodeje smartphonů stagnují, nebo na některých trzích dokonce...

Nový supersmartphone vysune kameru a nahrává uživatele bez jeho vědomí

Vivo NEX

V rámci právě skončeného mistrovství světa ve fotbalu byla hrací plocha obklopena panely s reklamami na nový čínský...

Další z rubriky

K používání aplikace WhatsApp vám nově musí být minimálně 16 let

Whatsapp bude umět zpětně vymazat odeslané zprávy

Chatovací služba WhatsApp mění podmínky používání v Evropské unii. Nově začíná platit, že pro používání služby vám musí...

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

S těmito aplikacemi se o dovolené neztratíte. Najdou let i levný hotel

Ilustrační snímek

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...

Najdete na iDNES.cz