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

Tak bude vypadat letošní nejlevnější iPhone, zepředu připomíná desítku

Render chystaného LCD iPhonu s 6,1palcovým panelem ve společnosti menšího...

Uvedení nových iPhonů se blíží, jejich oficiální odhalení proběhne už za dva měsíce. Víme, že budou tři a alespoň z...

Blesková krádež. Zloději za 30 sekund vybílili obchod Applu

Blesková krádež v kalifornském Apple Storu

Skupina mužů za méně než minutu vykradla před očima zákazníků i personálu obchod Apple Store v kalifornském Fresnu....



Xiaomi pokračuje v dumpingových akcích. Redmi S2 bude za 300 korun

Nová prodejna mobilů v Olomouci přilákala stovky lidí

Agresivní marketing čínské značky v Česku pokračuje. Xiaomi otevírá třetí obchod a tradičně první den nabízí produkty s...

Recenze: Nokia 8 Sirocco je skutečně luxusní a má skvěle odladěný Android

Nokia 8 Sirocco

Firma HMD Global postupně rozšiřuje svou nabídku smartphonů Nokia i do vyšších pater. Prozatím tou nejlepší nokií,...

Novinka za 975 korun nahradí smartphone a nepotřebuje dotykový displej

JioPhone 2

Obyčejné mobily nejsou mrtvé. Právě naopak. Jestliže prodeje smartphonů stagnují, nebo na některých trzích dokonce...

Další z rubriky

Google loni zlikvidoval 700 tisíc aplikací

Mobilní aplikace

Z aplikačního obchodu Google Play bylo loni odstraněno 700 tisíc aplikací, většina zmizela prakticky ihned po umístění...

Na aplikace alternativních taxi útočí virus. Pase po údajích ke kartám

Virus pro Android

Uživatelé mobilních aplikací alternativních taxi včetně aplikace Uber by měli být obezřetní. Ohrožuje je totiž nový...

S těmito aplikacemi se o dovolené neztratíte. Najdou let i levný hotel

Ilustrační snímek

Místo slovníku, mapy a průvodce už řada lidí vyráží na dovolenou na neznámé místo jen se svým telefonem. V mnoha...

Najdete na iDNES.cz