Premium

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

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

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

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{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 zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

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

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

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

Toto mohl být nevídaný smartphone. Myšlenku však nakonec poslali k vodě

25. dubna 2024

S takovým smartphonem bychom už nikdy nemuseli řešit, že se zpomaluje, nemá dostatek paměti či je...

Samsung má povedenou stylovku. Zkusí to s ní na trhu, kde se mu nedaří

24. dubna 2024

Samsung po velmi dlouhé době oprášil modelovou řadu Galaxy C a představil stylový smartphone se...

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Manželé Babišovi se rozcházejí, přejí si zachovat rodinnou harmonii

Podnikatel, předseda ANO a bývalý premiér Andrej Babiš (69) s manželkou Monikou (49) v pátek oznámili, že se...

Bývalý fitness trenér Kavalír zrušil asistovanou sebevraždu, manželka je těhotná

Bývalý fitness trenér Jan Kavalír (33) trpí osmým rokem amyotrofickou laterální sklerózou. 19. dubna tohoto roku měl ve...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...