Arexx VJan Petkov
Od doby, kdy známý programátor Nico Francois předvedl svou knihovnu ReqTools, se
naše aplikace nemusí obávat nudného uživatelského prostředí. Díky této
programátorské legendě, která se podílí i na vývoji známého systému SCALA a
rovněž díky Rafaelu D Halleweynovi, jenž k nám přinesl knihovnu RexxReqTools,
se komunikace mezi uživatelem a našimi programy v Arexxu stává jednoduchou a
příjemnou.
Jak používat RexxReqTools?
Nejdříve je potřeba instalovat samotnou knihovnu rexxreqtools.library do
adresáře LIBS:. Pak se o její existenci musí dozvědět i programy Arexxu, což
je možné provést spuštěním CLI příkazu
RXLIB rexxreqtools.library 0-30
Pokud tuto knihovnu používáte často, umístěte si tento řádek do User-Startupu.
Alternativní volbou je otevření této knihovny na začátku každého programu v
Arexxu, který tuto knihovnu používá, stačí do něj jen doplnit řádek
ADDLIB (rexxreqtools.library,0-30)
Jestliže v Arexxu používáte příliš mnoho knihoven a odezva některé z nich se vám
jeví velmi pomalá, máte možnost zvýšit její prioritu a tím odkazy urychlit
například takto:
ADDLIB rexxreqtools.library,5-30)
Pro úplnost dodávám, že pro úspěšnou práci s RexxReqTools potřebujete ještě
knihovny rexxsyslib.library a reqtools.library obě v LIBS:.
Knihovna RexxReqTools obsahuje 8 funkcí:
výpis zprávy: rtezrequest()
vybrání souboru: rtfilerequest()
rtfreefilebuffer()
vybrání fontu: rtfontrequest()
zadání čísla: rtgetlong()
zadání řetězce: rtgetstring()
editace barev: rtpaletterequest()
stanovení módu zobrazení: rtscreenmoderequest()
Všechny funkce se volají jako standardní funkce Arexxu, buďto ve výrazu, nebo
prostřednictvím instrukce CALL.
Příklad: filename = rtfilerequest()
CALL rtezrequest(Hello world)
Podívejme se nejednotlivé funkce knihovny RexxReqTools trochu podrobněji. Nemáme
k dispozici tolik prostoru, abychom si zde mohli podrobně vysvětlit význam všech
konstant a parametrů, většina z nich je čitelná intuitivně, proto uvádím alespoň
jejich stručný výčet.
RTEZREQUEST() - VÝPIS ZPRÁVY
ret= rtezrequest (bodytxt, [gadtxt], [title], [tagstring], [resultname])
Tato funkce zobrazí okno (requester) a čeká na odpověď uživatele. Standardně se
bere <Y> nebo <AMIGA-V> jako kladná odpověď, <RETURN> jako předpokládaná reakce
(gadget je zobrazen tučně) a stisk <ESC>, <N>, <R> nebo <AMIGA-B> je zpracován
jako odpověď negativní.
VSTUP:
bodytxt informativní text v okně
gadtxt text pro gadgety (viz níže)
title titulek okna
tagstring vysvětleno níže
resultname tato proměnná bude obsahovat stejnou hodnotu jako proměnná ret
Pro všechny funkce platí, že v případě neuvedení resultname je výsledek
standardně přístupný v proměnné rtresult.
Gadtxt je řetězec, který obsahuje text pro jednotlivé gadgety uspořádané zleva
doprava. Znak podtržítka _ je určen pro definici horké klávesy daného gadgetu.
Jednotlivé texty se oddělují znakem |. Příklad pro 3 gadgety: „_Ano| _Možná|
_Ne“.
TAGSTRING je speciální řetězec pro předávání dodatečných parametrů tzv. TAGů.
Každému TAGu je přiřazena určitá hodnota a jednotlivé TAGy jsou odděleny
mezerou. Příklad TAGSTRINGu se 2 TAGy: „rt_reqpos=reqpos_centerscr
rt_leftoftset=120“.
TAGy:
rt_idcmpflags, rt_reqpos, rt_leftoffset, rt_topoffset, rt_pubscrname, rt_screen,
rt_window, rt_waitpointer, rt_lockwindow, rt_screentofront, rt_font, rtez_flags,
rtez_defaultresponse
VÝSLEDEK:
ret ... číslo stisknutého gadgetu. Gadget úplně vlevo má číslo 1, pak postupně
hodnota roste 2, 3,... až k poslednímu, který má nečekaně hodnotu 0 (jako
negativní odpověď).
PŘIKLADY:
call rtezrequest(Haló uživateli:)
call rtezrequest(Zmáčkni Quit:,Quit | Cancel)
call rtezrequest(Stop ?, _Ano | _Možná | _Ne„,rtez_defaultresponse = 2)
RTFILEREQUEST() - VYBRÁNÍ SOUBORU
newfilename = rtfilerequest ([directory], [filename], [title], [oktext],
[tagstring], [resultname])
Funkce je určena pro výběr adresáře nebo souboru. Pokud nastavíte parametr pro
výběr více souborů (rtfi_flags_freqf_multiselect)jména všech souborů budou
vrácena v poli resultname (první soubor bude pod resultname.1 ) a proměnná
resultname.count bude obsahovat počet vybraných souborů.
Rtfilerequest si pamatuje naposled zvolenou cestu, navíc mohou být předešlé
adresáře uchovávány v bufferu. To ovšem nemusí být vždy výhodné, proto lze
vyvolat pomocnou funkci call rtfreefilebuffer(), která vyčistí vše nepotřebné.
VSTUP:
directory adresář, který se nastaví na počátku
filename jméno souboru, které se nastaví na počátku
title titulek celého okna
oktext text pro OK gadget tagstring
resultname tato hodnota obsahuje 1 pokud uživatel zvolil gadget „OK“ a 0 pro
„Cancel“. Jiná situace nastane, pokud byl nastaven multiselect (viz výše).
TAGy:
rt_window, rt_reqpos, rt_leftoffset, rt topoffset, rt_pubscrname, rt_screen,
rt_waitpointer, rt_lockwindow, rt_screentofront, rt_font, rtfi_flags,
rtfi_height, rtfi_volumerequest, rtfi_matchpat, rtfi_buffer, rtfi_initialpath
VÝSLEDEK:
newfilename ... název souboru, který byl vybrán, nebo prázdný řetězec („“),
pokud byl zvolen CANCEL.
PŘÍKLADY:
call Open(file,rtfilerequest(,,Pick file to open,_Open))
volume = rtfilerequest(,,Pick volume,,rtfi_volumerequest = 0)
rtfilerequest(,,Pick files,,rtfi_flags = freqf_multiselect,,files)
SAY You selected files.count files
DO i = 1 TO files.count
SAY file i || : files.i
END
RTFONTREQUESTQ - VYBRÁNÍ FONTU
fontname = rtfontrequest ([title], [oktext], [tagstring], [resultname])
Uživatel má možnost vybrat si vlastní font.
TAGy:
_window, rt_reqpos, rt_leftoffset, rt_topoffset, rt_pubscrname, rt_screen,
rt_waitpointer, rt_lockwindow, rt_screentofront, rt_font, rtfo_flags,
rtfo_height, rtfo_sampleheight, rtfo_minheight, rtfo_maxheight, rtfo_fontname,
rtfo_fontheight
VÝSLEDEK:
fontname ...jméno fontu
Všechny potřebné hodnoty najdeme pod:
resultname.name jméno fontu
resultname.height výška fontu
resultname.bold zvolen bold (0 nebo 1)
resultname.italic zvolen italic (0 or 1)
resultname.underline zvolen underlined (0 or 1)
PŘÍKIAD:
CALL rtfontrequest(Vyber font,,rtfo_flags = freqf_style,font)
IF font THEN
DO
text = Zvolil jste font.name výška font.height
IF font.bold THEN text = text || 0Ax || Zvolen bold
IF font.italic THEN text = text || 0Ax || Zvolen italic
IF font.underlined THEN text = text || 0Ax || Zvolen underlined
CALL rtezrequest(text,OkiDOki)
END
ELSE
CALL rtezrequest(Nebyl zvolen žádný font, „Sorry“)
RTGETLONG() - ZADÁNÍ ČÍSLA
newnumber=rtgetlong ([number], [bodytxt], [title], [gadtxt], [tagstring],
[resultname])
Zobrazí dialogové okno pro zadání číslu.
VSTUP:
number přednastavená hodnota
bodytxt informativní text
title titulek okna
gadtxt text pro gadgety tagstring
resultname tato proměnná bude obsahovat 1 pokud uživatel zvolil „Ok“, nebo bude
rovna 0 pro zvolený „Cancel“. Pokud bylo zadáno více gadgetů, řídí se číslování
stejným mechanismem jako u rtezrequest().
TAGy:
rt_window, rt_idcmpflags, rt_reqpos, rt_leftoffset, rt_topoffset, rt_pubscrname,
rt_screen, rt_waitpointer rt_lockwindow, rt_screentofront, rt_font, rtgl_min.
rtgl_max, rtgl_width, rtgl_invisible, rtgl_backfill, rtgl_flags
VÝSLEDEK:
newnumber ... zadané číslo nebo prázdný řetězec pro zvolený „Cancel“.
PŘÍKLAD:
age = rtgetlong(,zadej svůj věk,,,rtgl_min = 0 rtgl_max = 120)
RTGETSTRING() - ZADÁNÍ ŘETĚZCE
newstring = rtgetstring ([string], [bodytxt], [title], [gadtxt],
[tagstring], [resultname])
Zobrazí requester pro zadání jedné věty od uživatele
VSTUP:
string přednastavený řetězec
bodytxt informativní text
title titulek okna
gadtxt text pro gadgety tagstring
resultname to samé jako u předešlé funkce (1 pro „Ok“, 0 pro „Cancel“)
TAGy
rt_window, rt_idcmpflags, rt_reqpos, rt_leftoffset, rt_topoffset, rt_pubscrname,
rt_screen, rt_waitpointer, rt_lockwindow, rt screentofront, rt_font, rtgs_width,
rtgs_invisible, rtgs_backfill, rtgs_flags
VÝSLEDEK:
newstring ... zadaný řetězec nebo prázdný („“) byl-li zvolen „Cancel“.
PŘÍKLADY:
name = rtgetstring(,Zadej své jméno)
password = rtgetstring(,zadej heslo,,,,rtgs_invisible = TRUE)
RTPALETTEREQUEST() - EDITACE BAREV
newcolor=rtpaletterequest ([color], [title], [tagstring], [resultname])
Zobrazí se okno pro editaci palety aktuální obrazovky.
VSTUP:
color aktuální barva
title titulek okna tagstring
resultname vrací 1 pro „Ok“ nebo 0 pro „Cancel“.
TAGy:
rt_window, rt_reqpos, rt_leftoffset, rt_topoffset rt_pubscrname, rt_screen,
rt_waitpointer, rt_lockwindow, rt_screentofront, rt_font
VÝSLEDEK:
newcolor - číslo zvolené barvy, nebo prázdny řetězec při „Cancel“.
PŘÍKLAD:
color = rtpaletterequest(,Zvol barvu)
RTSCREENMODEREQUST() - STANOVENÍ MÓDU ZOBRAZENÍ
screenmode = rtscreenmoderequest ([title], [oktext], [tagstring],
[resultname])
Umožní vybrat nový zobrazovací mód.
VSTUP:
title titulek oknu
oktext text pro OK gadget tagstring
resultname bude obsahovat 1 jestliže byl zvolen „Ok“. jinak 0, podrobnější
informace viz dále.
TAGy:
rt_window, rt_reqpos, rt_leftoffset, rt_topoffset, rt_pubscrname, rt_screen,
rt_waitpointer, rt_lockwindow, rt_screentofront, rt_font, rtsc_flags,
rtsc_height, rtsc_minwidth, rtsc_maxwidth. rtsc_minheight, rtsc_maxheight,
rtsc_mindepth, rtsc_maxdepth
VÝSLEDEK:
screenmode - prázdný řetězec pro „Cancel“ jinak obsahuje „DisplayID“.
Všechny potřebné parametry jsou vráceny v poli:
resultname.name jméno módu
resultname.width šířka obrazovky
resultname.height výška
resultname.depth hloubka (počet bitplánů)
resultname.overscan typ overscanu:
0 - normální velikost,
1 - text,
2 - graphics,
3 - maximální velikost
resultname.autoscroll 1 jestliže byl autoscroll zvolen, jinak 0.
PŘÍKLAD:
displayid = rtscreenmoderequest(„Choose screen type“,,,rtsc_flags =
screqf_autoscrollgad|screqf_sizegads|screqf_depthgad,,screen)
Tolik zhruba vyčerpávající informace k publikovaným funkcím. Nyní následuje
seznam konstant, které lze přiřadit příslušným TAGům, například takto:
rtfi_flags = freqf_multiselect|freqf_save. Seznam nepřináší podrobnější
informace o jednotlivých konstantách, není na to bohužel místo, může ovšem
posloužit jako rychlý orientační plán.
rtez_flags:
ezreqf_centertext
ezreqf_flumigaqual
ezreqf_noreturnkey
rtfi_flags:
freqf_multiselect
freqf_nofiles
freqf_patgad
freqf_save
freqf_selectdirs
rtfo_flags:
freqf_changepalette
freqf_colorfonts
freqf_fixedwidth
freqf_leavepalette
freqf_scale
freqf_style
rtgl_flags:
glreqf_centertext
glreqf_highlighttext
rtgs_flags:
gsreqf_centertext
gsreqf_highlighttext
rt_idcmpflags:
idcmp_diskinserted
idcmp_diskremoved
idcmp_inactivewindow
idcmp_mousebuttons
idcmp_rawkey
idcmp_vanillakey
rt_reqpos:
reqpos_centerscr
reqpos_centerwin
reqpos_pointer
reqpos_topleftscr
reqpos_topleftwin
rtsc_flags:s
screqf_autoscrollgad
screqf_depthgad
screqf_guimodes
screqf_nonstdmodes
screqf_overscangad
screqf_sizegads
rtfi_volumerequest:
vreqf_alldisks
vreqf_noassigns
vreqf_nodisks
A na závěr ještě jednou kompletní příklad vyvolání okna pro výběr fontu.
/*
* FONT REQUESTER DEMO
*/
CALL ADDLIB(„rexxreqtools.library“,0, -30, 0)
CALL rtfontrequest(Vyber font,,rtfo flags = freqf_style,font)
IF font THEN
DO
text = Zvolil jsi font.name výška font.height
IF font.bold THEN text = text || 0Ax || Zvolen bold
IF font.italic THEN text = text || 0Ax || Zvolen italic
IF font.underlined THEN text = text || 0Ax || Zvolen underlined
CALL rtezrequest(text,To je ono)
END
ELSE
CALL rtezrequest(Font nezvolen, „sorry“)
Pokud vše vyjde tak, jak má, najdete instalační balík RexxReqTools i s
příklady na novém APD disku. Těším se na setkání v dalším čísle Amigu Review. Vytlačiť článok
Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.
Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing
none
|