Premium

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

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

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

Na zboží z Temu jsme zírali s hrůzou. Značková konkurence je úplně jinde

10. dubna 2024

Ceny mohou vypadat lákavě, ale výsledek nás opravdu nemile překvapil. Porovnali jsme značkové...

Neomezená data dává O2 ještě levněji než dříve. S odměnou jsou za hubičku

15. dubna 2024  7:02

Základní datově neomezený tarif za cenu nižší, než standardně stojí tarif s 12 GB dat? U O2 na...

{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 jsou nejprodávanější mobily všech dob. Vévodí jim léta tápající značka

9. dubna 2024

Čtyři desetiletí stačila, aby se mobilní cihly, jak se někdejším mobilům kvůli jejich robustnosti...

Apple ukázal, že přejít na iPhone 15 Pro z předchůdce nemá smysl

11. dubna 2024

Apple na svém webu zveřejnil nástroj pro snadné srovnání vybraných modelů iPhonu. Uživatelé...

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

K mobilu teď dostanete televizi zdarma a levnější jsou také iPhony

16. dubna 2024,  aktualizováno  10:12

Výrobci mobilních telefonů se už zase začínají předhánět ve výhodných nabídkách. Přímé slevy jsou...

K mobilu teď dostanete televizi zdarma a levnější jsou také iPhony

16. dubna 2024,  aktualizováno  10:12

Výrobci mobilních telefonů se už zase začínají předhánět ve výhodných nabídkách. Přímé slevy jsou...

Samsung už je zase jednička, prodeje smartphonů meziročně rostou

16. dubna 2024  7:02

Společnost Samsung se vrací do vedoucí pozice na trhu s chytrými telefony. Celkové prodeje...

Neomezená data dává O2 ještě levněji než dříve. S odměnou jsou za hubičku

15. dubna 2024  7:02

Základní datově neomezený tarif za cenu nižší, než standardně stojí tarif s 12 GB dat? U O2 na...

Nemáte hluboko do kapsy? Tak si vyberte jeden z těchto telefonů

15. dubna 2024

Jsou to ty nejdražší, ale i nejlépe vybavené smartphony, které si aktuálně můžete koupit. A rovnou...

Čechy poznám podle outdoorové módy. Nosí ji bohužel i ženy, říká Kerekes

Vica Kerekes (43) si postěžovala na to, že Češi nosí outdoorové oblečení často i na místa, která k tomu nejsou vhodná...

Náhle zemřel zpěvák Maxim Turbulenc Daniel Vali, bylo mu 53 let

Ve věku 53 let zemřel zpěvák skupiny Maxim Turbulenc Daniel Vali. Letos by se svou kapelou oslavil 30 let na scéně....

Rohlík pro dítě, nákup do kočárku. Co v obchodě projde a kdy už hrozí právník?

V obchodech platí pravidla, která občas zákazník nedodržuje. Někdy se navoní parfémem, aniž by použil tester, nebo...

Roman Šebrle ukázal novou lásku, s kolegyní z práce vyrazili do Málagy

Roman Šebrle (49) je po čase opět šťastně zadaný. Jeho partnerka se na Instagramu pochlubila společnou fotkou z...

Ve StarDance zatančí Vondráčková, Paulová, hvězda Kukaček i mistryně světa

Tuzemská verze celosvětově mimořádně úspěšné soutěže StarDance britské veřejnoprávní televizní společnosti BBC se už na...