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

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

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 extrémně vylepšuje rodinné tarify. Zadarmo přidává 8 GB a VDSL

Vodafone (ilustrační fotografie)

Není obvyklé, aby operátor výrazně vylepšil tarif a nesáhl na cenu. V případě inovovaných rodinných tarifů Red+ tomu...

Teď přijde řada na naše peníze. V Číně totiž končí zlaté časy

Xiaomi Mi 6

Čínský trh s chytrými telefony je největší na světě, ale loni se podle všeho dostal do potíží. Po letech růstu přišel...

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

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

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