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

aktualizováno 
Dnes si dokončíme popis několika funkcí, které použijeme při zpracování příkazů na kartě Editace.

4.27 Aktivní objekt formuláře a určení typu objektu

V každém formuláři může být jeden objekt aktivní. Aktivní objekt je ten, který právě zpracovává znaky zadávané uživatelem na plošce Graffiti (nebo pomocí klávesnice). V současné verzi operačního systému PalmOS mohou být aktivní objekty pouze políčka; v budoucích verzích může být typů aktivních objektů víc.

Je-li políčko aktivní, je na něm zobrazen blikající kursor. Kursor označuje místo, kam bude zapsán další znak, který zadáme pomocí Graffiti nebo klávesnice. Po zobrazení formuláře funkcí FrmDrawForm() nemusí být aktivní žádné políčko; kursor není vidět a znaky zadávané Graffiti nebo klávesnicí jsou ignorovány.

UInt16 FrmGetFocus(const FormType *formulář)

Zjistí, na kterém políčku se nachází kursor.

Vstupní parametry
  • formulář - ukazatel na strukturu obsahující data formuláře
Vrácená hodnota
  • noFocus - pokud ve formuláři není žádný aktivní objekt
  • index prvku formuláře, který je aktivní

Funkce FrmGetFocus() vrátí index prvku formuláře, na kterém se nachází kursor. Jednoznačnou identifikaci prvku formuláře získáme pomocí funkce FrmGetObjectId(). Pokud není žádný prvek formuláře aktivní, vrátí funkce FrmGetFocus() hodnotu noFocus.

void FrmSetFocus(FormType *formulář, UInt16 index)

Nastaví aktivní objekt (políčko) ve formuláři.

Vstupní parametry
  • formulář - ukazatel na strukturu obsahující data formuláře
  • index - index prvku formuláře, který si přejeme aktivovat, nebo konstanta noFocus, pokud si přejeme kursor skrýt

Jediné prvky formuláře, které můžeme funkcí FrmSetFocus() zatím aktivovat, jsou políčka. Políčka, na kterých může být kursor, mohou být buď samostatnou součástí formuláře, nebo mohou být uspořádána v tabulce. Pro příklad tabulky, která obsahuje políčka, se podívejte například do vestavěné aplikace ToDo; programování tabulek bude popsáno až v šesté kapitole.

Je-li aktivní prvek formuláře políčko, které je součástí tabulky, vrátí funkce FrmGetFocus() index tabulky, nikoliv index políčka. Tabulky budeme probírat v šesté kapitole; teď si jenom řekneme, že abychom zjistili, na kterém řádku tabulky je aktivní políčko, musíme použít speciální funkce manažera tabulek PalmOS.

Pro odlišení aktivního samostatného políčka od aktivního políčka v tabulce musíme použít funkci FrmGetObjectType(). Funkce FrmGetObjectType() určí typ prvku formuláře, jehož index jí předáme. Pokud chceme tedy použít funkci FrmGetFocus() k určení prvku formuláře, na kterém je kursor, musíme ověřit, že index aktivního prvku formuláře odpovídá políčku.

FormObjectKind FrmGetObjectType(const FormType *formulář, UInt16 index)

Určí typ objektu formmuláře (políčko, tlačítko a podobně).

Vstupní parametry
  • formulář - ukazatel na strukturu obsahující data formuláře
  • index - index prvku formuláře, jehož typ zjišťujeme
Vrácená hodnota

Označuje typ objektu. Některé hodnoty jsou

  • frmFieldObj - políčko pro úpravu textu
  • frmControlObj - tlačítko nebo přepínač
  • frmListObj - seznam
  • frmTableObj - tabulka
  • frmBitmapObj - obrázek
  • frmLabelObj - text
  • frmTitleObj - nadpis formuláře
  • frmPopupObj - tlačítko výběru ze seznamu
  • frmGraffitiStateObj - ukazatel stavu graffiti
  • frmGadgetObj - uživatelem definovaný objekt
  • frmScrollbarObj - posuvník

Chceme-li zjistit, zda je některé z políček formuláře aktivní, musíme nejprve získat index aktivního prvku formuláře. Poté musíme ověřit, zda se jedná o políčko, nebo o tabulku. V příštích verzích PalmOS mohou být i jiné druhy aktivních prvků. Proto doporučuji napsat jednoduchou obalující funkci jako v následujícím rámečku:

static FieldPtr ZjistiEditovanePole()
{
	FormPtr formular = FrmGetActiveForm();
	UInt16 zaostreni = FrmGetFocus(formular);
	FormObjectKind typObjektu;

	if(zaostreni == noFocus)
	{
		return NULL;
	}

	typObjektu = FrmGetObjectType(formular, zaostreni);

	if(typObjektu == frmFieldObj)
	{
		return FrmGetObjectPtr(formular, zaostreni);
	}
	else
	{
		return NULL;
	}
}

Funkce ZjistiEditovanePole() vrátí ukazatel na data aktivního políčka, nebo NULL, pokud není žádné políčko aktivní. V příští kapitole doplníme tuto funkci o práci s políčky v tabulkách.


Příště si doplníme funkce pro zobrazení klávesnice a nápovědy ke Graffiti a vytvoříme funkci pro obsluhu událostí uživatelské nabídky.



Nejčtenější

Nové iPhony Xs budou stát až 43 500 korun. Do Česka dorazí 29. září

Matura Jan: Online #7043

Apple na akci Apple Keynote 2018 představil tři nové iPhony. Nástupce modelu X se jmenuje Xs, zvětšená varianta pak Xs...

To si ještě nikdo nedovolil, nejlepší iPhone je za neuvěřitelnou sumu

iPhone Xs/Xs Max

S nadsázkou, na nejlepší provedení nových iPhonů X bude potřeba hypotéka. Apple nový top model Xs Max s 512 GB paměti ...



Apple má tři nové iPhony. Podporují dvě SIM, ale v Česku to nefunguje

iPhone Xs/Xs Max

Apple letos představil tři nové iPhony, které navazují na loňský model X. Úplně nových smartphonů od Applu se ovšem...

T-Mobile přidává k tarifům data navíc. Na prodejně ovšem nepochodíte

T- Mobile.

Není pochyb, že se boj o zákazníky z hlasových služeb přesunul do oblasti mobilních dat. Potvrzuje to i aktuální akční...

Konkurence se trefuje do „předražených“ nových iPhonů

Všechny tyto produkty Xiaomi stojí stejně, jako nový model iPhone Xr

Na vysoké ceny novinek od Applu reagovali konkurenti poněkud posměšnými nabídkami. Ukazují v nich, co všechno z jejich...

Další z rubriky

Tyto aplikace vám řeknou vše o počasí. Vyberte si pro vás tu pravou

Ilustrační snímek

Nástroje, které vám pomohou zjistit, jaké bude počasí, jsou v mobilu mnohdy neocenitelným pomocníkem. Vybrali jsme ty...

Bez reklamy ani ránu. Bude už i na Facebook Messengeru v mobilu

Mobilní Messenger projde změnou, k nelibosti uživatelů v něm budou cílené...

Oblíbený mobilní kecálek se brzy promění. Facebook totiž do Messengeru po úspěšném testování implementuje cílené...

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

Najdete na iDNES.cz