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

aktualizováno 
Dnes si ukážeme, jak nastavovat a zjišťovat hodnotu přepínačů a políček k zaškrtnutí jednotlivě i po skupinách.

3.16. Čtení a nastavování hodnoty přepínačů a políček k zaškrtnutí

Přepínače i políčka k zaškrtnutí mohou být buď ve vypnutém, nebo v zapnutém (invertovaném nebo zaškrtnutém) stavu. Pomocí funkce CtlGetValue() je možné zjistit logickou hodnotu (true nebo false) odpovídající stavu tlačítka.

Int16 CtlGetValue(const ControlType *control)

Zjistí stav přepínače nebo políčka k zaškrtnutí.

Vstupní parametry
  • control - ukazatel na datovou strukturu ControlType přepínače nebo políčka k zaškrtnutí
Vrácená hodnota
  • 0 (false) - prvek je neaktivní
  • 1 (true) - prvek je aktivní (invertovaný nebo zaškrtnutý)

Stav přepínačů nebo políček k zaškrtnutí je možné i nastavit pomocí funkce CtlSetValue(). Této funkci předáme ukazatel na datovou strukturu příslušného prvku formuláře a logickou hodnotu odpovídající požadovanému novému stavu přepínače. O případné překreslení prvku formuláře na displeji se postará operační systém PalmOS sám.

void CtlSetValue(ControlType *control, Int16 hodnota)

Změní stav přepínače nebo políčka k zaškrtnutí a překreslí jej na displeji.

Vstupní parametry
  • control - ukazatel na datovou strukturu ControlType přepínače nebo políčka k zaškrtnutí
  • hodnota - nový stav (0 odpovídá vypnutému a nenulová hodnota odpovídá zapnutému ovládacímu prvku

Ukazatel na datovou strukturu přepínače nebo políčka k zaškrtnutí, který vyžadují funkce v této kapitole, získáme voláním funkcí FrmGetObjectPtr() a FrmGetObjectIndex(). Chceme-li hodnotu těchto prvků formuláře nastavit nebo číst v našem programu, budeme potřebovat funkci, která bude jako parametr požadovat spíše hodnotu jednoznačné identifikace prvku formuláře.

MemPtr Objekt(UInt16 prvek)
{
    FormPtr formular = FrmGetActiveForm();
    return FrmGetObjectPtr(formular, FrmGetObjectIndex(formular, prvek));
}

V oddíle 3.8. jsme si ukázali funkci Objekt(), která vrátí adresu kontrolní struktury prvku aktuálního formuláře v závislosti na jeho jednoznačné identifikaci. V programu můžeme tuto funkci použít dvěma způsoby. Pro každou funkci, která vyžaduje ukazatel na datovou strukturu, můžeme do programu začlenit příslušnou obalující funkci, která zjednoduší zápis programu jako v následujícím příkladu.

Termínem obalující funkce budeme rozumět takovou naši funkci, která slouží k zjednodušenému volání systémové funkce PalmOS. Důvodem pro vytváření obalujících funkcí je hlavně (jako v následujícím příkladu) zpřehlednění zápisu zdrojového textu programu.

Boolean Zaskrtnuto(UInt16 jednoznacneID)
{
    ControlPtr control = (ControlPtr)Objekt(jednoznacneID);
    return CtlGetValue(control);
}

// použití

    if(Zaskrtnuto(PolickoJedna))
    {
        // příkazy vykonávané, je-li políčko k zaškrtnutí aktivní
    }

Předchozí obalující funkci můžeme zjednodušit a použít příkaz preprocesoru jazyka C #define. Použití je stejné jako v předchozím příkladu:

#define Zaskrtnuto(policko) CtlGetValue((ControlPtr)Objekt(policko))

Třetí a nejméně přehledný způsob je uvádět funkci Objekt() (nebo podobnou) na každém řádku, například:

CtlSetValue((ControlType)Objekt(PrepinacJedna), true);
CtlSetValue((ControlType)Objekt(PrepinacDva), false);
...

3.17. Skupiny přepínačů nebo políček k zaškrtnutí

Pomocí vlastnosti GROUP můžeme v souboru prostředků aplikace vytvářet skupiny přepínačů nebo políček k zaškrtnutí. Z každé skupiny může být aktivní jen jediný prvek.

Ke zjištění, který prvek ze skupiny je aktivní, můžeme použít funkci CtlGetValue(). Pokud jsou ve skupině pouze dva prvky, je tento způsob výhodný; se stoupajícím počtem přepínačů nebo políček k zaškrtnutí ve skupině se však komplikuje.

Ke zjištění, který prvek ze skupiny je aktivní, slouží funkce FrmGetControlGroupSelection(). Této funkci předáme číslo skupiny, která nás zajímá. Funkce FrmGetControlGroupSelection() pak vrátí index prvku skupiny, který je vybrán. Připomeňme, že index je pořadové číslo prvku ve formuláři, které převedeme na hodnotu jednoznačné identifikace pomocí funkce FrmGetObjectId().

UInt16 FrmGetControlGroupSelection(FormType *formular, UInt8 skupina)

Vrátí index prvku formuláře, který je v dané skupině aktivní.

Vstupní parametry
  • formular - ukazatel na datovou strukturu formuláře
  • skupina - osmibitové číslo skupiny
Vrácená hodnota
  • frmNoSelectedControl - pokud není žádný prvek skupiny vybrán
  • ostatní - index prvku formuláře, který je v dané skupině aktivní

Ve verzích PalmOS nižších než 3.5 vracela tato funkce osmibitovou hodnotu. Příklad obalující funkce, která zjednodušuje použití funkce FrmGetControlGroupSelection() v našem programu, je v následujícím rámečku. Uvedená funkce opravuje také chybu v dřívějších verzích PalmOS.

UInt16 VybranoZeSkupiny(UInt8 skupina, UInt16 jinak)
{
    FormPtr formular = FrmGetActiveForm();
    UInt16 index = FrmGetControlGroupSelection(formular, skupina);

    if((index & 0xFF) == (frmNoSelectedControl & 0xFF))
    {
        return jinak;
    }
    else
    {
        return FrmGetObjectId(formular, index);
    }
}

// Použití

    switch(VybranoZeSkupiny(SkupinaJedna, 0))
    {
        case TlacitkoJedna:
            ...

        case TlacitkoDva:
            ...
    }

Funkce FrmSetControlGroupSelection() doplňuje předchozí funkci a umožňuje aktivovat libovolný prvek skupiny. Všechny ostatní prvky skupiny budou pak neaktivní. Funkce pracuje přímo s jednoznačnou identifikací prvku a číslem skupiny, a proto je její použití (na rozdíl od funkce předešlé) velmi jednoduché:

void FrmSetControlGroupSelection(const FormType *formular, UInt8 skupina, UInt16 id)

Vybere (aktivuje) jeden prvek z dané skupiny.

Vstupní parametry
  • formular - ukazatel na data aktivního formuláře
  • skupina - číslo skupiny
  • id - jednoznačná identifikace prvku formuláře (přepínače nebo políčka k zaškrtnutí), který bude vybrán

Funkce také aktualizuje zobrazení na displeji - překreslí všechny prvky skupiny. Použití funkce FrmSetControlGroupSelection() je velmi přímočaré a ilustruje jej následující rámeček kódu:

FrmSetControlGroupSelection(FrmGetActiveForm(), SkupinaJedna, TlacitkoJedna);

 


V následujícím dílu 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.




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

Vytrolil T-Mobile, koupil doménu z reklamy a přesměroval ji na konkurenci

T-Mobile Hotel Růženka

Nová reklamní kampaň T-Mobilu se odehrává ve smyšleném horském hotelu Růženka. Ovšem když zkusíte doménu...



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

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

Záchranku volejte přes aplikaci. Pomoc je rychlejší než při volání na 155

Simulovaná dopravní nehoda jako praktická ukázka fungování mobilní aplikace...

„Záchranná služba, tísňová linka, dobrý den,“ ohlašuje se operátorka volajícímu, který se stal svědkem dopravní nehody....

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

Už přes ni vyhrožovali smrtí. Přesto je aplikace extrémně populární

Logo aplikace Sarahah

Vysoký nárůst popularity zaznamenala aplikace Sarahah, určená k posílání anonymních zpráv. Ačkoliv se v posledních...



Najdete na iDNES.cz