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

Nový „levný“ iPhone má být hit. Prodat se ho má 100 milionů

Trojice iPhonů pro rok 2018

Apple chystá na letošní rok tři nové iPhony. Jedním z nich má být levnější model, který nebude mít OLED displej. A...

Vytrolil T-Mobile, koupil doménu z reklamy a přesměroval ji na konkurenci

T-Mobile Hotel Růženka

Nová reklamní kampaň T-Mobilu se odehrává ve smyšleném horském hotelu Růženka. Ovšem když zkusíte doménu...



Nepoužívejte smartphony Huawei a ZTE, varují Američany FBI, CIA i NSA

Huawei Mate 10 Pro bude v USA k dostání u BestBuy

Huawei chtěl letos vzít útokem Spojené státy, a to s pomocí tamních klíčových operátorů. Z možné dohody však nakonec...

Vodafone kouzlí s neomezeným tarifem. Nestojí ani 500 korun

Vodafone nabízí ve svém e-shopu speciální neomezený tarif.

Pokud jste si chtěli pořídit neomezený tarif od Vodafonu, museli jste dosud počítat s měsíčním poplatkem ve výši...

Lidé si stěžovali na špatný signál. Rušil ho těžař bitcoinů

(Ilustrační snímek)

Newyorští zákazníci amerického operátora T-Mobile si stěžovali na znatelný šum během telefonních hovorů. Ukázalo se, že...

Další z rubriky

Aplikace ukazovala otravující čísla. Data kradl antivir přímo z mobilů

Škodlivý kód Cooligan napadá zařízení s Androidem 4 a 5

Zajímavý model vymyslelo studio DU. Jedna jejich android aplikace ukazovala, kdo volá, včetně obtěžujících čísel...

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

Ušetříte za mobilní data. Facebook vám ukáže bezplatnou wi-fi

Find Wifi funkce na Facebooku

V aplikaci sociální sítě Facebook se objevila nová užitečná funkce - dovede vás nasměrovat k nejbližší veřejné wi-fi...

Takový normální porod
Takový normální porod

O porodu s časovým odstupem, nadhledem a snad i s vtipným podextem píše uživatelka eMimino.cz.



Najdete na iDNES.cz