4.12. Nejjednodušší funkce pro šifrování
Pro účel prvního příkladu doplníme naši aplikaci o jednoduchou šifrovací a dešifrovací funkci. Funkci předáváme vstupní text, heslo a ukazatel na proměnnou, do které bude uložen výsledný text. Parametr smer určuje, zda bude funkce text šifrovat nebo dešifrovat. Prototyp šifrovací funkce je v následujícím rámečku:
void Sifruj(Char* vystup, Char* vstup, Char* heslo, Boolean smer) |
Nyní doplníme volání funkce Sifruj() do zdrojového kódu aplikace. Většinu kódu umístíme do funkce vstupního formuláře. Na obrázku, na kterém navrhujeme chování aplikace, to bude vypadat takto:
Většinu kódu jsme umístili do funkce vstupního formuláře. V následujícím rámečku si můžeme prohlédnout zjednodušenou funkci vstupního formuláře. Vstupní text i heslo ukládáme do globálních proměnných gHeslo a gPuvodniText. Podle hodnoty přepínačů (které jsou v jedné skupině: je-li jeden zapnut, je druhý z nich určitě vypnut) nastavíme směr šifrování.
Stav přepínačů, které určují směr šifrování, ukládáme do globální proměnné gZasifruj. Všechny globální proměnné musíme inicializovat ve funkci ZacatekProgramu().
static Boolean UdalostVstupnihoFormulare(EventPtr udalost) { switch(udalost->eType) { case ctlSelectEvent: switch(udalost->data.ctlSelect.controlID) { case TlacitkoZakoduj: // Zasifrovani smer = CtlGetValue((ControlPtr)Objekt(PrepinacZasifruj)); KopirujTextPolicka(PoleHeslo, gHeslo, 50); KopirujTextPolicka(PoleTextVstupni, gPuvodniText, 500); Sifruj(gNovyText, gPuvodniText, gHeslo, smer); // Skok do vystupniho formulare FrmGotoForm(FormularVystupni); zpracovano = true; break; default: break; } break; default: break; } return zpracovano; } |
Ve funkci výstupního formuláře jen naplníme výstupní políčko příslušným obsahem globální proměnné gNovyText. Zjednodušenou funkci výstupního formuláře uvádíme v následujícím rámečku:
static Boolean UdalostVystupnihoFormulare(EventPtr udalost) { switch(udalost->eType) { case frmOpenEvent: // Zkopirovani vystupniho textu do policka NastavTextPolicka(PoleTextVystupni, gNovyText); FrmDrawForm(FrmGetActiveForm()); zpracovano = true; break; case ctlSelectEvent: switch(udalost->data.ctlSelect.controlID) { case TlacitkoZpet: // Návrat zpět FrmGotoForm(FormularVstupni); zpracovano = true; break; } } return zpracovano; } |
Zdrojový kód aplikace si můžeme prohlédnout zde.
4.13 Špinavá políčka
U každého políčka, které se nachází ve formuláři, je uložen údaj o tom, zda jsou data v políčku čistá nebo špinavá. Čistá jsou data, která uživatel nezměnil, a špinavá jsou data, která byla uživatelem změněna. Pokud uložíme do políčka nějaký text (například funkcí FldSetTextHandle() nebo funkcí FldSetTextPtr()), tak je políčko označené jako čisté.
Boolean FldDirty(const FieldType* políčko) Zjistí, zda bylo políčko uživatelem po nastavení změněno. | |
Vstupní parametry |
|
Vrácená hodnota |
|
Změní-li uživatel text políčka, označí jej operační systém PalmOS jako špinavé. Funkce FldDirty() v takovém případě vrátí logickou hodnotu true. Naše aplikace může pomocí funkce FldDirty() testovat, která políčka uživatel ve formuláři změnil.
void FldSetDirty(FieldType* políčko, Boolean špinavé) Nastaví příznak špinavého (změněného) políčka. | |
Vstupní parametry |
|
Políčko je jako čisté označeno nastavením nového textu. Voláním funkce FldSetDirty() můžeme příznak špinavosti políčka přímo nastavit nebo vymazat.
V příštím dílu si povíme o prvním, nejjednodušším způsobu, jak rolovat obsahem políčka nahoru a dolů pomocí opakovacích tlačítek.