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

aktualizováno 
Dnešní 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.

4.9. Nastavování textu v políčku

Pro nastavování textu v políčku můžeme - podobně jako pro čtení - použít jak ovladač bloku paměti, tak přímo adresu textu. Tyto způsoby ale nemůžeme použít oba u jednoho políčka.

void FldSetTextPtr(FieldType* políčko, Char* text)

Nastaví ukazatel na text políčka.

Vstupní parametry
  • políčko - ukazatel na datovou strukturu FieldType, ve které jsou uložena data políčka
  • text - ukazatel na text, který si přejeme v políčku zobrazit nebo NULL pokud chceme text políčka vymazat.

Funkce FldSetTextPtr() je určena pro nastavování textu v políčkách, která nedovolíme uživateli měnit. Tato políčka můžeme použít pro text, který chceme jen zobrazit ve formuláři. Chceme-li text políčka vymazat, můžeme použít příkaz FldSetTextPtr(policko, NULL).

Pokud se rozhodneme nastavovat text políčka funkcí FldSetTextPtr(), tak musíme zajistit, aby byl ukazatel na text, který jsme funkci předali, po celou dobu zobrazení formuláře stále platný. Po nastavení textu políčka funkcí FldSetTextPtr() není změněn text na displeji. Po nastavení textu musíme sami zavolat funkci FldDrawField(), která políčko na displeji vymažou a vykreslí s novým textem.

void FldSetTextHandle(FieldType* políčko, MemHandle ovladač)

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

Vstupní parametry
  • políčko - ukazatel na datovou strukturu FieldType, ve které jsou uložena data políčka
  • ovladač - ovladač bloku paměti, ve kterém je uložen nový text políčka.

Funkci FldSetTextHandle() můžeme použít k nastavení textu všech textových políček - editovatelných i těch, která uživatel programu nemůže měnit. Podobně jako předchozí funkce i funkce FldSetTextHandle() neobnovuje obsah displeje; po nastavení nového textu políčka musíme zavolat FldDrawField() k překreslení políčka.

Předáme-li funkci FldSetTextHandle() hodnotu NULL jako nový ovladač bloku paměti, bude text políčka vymazán. S použitím této funkce je svázána ještě jedna komplikace, kterou musíme vzít v úvahu: musíme vrátit systému nepoužité bloky paměti.

Ovladač bloku paměti, ve kterém je uložen text políčka, je uložen v datové struktuře FieldType. Při zrušení formuláře, ve kterém jsme políčko umístili, je tento blok paměti automaticky vrácen operačnímu systému. Pokud však předáme operačnímu systému nový blok paměti, ve kterém bude text políčka, tak se o vrácení původního bloku paměti operačnímu systému musíme postarat sami.

Chceme-li tedy úspěšně nastavit nový text políčka pomocí funkce FldSetTextHandle() musíme udělat následující:

  1. Vytvořit blok paměti, do kterého uložíme nový text políčka. Tento blok musí obsahovat text políčka a ukončující znak '\0'.
  2. Zjistit původní ovladač bloku paměti, ve kterém je text políčka, funkcí FldGetTextHandle().
  3. Připojit funkcí FldSetTextHandle() k políčku nově vytvořený blok paměti.
  4. Překreslit políčko.
  5. Zrušit blok paměti, ve kterém byl uložen starý text políčka.
void NastavTextPolicka(FieldPtr policko, CharPtr text)
{
    MemHandle novyOvladac, staryOvladac;

	novyOvladac = (Handle)MemHandleNew(StrLen(text) + 1);
	StrCopy((CharPtr)MemHandleLock(novyOvladac), text);
	MemHandleUnlock(novyOvladac);

    staryOvladac = FldGetTextHandle(policko);
    FldSetTextHandle(policko, novyOvladac);
    FldDrawField(policko);

    if(staryOvladac)
    {
        MemHandleFree(staryOvladac);
    }
}

Celý postup je zřejmý z předchozí obalující funkce. Pokud zapomeneme vrátit operačnímu systému blok, ve kterém byl původní text, bude postupně ubývat volná paměť. V původní dokumentaci je uvedeno, že při překreslení políčka jej musíme nejprve vymazat a poté vykreslit znovu. Funkce FldDrawField() však obstarává překreslování políček zcela sama a nevyžaduje předchozí vymazání políčka.


V příštím dílu si uvedeme základní sadu obalujících funkcí pro práci s políčky. Povíme si o tom, kam do zdrojového textu umístit příkazy, a doplníme program o jednoduché čtení a nastavování textu políček.



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

Španěl prodává sbírku nerozbalených iPhonů. Za cenu ojetého ferrari

Španěl prodává unikátní sbírku iPhonů za téměř 100 tisíc eur.

Aukční portál eBay je nepřebernou studnicí zajímavých, ale mnohdy i šokujících inzerátů. Nabídku prodejce ze španělské...

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

Další z rubriky

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

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

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

Najdete na iDNES.cz