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

V tomto díle dokončíme popis funkcí manipulujících s kontrolními prvky formulářů popisem funkcí, které mění text v tlačítku a umožňují tlačítka schovávat a odkrývat.

3.18. Změna textu tlačítek a přepínačů

Každý zatím popisovaný kontrolní prvek formuláře obsahuje text, který je uveden v rámečku tlačítka či přepínače nebo vedle políčka k zaškrtnutí. Zobrazený text je definován v souboru prostředků aplikace.

Ve struktuře ControlPtr, ve které jsou uložena data kontrolních prvků formuláře, je uložen pouze ukazatel na tento text. Hodnotu ukazatele na text tlačítka, políčka pro výběr textu nebo jiného kontrolního prvku formuláře můžeme zjistit pomocí funkce CtlGetLabel().

const Char *CtlGetLabel(const ControlType *control)

Vrátí ukazatel na text kontrolního prvku formuláře.

Vstupní parametry
  • control - ukazatel na strukturu obsahující data kontrolního prvku formuláře
Vrácená hodnota
  • ukazatel na text tohoto kontrolního prvku formuláře

Text zobrazený v kontrolních prvcích formuláře je možné měnit pomocí funkce CtlSetLabel(). Situaci nám komplikuje, že nastavujeme pouze ukazatel na text. Text samotný musíme mít uložený v paměti v samostatné řetězcové proměnné a funkci CtlSetLabel() předávat jen ukazatel na něj.

void CtlSetLabel(ControlType *control, const Char *text)

Nastaví nový ukazatel popisku kontrolního prvku formuláře.

Vstupní parametry
  • control - ukazatel na datovou strukturu kontrolního prvku formuláře
  • text - nový ukazatel na řetězec ukončený znakem '\0', který bude zobrazen v tlačítku nebo přepínači, resp. vedle políčka k zaškrtnutí

Je-li to zapotřebí, tak funkce CtlSetLabel() překreslí prvek formuláře na displeji. Použití této funkce ilustruje následující kód, ve kterém používáme opět funkci Objekt(), kterou jsme definovali v dílu 3.8:

// Nesmíme zapomenout mít text tlačítka uložený v
// globální proměnné nebo v bloku paměti, a to
// pro každé tlačítko zvlášť

Char gTextTlacitkaJedna[30];
Char gTextTlacitkaDve[30];

void NastavTextTlacitkaJedna(Char* text)
{
    StrCopy(gTextTlacitkaJedna, text);
    CtlSetLabel((ControlPtr)Object(TlacitkoJedna), gTextTlacitkaJedna);	
}

void NastavTextTlacitkaDve(Char* text)
{
    StrCopy(gTextTlacitkaDve, text);
    CtlSetLabel((ControlPtr)Object(TlacitkoDve), gTextTlacitkaDve);	
}

// ...

Předchozí příklad měl za úkol ilustrovat základní problém při nastavování textu tlačítek: Pro každé tlačítko, jehož text měníme, musíme definovat pomocnou proměnnou, ve které bude text tlačítka uložen.

Později v této kapitole si uvedeme ještě další způsoby, jak ošetřit změnu textu tlačítka nebo přepínače.

3.19. Skrývání, odkrývání a překreslování kontrolních prvků formuláře

Pro skrývání a odkrývání kontrolních prvků formuláře můžeme použít hned čtyři funkce, jejichž vlastnosti jsou shrnuty v následující tabulce:

  Vymaže kontrolní prvek z displeje (prázdné místo vyplní barvou pozadí) Vykreslí kontrolní prvek na displeji
Změní pouze obsah displeje CtlEraseControl() CtlDrawControl()
Změní obsah displeje a upraví reakci na dotek perem CtlHideControl() CtlShowControl()

Funkce CtlDrawControl() a CtlEraseControl() pouze aktualizují obsah displeje. Při použití těchto funkcí se nemění ostatní vlastnosti kontrolního prvku - pokud funkcí CtlEraseControl() vymažeme tlačítko z displeje, tak se sice prvek z displeje vymaže, ale prázdné místo bude stále reagovat na dotek pera uživatele.

Také funkce CtlShowControl() a CtlHideControl() vykreslí (nebo smažou) prvek formuláře. Mimo to však nastaví také příslušný atribut datové struktury ControlType tak, aby tlačítko začalo (nebo přestalo) odpovídat na dotyk perem. Pokud tedy vymažeme tlačítko z displeje funkcí CtlHideControl(), tak se nejen vymaže z displeje, ale přestane i reagovat na akce uživatele.

void CtlDrawControl(ControlType *control)
void CtlEraseControl(ControlType *control)
void CtlShowControl(ControlType *control)
void CtlHideControl(ControlType *control)

Smaže nebo vykreslí kontrolní prvek formuláře na displeji.

Vstupní parametry
  • control - ukazatel na data kontrolního prvku formuláře

Chceme-li kontrolní prvek formuláře překreslit, zavoláme bezprostředně po sobě funkce CtlEraseControl() a CtlDrawControl(). První z nich vyplní oblast, kterou prvek zabíral, barvou pozadí a druhá funkce jej vykreslí na displeji. Pokud bychom prvek před vykreslením nesmazali, nakreslil by se nově vykreslovaný prvek přes ten starý.

Alternativní způsob změny textu tlačítek

Pokud na začátku programu nastavíme funkcí CtlSetLabel() novou adresu textu tlačítka a později tento text změníme, bude obsah displeje aktualizován až po překreslení tlačítka. Vhodným místem pro nastavení ukazatele na text tlačítek je zpracování zprávy frmOpenEvent ve funkci formuláře.

Touto metodou je možné ušetřit paměť při změnách textu tlačítka na místě. V našem programu využijeme právě tento způsob; v následujícím rámečku je celá metoda shrnuta:

// Text jednoho prepinace s cislem

Char gTextPrepinace[2] = "0";

Boolean UdalostHlavnihoFormulare(EventPtr udalost)
{
    switch(udalost->eType)
    {
        case frmOpenEvent:
		
            // Promenna gTextPrepinace bude po zavolani nasledujici 
            // funkce obsahovat text tlacitka PrepinacJedna (neboli
            // v tlacitku PrepinacJedna bude pote vzdy zobrazen text
            // ulozeny v promenne gTextPrepinace).

            CtlSetLabel((ControlPtr)Objekt(PrepinacJedna), gTextPrepinace);
            return true;
        ...
}

// Chceme-li zmenit cislo v prepinaci, tak nejprve zmenime
// obsah promenne, ktera obsahuje text prepinace a pote
// jej jednoduse prekreslime.  

void ZmenCisloVPrepinaci(UInt16 cislo)
{
    gTextPrepinace[0] = '0' + (cislo % 10);

    CtlEraseControl((ControlPtr)Objekt(PrepinacJedna));
    CtlDrawControl((ControlPtr)Objekt(PrepinacJedna));
}

V přepínači je zobrazena pouze jedna číslice, která je uložena v globální proměnné. Ve funkci formuláře nastavíme ukazatel na text tlačítka tak, aby ukazoval na tuto globální proměnnou. Pak kdykoliv

  1. změníme obsah globální proměnné
  2. překreslíme tlačítko (voláním CtlEraseControl() a CtlDrawControl()),

tak se bude měnit i obsah displeje - přesně podle našeho záměru.


Teď již známe všechny funkce, které budeme potřebovat při psaní našeho programu. V příštím dílu doplníme program o schopnost nastavování výšky matky a otce.

Autor:
  • Nejčtenější

V květnu se zřejmě vrátí ikonická Nokia 3210, kdysi to byl přelomový model

24. března 2024  8:01

Současný vlastník značky Nokia na poli mobilních telefonů, firma HMD (Human Mobile Devices –...

Banka spustila mobilní datové balíčky. Funguje to i zákazníkům z Česka

26. března 2024  12:06

Virtuální banka Revolut spouští virtuálního celosvětového operátora. Zákazníci si mohou kupovat...

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

Trvalo to. Nový nejlepší fotomobil světa konečně koupíte i v Česku

26. března 2024  7:02

Konečně nastává situace, že nejlepší fotomobil v žebříčku DxO Mark je dostupný i na našem trhu....

Smartphonům od Googlu raketově rostou prodeje tam, kde kraluje Apple

27. března 2024  7:02

Prodeje smartphonů Pixel od Googlu se mohou pochlubit neskutečným nárůstem prodejů. Tedy prozatím...

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

Pochlubili se, že se pochlubí. Značky ze sebe dělají slibotechny

25. března 2024  7:02

Jedním z trochu nečekaných trendů veletrhu MWC v Barceloně se stala oznámení o tom, že firmy nějaké...

Nová cenově dostupná stylovka vás může dostat na fotbalové Euro

29. března 2024

Vivo má nový smartphone střední třídy, který má velké ambice. Za rozumnou cenu nabídne nejen dobrou...

Toho telefonu je pouze pro Čínu škoda. Udělal by parádu i u nás

28. března 2024  12:06

Xiaomi má nový trhák. Model Civi 4 Pro trhá předprodejní rekordy, ale jen na domácím čínském trhu....

U foťáků se blýská na lepší časy, naznačuje výsledek testu nového xiaomi

28. března 2024  7:02

Čínská značka Xiaomi trochu na poli fotomobilů v uplynulých letech tápala. Ukazuje to mimo jiné...

Kartónek Steva Jobse se vydražil za neuvěřitelnou sumu

28. března 2024

Vizitku slavného ředitele společnosti Apple si někdo pořídil za pořádný balík peněz. Přidanou...

Akční letáky
Akční letáky

Všechny akční letáky na jednom místě!

Smoljak nechtěl Sobotu v Jáchymovi. Zničil jsi nám film, řekl mu

Příběh naivního vesnického mladíka Františka, který získá v Praze díky kondiciogramu nejen pracovní místo, ale i...

Rejžo, jdu do naha! Balzerová vzpomínala na nahou scénu v Zlatých úhořích

Eliška Balzerová (74) v 7 pádech Honzy Dědka přiznala, že dodnes neví, ve který den se narodila. Kromě toho, že...

Pliveme vám do piva. Centrum Málagy zaplavily nenávistné vzkazy turistům

Mezi turisticky oblíbené destinace se dlouhá léta řadí i španělská Málaga. Přístavní město na jihu země láká na...

Velikonoce 2024: Na Velký pátek bude otevřeno, v pondělí obchody zavřou

Otevírací doba v obchodech se řídí zákonem, který nařizuje, že obchody s plochou nad 200 čtverečních metrů musí mít...

Kam pro filmy bez Ulož.to? Přinášíme další várku streamovacích služeb do TV

S vhodnou aplikací na vás mohou v televizoru na stisk tlačítka čekat tisíce filmů, seriálů nebo divadelních...