4.30 Obsluha menu v naší aplikaci
V minulém dílu jsme si napsali funkci, která ošetřila položky menu na kartě Editace. Zbývá jen začlenit ji do aplikace. V každé funkci formuláře musíme zpracovat všechny příkazy uživatelské nabídky, která je s formulářem spojena. Navrhovaný způsob samozřejmě není jediný možný, ale pro uživatele je nejpřehlednější. Příklad zapojení funkce FunkceMenuKartyEditace() do jedné funkce formuláře je v tabulce:
static Boolean UdalostVystupnihoFormulare(EventPtr udalost) { Boolean zpracovano = false; Int16 rozdil; switch(udalost->eType) { ... case menuEvent: zpracovano = FunkceMenuKartyEditace(udalost->data.menu.itemID); if(!zpracovano) { // Byla zvolena polozka menu, ale neslo // o polozku na karte "Editace" switch(udalost->data.menu.itemID) { case PolozkaMenuOProgramu: // Po zvoleni prislusne polozky menu zavolame // funkci napovedy FrmHelp(TextOProgramu); zpracovano = true; break; default: break; } } break; ... } return zpracovano; } |
V každé funkci formuláře, ve které se vyskytuje karta Editace (a to i neúplná), nejprve vyhodnotíme, zda uživatel nezvolil některý z příkazů na této kartě. Pokud naše aplikace obsahuje více společných karet uživatelské nabídky, provedeme jejich vyhodnocení a pak teprve budeme zpracovávat ty příkazy menu, které jsou v každém formuláři jiné.
Druhý způsob zpracování společných položek v menu je umístění funkce FunkceMenuKartyEditace() přímo do smyčky zpracování událostí. Tento způsob je jednodušší, ale není natolik názorný jako explicitní volání funkce FunkceMenuKartyEditace() v každé funkci formuláře, ve které je potřeba.
static Boolean UdalostZpracovanaAplikaci(EventPtr udalost) { Boolean zpracovano = false; UInt16 cisloFormulare; FormPtr formular; if(udalost->eType == frmLoadEvent) { ... } else if(udalost->eType == menuEvent) { zpracovano = FunkceMenuKartyEditace(udalost->data.menu.itemID); } return zpracovano; } |
Doplněním obsluhy menu je naše jednoduchá šifrovací aplikace ukončena. Zdrojový text poslední verze aplikace si můžete stáhnout zde.
31. Uložení stavu programu jako domácí úkol
Zbývá doplnit šifrovací program o poslední důležitou vlastnost: uložení stavu programu tak, aby měl uživatel pocit multitaskingu. V předchozí kapitole jsme si uvedli funkce PrefGetAppPreferences() a PrefSetAppPreferences() pro čtení a zapisování stavu programu. V první části domácího úkolu doplňte aplikaci o uložení a čtení stavu programu. Nápověda:
- přesuňte všechny globální proměnné do jedné struktury
- definujte v zdrojovém textu konstanty tvůrce aplikace a verze stavu programu
- doplňte do funkce ZacatekAplikace() kód pro přečtení stavu programu; nezapomeňte na všechny kontroly správnosti dat
- pokud nebyl přečten stav programu, je potřeba inicializovat globální proměnné
- doplňte do funkce KonecAplikace() kód pro uložení stavu programu
Doplníme-li do naší aplikace předchozích pět bodů, bude mít uživatel při přepínání aplikací pocit multitaskingu. Práce s počítačem Palm Pilot se tím ještě více přiblíží režimu, na který je uživatel zvyklý.
Tak skončila čtvrtá kapitola. V kapitole páté si povíme jednak o seznamech, které jsou velmi silným nástrojem pro uživatelský vstup, a jednak se naučíme ovládat černobílý grafický výstup na displej Palm Pilota. Ke kreslení se pak vrátíme ještě v sedmé kapitole, kdy si povíme o pokročilých prvcích grafiky a barvách. Zatím budeme postupně vytvářet jednoduchý černobílý kreslicí program.