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

aktualizováno 
Dnes se již dostaneme k popisu uživatelského rozhraní. Povíme si, jak jsou organizovány prvky formuláře a společné funkce pro manipulaci s prvky formuláře.

3.8. Organizace prvků formuláře

V definičním souboru prostředků aplikace je ke každému prvku formuláře (tlačítko, přepínač) přiřazena 16bitová konstanta - jeho jednoznačná identifikace. K prvkům formuláře můžeme přistupovat právě prostřednictvím této konstanty, definované v hlavičkovém souboru.

V souboru *.prc a v paměti Palm Pilotu následují prvky formuláře za sebou v pořadí, v jakém byly definovány v souboru prostředků aplikace. Každý prvek má tak jednoznačně přiřazeno svoje pořadové číslo.

FORM ID Formular AT (30 60 100 100)
MODAL
BEGIN
  TITLE "Akce"
  LABEL "Vyberte akci" AUTOID AT (CENTER@50 20)
  BUTTON "Akce 1" ID Tlacitko1 AT (CENTER@50 PREVBOTTOM+2 AUTO AUTO) 
  BUTTON "Akce 2" ID Tlacitko2 AT (CENTER@50 PREVBOTTOM+2 AUTO AUTO)    
END

V předcházející definici jsme definovali jednoduchý formulář se dvěma tlačítky. Prvky tohoto formuláře jsou uloženy v paměti za sebou, podobně jako v následující tabulce.

Pořadové
číslo
prvku
PopisJednoznačná
identifikace
0Nadpis - TITLEnemá
1Text - LABEL AUTOID 9000
(přiřazeno automaticky)
2Tlačítko 1 - BUTTON ID Tlacitko1 ... Tlacitko1
3Tlačítko 2 - BUTTON ID Tlacitko2 ... Tlacitko2

Pořadové číslo prvku versus jeho jednoznačná identifikace

Pro zkomplikování práce programátorů asi polovina funkcí pracujících s prvky formuláře používá pořadové číslo (index) prvku. Parametrem druhé poloviny funkcí je naopak jednoznačná identifikace prvku formuláře (ID). Pro převod mezi pořadovým číslem prvku a jeho jednoznačnou identifikací slouží následující dvě funkce:

UInt16 FrmGetObjectId(const FormType *formular, UInt16 objIndex)

Získá jednoznačnou identifikaci prvku z jeho pořadového čísla v inicializovaném formuláři

Vstupní parametry
  • formular - ukazatel na strukturu inicializovaného formuláře
  • objIndex - pořadové číslo prvku ve formuláři
Vrácená hodnota
  • frmInvalidObjectId - pokud takový prvek neexistuje
  • jinak vrací jednoznačnou identifikaci prvku

Obě tyto funkce vyžadují ukazatel na inicializovaná data formuláře v paměti Palm Pilota (parametr formular). Funkce pracují pouze s prvky inicializovaného formuláře (který byl inicializován funkcí FrmInitForm()).

UInt16 FrmGetObjectIndex(const FormType *formular, UInt16 objID)

Vrátí pořadové číslo prvku v inicializovaném formuláři podle jeho jednoznačné identifikace

Vstupní parametry
  • formular - ukazatel na strukturu inicializovaného formuláře
  • objID - jednoznačná identifikace prvku
Vrácená hodnota
  • pořadové číslo prvku (pořadová čísla začínají od nuly)

POZNÁMKA: V originální dokumentaci není uvedeno, jakou hodnotu vrací funkce FrmGetObjectIndex(), předáme-li jí omylem neplatnou hodnotu jednoznačné identifikace prvku (nebo prvek jiného formuláře).

3.9. Ukazatel na data prvku formuláře

Pro práci s prvky formuláře v dalších kapitolách budeme potřebovat (kromě jejich jednoznačné identifikace a pořadového čísla ve formuláři) ještě ukazatel na strukturu obsahující data prvku.

void *FrmGetObjectPtr(const FormType *formular, UInt16 objIndex)

Vrátí ukazatel na strukturu obsahující data prvku

Vstupní parametry
  • formular - ukazatel na strukturu inicializovaného formuláře
  • objIndex - pořadové číslo prvku ve formuláři
Vrácená hodnota
  • NULL - pokud daný prvek neexistuje
  • ukazatel na strukturu obsahující data prvku

Parametrem funkce FrmGetObjectPtr() je pořadové číslo prvku ve formuláři. V praxi je však vhodnější používat jako parametr spíše jeho jednoznačnou identifikaci (konstanty z hlavičkového souboru). Proto budeme v našem programu často potřebovat funkci, která vrátí ukazatel na strukturu obsahující data prvku v závislosti na jednoznačné identifikaci prvku.

MemPtr AdresaObjektu(FormPtr formular, UInt16 prvek)
{
	UInt16 index = FrmGetObjectIndex(formular, prvek);
	return FrmGetObjectPtr(formular, index);
}

Protože tuto funkci budeme většinou volat pro prvky v aktivním formuláři, můžeme tuto funkci definovat i následujícím způsobem. Při něm eliminujeme nutnost předávání odkazu na formulář a místo toho používáme funkci FrmGetActiveForm().

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

Hodnotu, kterou vrátí tato funkce, musíme sami přetypovat na ukazatel na data příslušného prvku formuláře. Je-li například příslušným prvkem formuláře tlačítko, přetypujeme vrácenou hodnotu na ControlPtr. Použití obou těchto funkcí je v následujícím rámečku s příkladem (funkce CtlSetLabel() změní text v tlačítku).


void NastavUkazatelTextu(FormPtr formular, UInt16 prvekTlacitka, Char* text)
{
	ControlPtr tlacitko = (ControlPtr)AdresaObjektu(formular, prvekTlacitka);
	CtlSetLabel(tlacitko, text);
}

nebo

CtlSetLabel((ControlPtr)Objekt(prvekTlacitka), text);

3.10. Pozice prvku formuláře na displeji

Umístění všech prvků formuláře na displeji můžeme zjistit voláním funkce FrmGetObjectPosition(). Tato funkce (a podobně i funkce pro změnu pozice prvku) používá souřadnice relativní k levému hornímu rohu formuláře.

void FrmGetObjectPosition(const FormType *formular, UInt16 objIndex, Coord *x, Coord *y)

Zjistí pozici levého horního rohu daného prvku na displeji

Vstupní parametry
  • formular - ukazatel na strukturu inicializovaného formuláře
  • objIndex - pořadové číslo prvku ve formuláři
Výstupní parametry
  • x - relativní souřadnice x levého horního rohu prvku
  • y - relativní souřadnice y levého horního rohu prvku

Pro popis absolutních a relativních souřadnic se podívejte do oddílu 2.37. Protože formulář zabírá na displeji plochu aktivního okna, můžeme (pokud bychom potřebovali) použít pro převod na absolutní souřadnice funkci FrmWindowToDisplayPt().

void FrmSetObjectPosition(FormType *formular, UInt16 objIndex, Coord x, Coord y)

Nastaví novou pozici prvku na displeji

Vstupní parametry
  • formular - ukazatel na strukturu inicializovaného formuláře
  • objIndex - pořadové číslo prvku ve formuláři
  • x - relativní souřadnice x levého horního rohu prvku
  • y - relativní souřadnice y levého horního rohu prvku

Funkce FrmSetObjectPosition() neaktualizuje zobrazení na displeji. Tuto funkci můžeme použít před vykreslením formuláře na displeji. Jinak musíme prvek formuláře před voláním této funkce vymazat (například funkcí FrmHideObject() nebo například CtlEraseControl()) a po volání funkce znovu vykreslit (FrmShowObject() nebo například CtlDrawControl()).


V příštím pokračování si zopakujeme, co mají společného a jak jsou v souboru prostředků aplikace definována tlačítka, opakovací tlačítka, políčka k zaškrtnutí, přepínače a tlačítko volby textu.



Nejčtenější

Google posílá vzkaz Evropské komisi. Takhle se bude bránit

Protikartelová komisařka Margrethe Vestagerová.

Google se s obří pokutou od Evropské komise nehodlá smířit. Firma se proti ní odvolá a chce Komisi dokázat, že systém...

Rekordní pokuta pro Google, za dominanci Androidu zaplatí 112 miliard

Ilustrační snímek

Evropská komise uložila internetovému gigantu Google další pokutu. Firma by měla platit za to, že zneužívá dominantního...



Nový supersmartphone vysune kameru a nahrává uživatele bez jeho vědomí

Vivo NEX

V rámci právě skončeného mistrovství světa ve fotbalu byla hrací plocha obklopena panely s reklamami na nový čínský...

Španěl prodává sbírku nerozbalených iPhonů. Za cenu ojetého ferrari

Španěl prodává unikátní sbírku iPhonů za téměř 100 tisíc eur.

Aukční portál eBay je nepřebernou studnicí zajímavých, ale mnohdy i šokujících inzerátů. Nabídku prodejce ze španělské...

Jeden z nejočekávanějších mobilů roku. Nokia 8110 je chytrá jen trochu

Nokia 8110 4G

Retro model Nokia 8110 4G je možná jedním z nejočekávanějších mobilů letošního roku. V Česku se začal prodávat počátkem...

Další z rubriky

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

K používání aplikace WhatsApp vám nově musí být minimálně 16 let

Whatsapp bude umět zpětně vymazat odeslané zprávy

Chatovací služba WhatsApp mění podmínky používání v Evropské unii. Nově začíná platit, že pro používání služby vám musí...

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