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

O2 mění identitu. Vrací se 26 let starý legendární slogan předchůdce

30. dubna 2024  14:13

Operátor O2 se bude prezentovat trochu jinak než doteď. Změna je to spíš evoluční, ale rozdílů si...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

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

Huawei šokuje novým supersmartphonem s vysouvacím fotoaparátem

1. května 2024  7:02

Huawei představil novou řadu Pura, která nahrazuje dřívější řadu P. Mezi novinkami z nové řady je i...

Xiaomi už se nebude držet zpátky. Pro řadu T chystá další prémiové funkce

26. dubna 2024

Smartphony řady T od Xiaomi mají vždy parádní výbavu, ale zároveň i pár kompromisů, aby trochu...

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

Váš iPhone může být hacknut, varuje Apple uživatele v desítkách zemích

27. dubna 2024

Jednotlivci z řad uživatelů iPhonů z více než devadesáti zemí světa obdrželi ve středu 10. dubna od...

Huawei šokuje novým supersmartphonem s vysouvacím fotoaparátem

1. května 2024  7:02

Huawei představil novou řadu Pura, která nahrazuje dřívější řadu P. Mezi novinkami z nové řady je i...

Nová sluchátka od neotřelého výrobce smartphonů zaujmou nejenom designem

1. května 2024

Výrobce Nothing chce být především designovou ikonou, a to jak v oblasti smartphonů, tak i dalšího...

O2 mění identitu. Vrací se 26 let starý legendární slogan předchůdce

30. dubna 2024  14:13

Operátor O2 se bude prezentovat trochu jinak než doteď. Změna je to spíš evoluční, ale rozdílů si...

Honor našel skulinu v testech. Tváří se jako nejlepší ve výdrži baterie

30. dubna 2024  7:02

Výrobci mobilních telefonů se snaží uživatele zaujmout všemi možnými způsoby. Těmi jsou samozřejmě...

10 nejčastějších podvodů na internetu: Dokážete ochránit sebe i svou rodinu?
10 nejčastějších podvodů na internetu: Dokážete ochránit sebe i svou rodinu?

V digitální éře, kde technologie proniká do všech aspektů našich životů, se také zvyšuje riziko podvodů. Od falešných e-mailů a inzerátů až po...

Natáčení Přátel bylo otřesné, vzpomíná herečka Olivia Williamsová

Britská herečka Olivia Williamsová (53) si ve čtvrté sérii sitcomu Přátelé zahrála epizodní roli jedné z družiček na...

Byli vedle ní samí ztroskotanci, vzpomíná Basiková na muže Bartošové

Byly každá z jiného těsta, ale hlavně se pohybovaly na opačných pólech hudebního spektra. Iveta Bartošová byla...

Autofotka: Sen z plakátů v kotrmelcích. Mladíček v tunelu rozbil Ferrari F40

Symbol italské nenažranosti se již skoro čtyři dekády pokouší zabít své řidiče. Jízda s Ferrari F40 bez posilovače...

Ukaž kozy, řvali na ni. Potřebovala jsem se obouchat, vzpomíná komička Macháčková

Rozstřel Pravidelně vystupuje v pořadu Comedy Club se svými stand-upy, za knihu Svatební historky aneb jak jsem se nevdala se...

Do Bolívie jsem odešla kvůli smrti rodičů, přiznala sestra Romana Vojtka

Mladší sestra herce Romana Vojtka (52) Edita Vojtková (49) je módní návrhářkou a žije v Bolívii. Do zahraničí odešla...