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

aktualizováno 
V tomto díle si povíme o tom, jak je text v políčku uložen a jak je možné jej nastavovat a číst. Obojí budeme v naší aplikaci potřebovat.

4.7. Uložení textu políčka

V datové struktuře FieldType je uložen ovladač přemístitelného bloku paměti, ve kterém je uložen text políčka. Operační systém PalmOS je navržen tak, aby co nejvíce šetřil pamětí. Pokud je políčko prázdné, není k němu přiřazen žádný blok paměti. Vepíšeme-li do políčka první znak, vytvoří operační systém nový přemístitelný blok paměti, který bude obsahovat editovaný text. Ovladač nově vytvořeného bloku je poté uložen ve struktuře FieldType.

Velikost přemístitelného bloku paměti, ve kterém je uložen text políčka, se při editaci políčka průběžně mění. Blok paměti spojený s políčkem je vždy o něco větší, než je délka textu v políčku, a jeho velikost se zvětšuje nebo zmenšuje po skocích. K získání nebo nastavení ovladače bloku paměti spojeného s políčkem použijeme funkce FldGetTextHandle() a FldSetTextHandle().

U textových políček, která nemůžeme upravovat (jsou definovány s vlastností NONEDITABLE), je mezi daty políčka uložen nejen ovladač bloku textu, ale i adresa počátku textu v paměti. Text v těchto políčkách můžeme číst i nastavovat přímo pomocí funkcí FldGetTextPtr() a FldSetTextPtr().

Nastavování textu pomocí ovladačů (FldGetTextHandle() a FldSetTextHandle()) a pomocí ukazatele (FldGetTextPtr() a FldSetTextPtr()) nemůžeme kombinovat. Pokud je políčko možno upravovat (definováno s vlastností EDITABLE v souboru prostředků aplikace), použijeme k nastavení a čtení textu ovladače bloků paměti. Je-li naproti tomu políčko definováno tak, že jej nemůžeme změnit (vlastnost NONEDITABLE), můžeme použít jak ovladače bloků paměti, tak přímo řetězce. Tyto způsoby však u jednoho políčka nelze kombinovat.

4.8. Čtení textu políčka

K textu zobrazenému v políčku můžeme přistupovat buď prostřednictvím ovladače bloku paměti, nebo prostřednictvím ukazatele na text. Tyto způsoby však spolu nemůžeme kombinovat. První způsob (použití ovladačů) je vhodný pro políčka, která uživatel může měnit. Přístup k textu prostřednictvím ukazatele na text je vhodný pro políčka, která nelze editovat.

Char* FldGetTextPtr(FieldType* políčko)

Vrátí ukazatel na text políčka.

Vstupní parametry
  • políčko - ukazatel na datovou strukturu políčka
Vrácená hodnota
  • NULL - políčko je prázdné
  • Ukazatel na text políčka.

Použití funkce FldGetTextPtr() s sebou přináší jedno riziko. Pokud uživatel do políčka po zavolání funkce FldGetTextPtr() vepíše text, tak se může počáteční adresa bloku paměti, ve kterém je uložen text, změnit. Adresa vrácená funkcí FldGetTextPtr() pak ukazuje na již neplatný blok paměti a její použití způsobí systémovou chybu. Pro vzyvedávání textu z políček, která může uživatel měnit, doporučuji proto používat funkci FldGetTextHandle().

MemHandle FldGetTextHandle(const FieldType* políčko)

Vrátí ovladač bloku paměti, ve kterém je uložen text políčka.

Vstupní parametry
  • políčko - ukazatel na datovou strukturu políčka
Vrácená hodnota
  • NULL - políčko je prázdné
  • Ovladač bloku paměti, ve kterém je uložen text políčka.

Pokud chceme číst text políčka, které uživatel edituje pomocí funkce FldGetTextHandle(), tak musíme vrácený blok paměti před použitím uzamknout. Jednoduchý příklad vyzvednutí textu z editovatelného políčka je v následujícím rámečku:

void KopirujTextPolicka(FieldPtr policko, Char* kam)
{
    MemHandle ovladacTextu = FldGetTextHandle(policko);
    Char* textPolicka;

    if(ovladacTextu)
    {
        textPolicka = (Char*)MemHandleLock(ovladacTextu);
        StrCopy(kam, textPolicka);
        MemHandleUnlock(ovladacTextu);
    }
    else
    {
        // Ma-li ovladacTextu hodnotu NULL, je policko prazdne
 
        StrCopy(kam, "");
    }
}

V další kapitole si ukážeme dokonalejší obalující funkci pro vyzvedávání textu políčka. Funkci budeme jako parametry navíc předávat přímo hodnotu jednoznačné identifikace políčka a nejvyšší délku textu.

Délka textu v políčku

Pokud potřebujeme rychle zjistit délku textu, který je vepsán v políčku, použijeme funkci FldGetTextLength().

UInt16 FldGetTextLength(const FieldType* políčko)

Vstupní parametry
  • políčko - ukazatel na datovou strukturu políčka
Vrácená hodnota
  • Délka textu zapsaného v políčku.

Blok paměti, ve kterém je text uložen, má vždy stejnou nebo větší velikost, než je hodnota vrácená funkcí FldGetTextLength(). Najvyšší počet znaků, které můžeme do políčka vepsat, určujeme při definici políčka v souboru prostředků aplikace vlastností MAXCHARS n. Pokud by nás zajímala velikost bloku paměti, ve kterém je text políčka uložen, můžeme použít funkci FldGetTextAllocatedSize().


Příští díl věnujeme popisu toho, jak můžeme text v políčku nastavovat, a definujeme si několik dalších obalujících funkcí pro práci s políčky.



Nejčtenější

Google posílá vzkaz Evropské komisi. Takhle se bude bránit

Protikartelová komisařka Margrethe Vestagerová.

Google se s obří pokutou od Evropské komise nehodlá smířit. Firma se proti ní odvolá a chce Komisi dokázat, že systém...

Rekordní pokuta pro Google, za dominanci Androidu zaplatí 112 miliard

Ilustrační snímek

Evropská komise uložila internetovému gigantu Google další pokutu. Firma by měla platit za to, že zneužívá dominantního...



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

Jeden z nejočekávanějších mobilů roku. Nokia 8110 je chytrá jen trochu

Nokia 8110 4G

Retro model Nokia 8110 4G je možná jedním z nejočekávanějších mobilů letošního roku. V Česku se začal prodávat počátkem...

Ten určitě neznáte. Toto je úplně první dotykový mobil v Evropě

Alcatel One Touch Com a Sharp MC-G1

Před dvaceti lety se na trh dostal jedinečný mobilní telefon. Alcatel One Touch Com byl jedním z prvních přístrojů s...

Další z rubriky

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

Za 23 korun vám aplikace fotku z iPhonu ukáže až za tři dny

Netradiční fotoaplikace Gudak vás donutí nad fotkami zase přemýšlet

Vnímání fotografie se za posledních pár let výrazně změnilo. Díky záznamovým médiím již totiž nemusíme přemýšlet nad...

Sem chodí smartphony umřít. Aplikaci lze použít jen s vybitou baterií

Die With Me

Aplikace s názvem Umři se mnou má velmi neobvyklé omezení. Nemůžete ji zapnout, pokud máte telefon nabitý víc než na...

Najdete na iDNES.cz