|
![]() | Aplikace °φzena programem s pevnou posloupnostφ akcφ | ![]() | Principy °φzenφ uživatelskΘho rozhranφ |
Pru₧nΘ interaktivnφ aplikace se nejΦast∞ji budujφ s vyu₧itφm konstrukce, kterΘ se °φkß smyΦka zprßv. SmyΦka zprßv je cyklus, v n∞m₧ program Φekß na zprßvu od u₧ivatele, a kdy₧ p°ijde, pak na nφ p°edepsan²m zp∙sobem reaguje. Jednotliv²m zprßvßm jsou p°i°azeny reakce programu, mezi nimi₧ je jedna, kterß zp∙sobφ opuÜt∞nφ smyΦky a ukonΦenφ programu.
Typickß smyΦka zprßv
AplikaΦnφ program zaΦφnß pracovat v situaci, kdy je na obrazovce prßzdnΘ hlavnφ okno bez menu. Zpravidla nejprve provede pot°ebnΘ inicializaΦnφ akce a pak umφstφ na obrazovku v²chozφ ovlßdacφ objekty - menu nebo formulß°e. PotΘ vstoupφ do smyΦky zprßv, v nφ₧ pomocφ funkce Get_ext_message
zφskßvß dalÜφ Φekajφcφ zprßvu a zpracovßvß ji. Ve smyΦce setrvßvß do tΘ doby, dokud si v reakci na vhodnou zprßvu nenastavφ p°φznak ukonΦenφ b∞hu. Typickß struktura programu vypadß takto:
const zprßva_1 = 1001; zprßva_2 = 1002; zprßva_konec = 1999; var konec : Boolean; msg : integer; handle : window_id; ............................................. begin { inicializace } ...........................................
{ otev°enφ v²chozφho menu nebo formulß°e: }
Main_menu("*hlavnφ_mn"); ........................................... konec := FALSE; while not konec and Get_ext_message(msg, handle, nil) do begin case msg of zprßva_1: ...zpracovßnφ zprßvy 1 ... zprßva_2: ...zpracovßnφ zprßvy 2 ... .................................... zprßva_konec: konec := TRUE end; end; { ·klid } ........................................... end.
Funkce Get_ext_message
Φekß, dokud nep°ijde dalÜφ zprßva, a potΘ vrßtφ jejφ Φφslo ve v²stupnφm parametru msg. B∞hem Φekßnφ zßrove≥ doruΦuje b∞₧nΘ slu₧ebnφ zprßvy okn∙m na obrazovce a tφm umo₧≥uje u₧ivateli s nimi interaktivn∞ pracovat, provßd∞t p°φkazy z menu a v∙bec komunikovat s aplikacφ. Funkce Get_ext_message
vrßtφ hodnotu FALSE, kdy₧ dostane zprßvu s Φφslem -1, Φeho₧ lze takΘ vyu₧φt k ukonΦenφ smyΦky.
╚innost vzorovΘho programu ukonΦφ p°φchod zprßvy zprßva_konec
. Ostatnφ zprßvy jsou zpracovßvßny v p°φsluÜnΘ v∞tvi p°φkazu CASE nebo jsou ignorovßny.
P°i pou₧itφ smyΦky zprßv nenφ nutnΘ, aby p°es nφ prochßzeny vÜechny operace, a zpravidla tomu tak nenφ. V∞tÜina operacφ se v aplikacφ provßdφ tak, ₧e formulß°, menu nebo ovlßdacφ liÜta p°φmo provedou pot°ebnou akci nebo zavolajφ vhodn² podprogram.
JakΘ zprßvy dostßvß aplikaΦnφ program?
AplikaΦnφ program dostßvß prost°ednictvφm funkce Get_ext_message
zprßvy vznikajφcφ r∙zn²m zp∙sobem:
Return
. P°φkaz se p°φliÜ Φasto nepou₧φvß, proto₧e mφsto posφlßnφ zprßv je jednoduÜÜφ p°φmo zavolat vhodnou funkci programu.Register_key
.Zprßvy pou₧itΘ v aplikaci (krom∞ zprßv automaticky generovan²ch) oznaΦuje jejφ autor Φφsly v rozsahu od 1001 do 60000. Zprßva s Φφslem -1 mß vyhrazen² v²znam - je to ₧ßdost o ukonΦenφ aplikace. Tato zprßva sice b∞₧φcφ aplikaci sama neukonΦφ, ale zp∙sobφ, ₧e funkce Get_ext_message po jejφm p°ijetφ vrßtφ hodnotu FALSE, na nφ₧ m∙₧e program reagovat ukonΦenφm svΘ Φinnosti.
╚φsla zprßv v rozsahu od 0 do 1000 a v∞tÜφ ne₧ 60000 jsou rezervovßna pro 602SQL a nenφ dovoleno jich pou₧φvat.
Pro oznaΦenφ zprßv je v²hodnΘ pou₧φt konstant definovan²ch v programu ve vnit°nφm jazyce. Je-li tento program nastaven jako projekt (viz kapitola o programovacφm prost°edφ), lze identifikßtory zprßv vyu₧φt v nßvrhu formulß°∙ a menu.
SmyΦka zprßv s funkcφ Peek_message
Funkce Peek_message
se od Get_ext_message
liÜφ tφm, ₧e pokud na vstupu ₧ßdnß zprßva nenφ, pak neΦekß, skonΦφ a vrßtφ FALSE. Hodφ se k implementaci tzv. aktivnφho Φekßnφ, kdy₧ program si zßrove≥ d∞lß svou prßci a zajiÜ¥uje funkΦnost u₧ivatelskΘho rozhranφ.
V n∞kter²ch situacφch program pot°ebuje umo₧nit u₧ivateli prßci s formulß°em pouze po urΦitou dobu a pak pokraΦovat ve v²poΦtu. Pokud okam₧ik, kdy mß v²poΦet pokraΦovat, nenφ ohlßÜen ₧ßdnou zprßvou, pak je nutno mφsto funkce Get_ext_message
pou₧φt Peek_message
.
P°φklad:
View_open('*form_x');
while not ... podmφnka ukonΦenφ ...
do Peek_message; View_close('*form_x');
Tento ·sek programu otev°e formulß°, umo₧nφ u₧ivateli s nφm pracovat do doby, dokud nenφ spln∞na podmφnka ukonΦenφ, pak formulß° zav°e a pokraΦuje.
Princip programovßnφ se smyΦkou zprßv
P°i programovßnφ aplikacφ se smyΦkou zprßv musφte respektovat toto pravidlo:
Pokud mß program reagovat na Φinnost u₧ivatele, musφ v cyklu volat funkce Get_ext_message
nebo Peek_message
. B∞hem provßd∞nφ cyklu neobsahujφcφho opakovanΘ volßnφ ₧ßdnΘ z t∞chto funkcφ poΦφtaΦ na Φinnost u₧ivatel nereaguje.
Dobu, po kterou nenφ k dispozici ₧ßdnß zprßva urΦenß programu, program trßvφ uvnit° funkce Get_ext_message
, kde vy°izuje slu₧ebnφ zprßvy a tφm umo₧≥uje u₧ivateli normßlnφ prßci s menu a okny na obrazovce.
Pokud p°i prßci s formulß°em nebo menu u₧ivatel vyvolß n∞jakΘ akce (nap°. stiskne tlaΦφtko, kterΘ volß proceduru), pak provßd∞nφ t∞chto akcφ se vno°φ do volßnφ funkce Get_ext_message
nebo Peek_message -
prob∞hne uvnit° nφ.
Automaticky generovanΘ zprßvy
B∞hem prßce u₧ivatele s formulß°em je automaticky generovßna °ada zprßv. Program na n∞ m∙₧e, ale nemusφ reagovat. Ka₧dß takovß zprßva nese dvojφ informaci: handle okna formulß°e, kterΘho se t²kß, a oznaΦenφ udßlosti, k nφ₧ ve formulß°i doÜlo. P°i p°φjmu t∞chto zprßv funkce Get_ext_message
vrßtφ v parametru handle hodnotu handle okna, kterΘ zprßvu vyslalo.
OznaΦenφ udßlosti je dßno tabulkou:
╚φslo zprßvy | Udßlost |
1 | Formulß° byl otev°en |
2 | Formulß° byl uzav°en |
3 | U₧ivatel p°eÜel na nov² zßznam |
4 | U₧ivatel zm∞nil obsah slo₧ky |
5 | Vybran² zßznam se p°ekresluje |
6 | Cel² formulß° se p°ekresluje |
7 | Formulß° p°echßzφ k subkurzoru (QBE) |
8 | Formulß° se vracφ k superkurzoru |
9 | Otev°en zßvisl² formulß° |
10 | Uzav°en zßvisl² formulß° |
11 | Otev°en textov² editor |
12 | Uzav°en textov² editor |
13 | Otev°eno okno pro prohlφ₧enφ obrßzku |
14 | Uzav°eno okno pro prohlφ₧enφ obrßzku |
Na tyto zprßvy program reaguje pouze tehdy, pokud chce oÜet°it urΦitou situaci, kterß je zprßvou signalizovßna. Ostatnφ zprßvy program ignoruje.
P°φklad:
Chce-li program zachytit okam₧ik, kdy u₧ivatel zm∞nφ obsah n∞kterΘ slo₧ky ve formulß°i ID, pak analyzuje dochßzejφcφ zprßvy takto:
Get_ext_message(msg, handle, nil); if (handle = ID) and (msg = 4)
then ... { reakce na zm∞nu obsahu slo₧ky }
else ... { zpracovßnφ ostatnφch zprßv }
![]() | Aplikace °φzena programem s pevnou posloupnostφ akcφ | ![]() | Principy °φzenφ uživatelskΘho rozhranφ |