Premium

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

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

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

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

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

Samsung má povedenou stylovku. Zkusí to s ní na trhu, kde se mu nedaří

24. dubna 2024

Samsung po velmi dlouhé době oprášil modelovou řadu Galaxy C a představil stylový smartphone se...

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

Za vytlačení z linky do Brna musí Student Agency zaplatit náhradu 21 milionů

Společnost Student Agency provozující autobusy a vlaky pod označením RegioJet musí zaplatit bývalému konkurentovi 21...