AMIGA REVIEW online
  Uvodná stránka     Software     Hry     Obaly     Download     Amiga na PC     Amiga Forever  

Arexx V

Jan 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


© ATLANTIDA Publishing Všechna práva vyhrazena.
Žádna část nesmí být reprodukována nebo jinak šířena bez písemného svolení vydavatele.



Amiga na Vašem PC rychle, snadno a zdarma!


none

AMIGA REVIEW

57 ( 11-12 / 2000 )
56 ( 9-10 / 2000 )
55 ( 7-8 / 2000 )
54 ( 5-6 / 2000 )
53 ( 3-4 / 2000 )
52 ( 1-2 / 2000 )
 
51 ( 12 / 1999 )
50 ( 11 / 1999 )
49 ( 10 / 1999 )
48 ( 9 / 1999 )
46-47 ( 7-8 / 1999 )
45 ( 6 / 1999 )
44 ( 5 / 1999 )
43 ( 4 / 1999 )
42 ( 3 / 1999 )
41 ( 2 / 1999 )
40 ( 1 / 1999 )
 
39 ( 12 / 1998 )
38 ( 11 / 1998 )
37 ( 10 / 1998 )
36 ( 9 / 1998 )
35 ( x / 1998 )
34 ( x / 1998 )
33 ( 1-2 / 1998 )
 
32 ( 11-12 / 1997 )
31 ( 9-10 / 1997 )
30 ( 7-8 / 1997 )
29 ( 6 / 1997 )
28 ( 5 / 1997 )
27 ( 4 / 1997 )
26 ( 3 / 1997 )
25 ( 2 / 1997 )
24 ( 1 / 1997 )
 
23 ( 12 / 1996 )
22 ( 11 / 1996 )
21 ( 10 / 1996 )
20 ( 9 / 1996 )
18-19 ( 7-8 / 1996 )
17 ( 6 / 1996 )
16 ( 5 / 1996 )
15 ( 4 / 1996 )
14 ( 3 / 1996 )
13 ( 2 / 1996 )
12 ( 1 / 1996 )
 
11 ( 12 / 1995 )
10 ( 11 / 1995 )
9 ( 10 / 1995 )
8 ( 9 / 1995 )
7 ( 7 / 1995 )
6 ( 5 / 1995 )

ATLANTIDA NEWS

5 ( 3 / 1995 )
4 ( 1 / 1995 )
 
3 ( 11 / 1994 )
2 ( 9 / 1994 )
1 ( 7 / 1994 )
0 ( 5 / 1994 )