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

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

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

Sem chodí smartphony umřít. Aplikaci lze použít jen s vybitou baterií

Die With Me

Aplikace s názvem Umři se mnou má velmi neobvyklé omezení. Nemůžete ji zapnout, pokud máte telefon nabitý víc než na...

Aplikace ukazovala otravující čísla. Data kradl antivir přímo z mobilů

Škodlivý kód Cooligan napadá zařízení s Androidem 4 a 5

Zajímavý model vymyslelo studio DU. Jedna jejich android aplikace ukazovala, kdo volá, včetně obtěžujících čísel...



Najdete na iDNES.cz