Premium

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

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

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

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

Hlasujte o nejlepší sportovní fotku. Vyberete tak vítěze smartphonu vivo

26. dubna 2024

Soutěž o úplnou novinku, smartphone vivo V40 SE s bohatou výbavou nebo podepsaný dres...

Xiaomi už se nebude držet zpátky. Pro řadu T chystá další prémiové funkce

26. dubna 2024

Smartphony řady T od Xiaomi mají vždy parádní výbavu, ale zároveň i pár kompromisů, aby trochu...

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

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

Horňáci versus dolňáci. Víme, čemu muži dávají přednost, a je to překvapení

Ženské tělo je pro muže celkově velmi atraktivní a nabízí jejich očím mnoho zajímavých partií. Největší pozornosti se...