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

Dnes si uvedeme seznam událostí, které jsou spojeny s dotekem a pohybem pera po displeji.

2.37 Dotek pera na displeji

Kdykoliv se uživatel dotkne perem displeje (pohybuje perem po displeji) a zvedne jej, systém to vyhodnotí jako událost a o těchto událostech zašle zprávu naší aplikaci. Jednotlivé zaslané zprávy informují naši aplikaci o začátku pohybu pera po displeji (penDownEvent), průběhu pohybu pera (penMoveEvent) a zdvihnutí pera (penUpEvent). Naše aplikace má možnost na tyto zprávy o událostech reagovat.

Souřadnice na displeji

Operační systém počítačů Palm Pilot a kompatibilních používá dva typy souřadnic. Prvním typem jsou souřadnice absolutní, které mají počátek v levém horním rohu displeje jako na následujícím obrázku:

Druhým typem jsou souřadnice relativní. Pro tento typ souřadnic je důležité uvést, že operační systém PalmOS používá pro kreslení a výstup na displeji okna. O systému správy oken si povíme více v některé z dalších kapitol - teď je důležité si uvést, že operační systém umožňuje definovat na displeji jednotlivá okna pro kreslení a vstup dat od uživatele.

Z těchto oken je vždy jedno okno aktivní. Operační systém reaguje pouze na dotek perem na displeji v hranicích aktivního okna. Je-li na displeji zobrazen formulář, je aktivní okno totožné s hranicemi tohoto formuláře:

Pro převod absolutních souřadnic na relativní slouží funkce FrmWindowToDisplayPt() a FrmDisplayToWindowPt(). První z nich převádí relativní souřadnice doteku pera na absolutní:

void WinWindowToDisplayPt(Coord *extentX, Coord *extentY)

Převede relativní souřadnice na absolutní.

Vstupní parametry
  • extentX - souřadnice X relativní k počátku aktivního okna
  • extentY - souřadnice Y relativní k počátku aktivního okna
Výstupní parametry
  • extentX - absolutní souřadnice Y
  • extentY - absolutní souřadnice Y

Druhá z těchto funkcí převádí absolutní souřadnice na souřadnice relativní k aktivnímu oknu.

void WinDisplayToWindowPt(Coord *extentX, Coord *extentY)

Převede absolutní souřadnice na relativní.

Vstupní parametry
  • extentX - absolutní souřadnice Y
  • extentY - absolutní souřadnice Y
Výstupní parametry
  • extentX - souřadnice X relativní k počátku aktivního okna
  • extentY - souřadnice Y relativní k počátku aktivního okna

Pro použití těchto funkcí je nutné si uvědomit, že každý formulář je okno a každý aktivní formulář je současně i aktivní okno. Ve zprávách o událostech spojených s dotykem pera na displeji jsou předávány relativní souřadnice. Pokud si přejeme získat souřadnice absolutní, musíme je převést pomocí funkce WinWindowToDisplayPt().

Události spojené s dotekem pera na displeji

Kdykoliv se uživatel dotkne perem displeje, je vaší aplikaci zaslána událost penDownEvent. Tato událost bývá většinou zpracována ve funkci formuláře. V datové struktuře EventType jsou vyplněny následující prvky:

penDownEvent
EventType* event;
Boolean event->penDown
Tento prvek struktury má vždy hodnotu true.
Int16 event->screenX
Vzdálenost doteku pera v obrazových bodech od levého okraje aktuálního okna.
Int16 event->screenY
Vzdálenost doteku pera od horního okraje aktuálního okna v obrazových bodech.

Důležité jsou hodnoty screenX a screenY, ve kterých jsou souřadnice doteku pera relativní k aktuálnímu oknu (k aktuálnímu formuláři). Pokud si přejeme získat z těchto relativních souřadnic souřadnice absolutní, musíme volat funkci WinWindowToDisplayPt():

Coord x, y;
...
    case penDownEvent:
	
        x = event->screenX;
        y = event->screenY;
        WinWindowToDisplayPt(>x, >y);
		
        // Zde můžeme pracovat s absolutními souřadnicemi [x,y]
		 
        break;
...	

Když se uživatel dotkne perem prvku formuláře (tlačítko, políčko pro editaci textu, seznam), tak je naší aplikaci zaslána zpráva o události penDownEvent. Tato zpráva je obvykle zpracována ve funkci formuláře. Pokud funkce formuláře vrátí hodnotu true (příznak toho, že tuto zprávu zpracovala), tak příslušný prvek formuláře nebude na dotek perem reagovat. Máme-li tedy ve formuláři jak ovládací prvky (třeba tlačítko),tak oblast, ve které vyhodnocujeme nezávislý pohyb perem, musíme si hlídat souřadnice doteku a vracet hodnotu true pouze tehdy, když se uživatel dotkne oblasti pro kreslení.

Dokud uživatel pohybuje perem po displeji, je vaší aplikaci zasílána opakovaně událost penMoveEvent. V datové struktuře EventType jsou předány následující prvky:

penMoveEvent
EventType* event;
Boolean event->penDown
Tento prvek struktury má vždy hodnotu true.
Int16 event->screenX
Vzdálenost doteku pera v obrazových bodech od levého okraje aktuálního okna podobně jako u předchozí zprávy.
Int16 event->screenY
Vzdálenost doteku pera od horního okraje aktuálního okna v obrazových bodech podobně jako u předchozí zprávy.

Konečně, když uživatel zvedne pero z displeje, je vaší aplikaci zaslána událost penUpEvent. V datové struktuře EventType jsou předány následující prvky:

penUpEvent
EventType* event;
        
typedef Int16 Coord;

typedef struct PointType {
  Coord x;
  Coord y;
} PointType;
Boolean event->penDown
Tento prvek struktury má vždy hodnotu true.
Int16 event->screenX
Vzdálenost doteku pera v obrazových bodech od levého okraje aktuálního okna podobně jako u předchozí zprávy.
Int16 event->screenY
Vzdálenost doteku pera od horního okraje aktuálního okna v obrazových bodech podobně jako u předchozí zprávy.
PointType event->data.penDown.start
Pozice začátku tahu perem na obrazovce.
PointType event->data.penDown.stop
Pozice konce tahu perem na obrazovce.

Pokud uživatel zahájil tah perem v některém ovládacím prvku formuláře (tlačítko, přepínač apod.), operační systém nebude naší aplikaci zasílat zprávy o událostech penMoveEvent a penUpEvent.

2.38 Události, na které vaše aplikace musí reagovat

V následující tabulce jsou shrnuty tři základní události, které musíme v každé naší aplikaci zpracovat:

Událost Význam Kde bude zpracována Jak je zpracována
frmLoadEvent
Požadavek na aktivaci formuláře V hlavní smyčce zpracování událostí Inicializace (FrmInitForm()) a aktivace (FrmSetActiveForm() a FrmSetEventHandler()) formuláře.
frmOpenEvent
Požadavek na vykreslení formuláře na displeji Ve funkci formuláře Vykreslení formuláře na displeji (FrmDrawForm())
appStopEvent
Požadavek na ukončení aplikace V hlavní smyčce zpracování událostí Ukončení aplikace

Podrobnosti o zpracování těchto zpráv již byly uvedeny v příslušných částech první (appStopEvent) a druhé kapitoly.


Teď už máme všechny informace důležité k napsání prvního jednoduchého programu pro PalmOS. V příštím díle začneme tento program psát: vytvoříme soubor prostředků aplikace.

  • Nejčtenější

V květnu se zřejmě vrátí ikonická Nokia 3210, kdysi to byl přelomový model

24. března 2024  8:01

Současný vlastník značky Nokia na poli mobilních telefonů, firma HMD (Human Mobile Devices –...

Banka spustila mobilní datové balíčky. Funguje to i zákazníkům z Česka

26. března 2024  12:06

Virtuální banka Revolut spouští virtuálního celosvětového operátora. Zákazníci si mohou kupovat...

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

Z bídného začátku roku se radují. Vypadá to na velký návrat

21. března 2024  7:02

Zřejmě to vypadá na velký návrat. Huawei začíná drtit své domácí konkurenty, přitom jeho produkty...

Trvalo to. Nový nejlepší fotomobil světa konečně koupíte i v Česku

26. března 2024  7:02

Konečně nastává situace, že nejlepší fotomobil v žebříčku DxO Mark je dostupný i na našem trhu....

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

Pochlubili se, že se pochlubí. Značky ze sebe dělají slibotechny

25. března 2024  7:02

Jedním z trochu nečekaných trendů veletrhu MWC v Barceloně se stala oznámení o tom, že firmy nějaké...

Nová cenově dostupná stylovka vás může dostat na fotbalové Euro

29. března 2024

Vivo má nový smartphone střední třídy, který má velké ambice. Za rozumnou cenu nabídne nejen dobrou...

Toho telefonu je pouze pro Čínu škoda. Udělal by parádu i u nás

28. března 2024  12:06

Xiaomi má nový trhák. Model Civi 4 Pro trhá předprodejní rekordy, ale jen na domácím čínském trhu....

U foťáků se blýská na lepší časy, naznačuje výsledek testu nového xiaomi

28. března 2024  7:02

Čínská značka Xiaomi trochu na poli fotomobilů v uplynulých letech tápala. Ukazuje to mimo jiné...

Kartónek Steva Jobse se vydražil za neuvěřitelnou sumu

28. března 2024

Vizitku slavného ředitele společnosti Apple si někdo pořídil za pořádný balík peněz. Přidanou...

Smoljak nechtěl Sobotu v Jáchymovi. Zničil jsi nám film, řekl mu

Příběh naivního vesnického mladíka Františka, který získá v Praze díky kondiciogramu nejen pracovní místo, ale i...

Rejžo, jdu do naha! Balzerová vzpomínala na nahou scénu v Zlatých úhořích

Eliška Balzerová (74) v 7 pádech Honzy Dědka přiznala, že dodnes neví, ve který den se narodila. Kromě toho, že...

Pliveme vám do piva. Centrum Málagy zaplavily nenávistné vzkazy turistům

Mezi turisticky oblíbené destinace se dlouhá léta řadí i španělská Málaga. Přístavní město na jihu země láká na...

Kam pro filmy bez Ulož.to? Přinášíme další várku streamovacích služeb do TV

S vhodnou aplikací na vás mohou v televizoru na stisk tlačítka čekat tisíce filmů, seriálů nebo divadelních...

Stále víc hráčů dobrovolně opouští Survivor. Je znamením doby zhýčkanost?

Letošní ročník reality show Survivor je zatím nejkritizovanějším v celé historii soutěže. Může za to fakt, že už...