home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
06
/
ami072.txt
< prev
next >
Wrap
Text File
|
1997-04-07
|
11KB
|
317 lines
GADTOOLS.LIBRARY (cz. 2.)
<a>Sebastian Koîodziejczyk
<txt>Na poczâtku zajmijmy sië najprostszym gadûetem --
BUTTON_KIND. Jest on najczëôciej spotykanym gadûetem -- "OK" ,
"Use", "Save" itp. Wystarczy ustawiê pozycjë, rozmiary i nazwë
gadûetu. Dodatkowo za pomocâ tagów moûna ustawiê:
GT_Underscore -- symbol, jaki poprzedza podkreôlonâ literë w
nazwie gadûtu. Przykîadowo jeûeli w "Cancel" chcemy podkreôliê
"C", wtedy w tagu podajemy np. '_' , a w nazwie "_Cancel". Uwaga
-- dziaîa od 37. wersji biblioteki.
GA_Disabled -- jeûeli podamy TRUE (wartoôê róûnâ od 0), gadûet
zostanie wyîâczony -- zostanie pokryty "siateczkâ" i nie bëdzie
moûna go wybraê. Domyôlnie FALSE.
GA_Immediate -- jeûeli podamy TRUE, bëdziemy otrzymywaê message,
gdy tylko gadget zostanie naciôniëty. Domyôlnie FALSE. Uwaga --
dziaîa od wersji 39.!
Przy odbieraniu message'ów z okna, w którym sâ gadûety gadtools,
funkcje GetMsg i ReplyMsg naleûy zastâpiê funkcjami GetIMsg i
ReplyIMsg (skîadnia taka sama, zmieniono tylko typy parametrów --
zamiast p_Message -- od razu p_IntuiMessage).
W wypadku BUTTON_KIND otrzymujemy tylko IDCMP_GAGDETUP (dla
systemu 1.3 GADGETUP) oraz, od wersji 39., gdy zostanie ustawiony
tag GA_Immediate, IDCMP_GADGETDOWN (GADGETDOWN).
Naleûy pamiëtaê jeszcze o paru rzeczach:
-- Do ustalonych przez nas flag IDCMP naleûy dodaê (or) xxxIDCMP,
gdzie xxx jest typem gadûetu jakiego uûywamy, np. BUTTONIDCMP,
LISTVIEWIDCMP, MXIDCMP.
-- Po utworzeniu gadûetów i otwarciu okna naleûy wywoîaê procedurë
GT_RefreshWindow. Format instrukcji:
<l>GT_RefreshWindow (window, requester);
p_Window p_Requester
a0 a1
<txt>window -- struktura window okna zawierajâcego gadûety
gadtools.
requester -- na razie nie uûywany. Zawsze Nil!
Jeûeli najpierw otwieramy okno, potem dodajâc gadûety za pomocâ
AddGList, naleûy wywoîaê RefreshGList (z intuition.library), a
póúniej GT_RefreshWindow.
To tyle w tym odcinku. Za miesiâc przedstawië m.in. listing w
Kick Pascalu przedstawiajâcy przykîad uûycia biblioteki
gadtools.library.
Przejdúmy teraz do programu przykîadowego (listing 1).
* listing1 *
Jeûeli w funkcji Creategadget argument poprzedni_gadget = Nil,
wtedy funkcja ta nie utworzy gadûetu -- zwróci Nil. Bezpiecznie
moûemy równieû podaê Nil dla funkcji FreeVisualInfo -- funkcja po
prostu nie zadziaîa, a nie np. zawiesi komputer. To samo odnosi
sië do p_Screen w GetVisualInfo. Wîaôciwoôê ta przydaje sië,
jeûeli nie chcemy co chwilë sprawdzaê, czy nie wystâpiî bîâd.
We wskaúnik do taglistu prawie zawsze moûemy wstawiê Nil --
funkcja zadziaîa! Informujemy jâ tylko, ûe nie mamy zamiaru
niczego ustalaê tagami. Oczywiôcie nie dotyczy to przypadków, w
których wymagane jest przekazanie jakichô danych tagami.
Do zmiany danych gadûetu (dotyczy danych ustawianych przez tagi)
np. wîâczenia gadûetu sîuûy procedura GT_SetgadgetAttrs:
GT_SetgadgetAttrs (gadget, Okno, Requster, TagList);
p_gadget p_window p_requester p_taglist
a0 a1 a2 a3
Gadget -- gadûet, którego dane majâ byê modyfikowane.
Okno -- struktura Window okna, w którym gadûet sië znajduje. Od
wersji 39. moûe byê to Nil -- gadûet nie zostanie odôwieûony.
Requester -- zawsze Nil.
TagList -- taglist z nowymi danymi do gadûetu.
Dla BUTTON_KIND moûliwy jest tylko jeden tag -- GA_Disabled.
Do pobrania informacji o gadûecie sîuûy funkcja GT_GetgadgetAttrs
(istnieje od wersji 39.):
Iloôê:= GT_GetgadgetAttrs (gadget, Okno, Requster, TagList);
long p_gadget p_window p_requester p_taglist
d0 a0 a1 a2 a3
Gadget -- gadûet, z którego dane majâ byê pobrane.
Okno -- struktura Window okna, w którym gadûet sië znajduje. Od
wersji 39. moûe byê to Nil -- gadûet nie zostanie odôwieûony.
Requester -- zawsze Nil.
TagList -- Taglist, w którym w pola ti_tag wstawiamy tagi identyfikujâce
dane, które chcemy pobraê, a ti_data wpisujemy WSKAÚNIKI do
zmiennych (typu LONG), w które zostanie wpisana odpowiednia dana.
Iloôê -- liczba zmiennych z taglistu, w które wpisano dane.
Dla BUTTON_KIND moûliwy jest tylko jeden tag -- GA_Disabled. W
wyniku wywoîania GT_GetgadgetAttrs funkcji z tym tagiem, zmienna
wskazywana przez ti_data przybierze wartoôê TRUE, jeûeli gadûet
jest wyîâczony, w przeciwnym wypadku FALSE.
Uwaga! Stosujâc të funkcjë uniemoûliwiamy korzystanie z programu
uûytkownikom posiadajâcym bibliotekë w wersji niûszej niû 39.
(system 3.0).
Zajmijmy sië teraz nastëpnymi typami gadgetów:
-- CHECKBOX_KIND
gadûet ten sîuûy do zaîâczania opcji, wykorzystany np. w
prefs/screenmode wîâczanie/wyîâczanie autoscroll. Do 39. wersji
biblioteki musimy uûywaê ustalonych rozmiarów -- CHECKBOX_WIDTH i
CHECKBOX_HEIGHT. Od tego gadûetu otrzymujemy message
IDCMP_gadgETUP z polem code równym 0 lub 1, w zaleûnoôci od
aktualnego stanu.
Dla tego typu gadûetu dostëpne sâ nastëpujâce tagi (dla funkcji
Creategadget):
GT_Underscore -- tak jak w BUTTON_KIND.
GA_Disabled -- tak jak w BUTTON_KIND.
GTCB_Checked -- poczâtkowy stan gadûetu (TRUE lub FALSE).
Domyôlnie FALSE.
GTCB_Scaled -- od wersji 39 -- jeûeli TRUE i rozmiary gadûetu sâ
róûne od standardowych, to gadûet zostanie przeskalowany do
podanych rozmiarów. Jeûeli FALSE, to zostanâ przyjëte rozmiary
standardowe. Domyôlnie FALSE.
Dla funkcji GT_GetgadgetAttrs i GT_SetgadgetAttrs dostëpne sâ
tagi: GA_Disabled i GTCB_Checked.
-- INTEGER_KIND
Normalny gadûet typu integer (sîuûâcy do wpisywania liczby).
Zawartoôê gadûetu odczytujemy z pola LongInt struktury
StringInfo. Z kolei wskaúnik do niej otrzymujemy z pola
SpecialInfo struktury gadget. Ponadto zawartoôê gadûetu moûna
otrzymaê za pomocâ funkcji GT_GetgadgetAttrs, podajâc tag
GTIN_Number. Od INTEGER_KIND otrzymujemy message IDCMP_GADGETUP
i jeûeli podany zostaî tag GA_Immediate z polem ti_Data róûnym od
0 -- IDCMP_GADGETDOWN.
Dostëpne tagi dla Creategadget:
GT_Underscore -- tak jak w BUTTON_KIND.
GA_Disabled -- tak jak w BUTTON_KIND.
GA_Immediate -- tak jak w BUTTON_KIND.
GA_TabCycle -- jeûeli TRUE, to naciôniëcie [Tab] spowoduje
przejôcie do nastëpnego gadûetu typu INTEGER lub STRING.
Domyôlnie TRUE! Tag istnieje od wersji 37. Po naciôniëciu [Tab]
otrzymujemy message IDCMP_GADGETUP i ewentualnie od nastëpnego
gadûetu IDCMP_GADGETDOWN.
GTIN_Number -- zawartoôê gadûetu. Domyôlnie 0.
GTIN_MaxChars -- maksymalna liczba znaków w gadûecie. Domyôlnie
10.
STRINGA_ExitHelp -- jeûeli TRUE, to klawisz HELP spowoduje
wyjôcie z gadûetu. Program otrzyma message IDCMP_GADGETUP z
polem code równym $5f. Standardowo FALSE. Tag istnieje od wersji
37.
STRINGA_Justyfication -- decyduje, czy liczba w gadûecie bëdzie
dosuniëta do lewej strony (STRINGLEFT), prawej (STRINGRIGHT) czy
centrowana (STRINGCENTER). Domyôlnie dosuniëta do lewej strony.
Tag istnieje od wersji 37.
STRINGA_ReplaceMode -- jeûeli TRUE, to w gadûecie wîâczony jest
tryb replace (nowe znaki sâ napisywane na stare). Domyôlnie tryb
insert. Tag istnieje od wersji 37.
Dla funkcji GT_GetgadgetAttrs i GT_SetgadgetAttrs dostëpne sâ
tagi: GA_Disabled i GTIN_Number.
-- LISTVIEW_KIND
gadûet ten sîuûy do wyôwietlania elementów listy, tak jak np. w
prefs/printer wybór typu drukarki (drivera). Powoduje wysyîanie
messagu IDCMP_GADGETUP, w polu code znajduje sië numer aktualnie
wybranego wëzîa. Numer wybranego wëzîa moûna takûe otrzymaê za
pomocâ GT_GetgadgetAttrs, z tagiem GTLV_Selected. Lista (wëzîy)
nie moûe byê zmieniana w czasie wyôwietlania w gadûecie. Jeûeli
chcemy usunâê lub dodaê jekieô wëzîy, musimy wywoîaê procedurë
GT_SetgadgetAttrs z tagiem GTLV_Labels, w którym ti_Data bëdzie
równe Nil. Od tej chwili lista przestanie byê wyôwietlana w
gadûecie i moûna wprowadzaê zmiany, po czym ponownie wywoîaê
GT_SetgadgetAttrs z GTLV_Labels, zawierajâcym wskaúnik poprzednio
wyôwietlanej listy. Z powodu tego ograniczenia nie moûna
wyôwietlaê ûadnych list, które mogâ byê zmienione przez inne
programy, w tym, niestety, list systemowych, np. listy bibliotek.
Dostëpne tagi dla Creategadget:
GT_Underscore -- tak jak w BUTTON_KIND.
GA_Disabled -- tak jak w BUTTON_KIND. Dla tego typu gadûetu tag
moûna stosowaê od wersji 39.
GTLV_Top -- pierwszy widoczny element listy. Domyôlnie 0.
GTLV_MakeVisible -- numer wëzîa, który ma byê widoczny w obszarze
gadûetu. Uwaga! Moûna uûyê tylko jednego z GTLV_Top i
GTLV_MakeVisible. Tag istnieje od wersji 39.
GTLV_Labels -- struktura list, której nazwy wëzîów bëdâ
wyôwietlane w gadûecie. Domyôlnie Nil.
GTLV_ReadOnly -- jeûeli TRUE, to lista jest tylko do odczytu.
Domyôlnie FALSE.
GTLV_ScrollWidth -- szerokoôê suwaka przy gadûecie. Domyôlnie 16.
GTLV_ShowSelected -- gadûet STRING_KIND utworzony wczeôniej za
pomocâ gadtools, w którym bëdzie wyôwietlony aktualnie wybrany
wëzeî (z moûliwoôciâ edycji). Jeûeli Nil, to wybrany wëzeî bëdzie
podôwietlony lub wyôwietlony na dole gadûetu (w zaleûnoôci od
wersji gadtools). W przypadku niepodania tego tagu aktualnie
wybrany wëzeî nie bëdzie zaznaczony.
GTLV_Selected -- numer aktualnie wybranego wëzîa lub -1, jeûeli
ûaden. Domyôlnie -1.
LAYOUTA_Spacing -- przestrzeï miëdzy liniami. Domyôlnie 0.
Dla funkcji GT_GetgadgetAttrs dostëpne sâ tagi: GA_Disabled,
GTLV_Top, GTLV_Labels i GTLV_Selected. Dla funkcji
GT_SetGagdetAttrs ponadto GTLV_MakeVisible.
-- MX_KIND
"Guziki radiowe", jak np. w prefs/serial wybór typu
potwierdzenia. Podajemy mu tablicë (zakoïczonâ Nil), zawierajâcâ
wskaúniki tekstów, które pojawiâ sië przy guzikach. Podobnie jak
w CHECKBOX_KIND wymiary pojedynczego elementu sâ ustalone --
MXWIDTH i MXHEIGHT. Zmieniê je moûna od versji 39. Otrzymujemy
message IDCMP_GADGETDOWN, w polu code numer wybranego "guzika".
Dostëpne tagi dla Creategadget:
GT_Underscore -- tak jak w BUTTON_KIND.
GA_Disabled -- tak jak w BUTTON_KIND. Dla tego typu gadûetu tag
moûna stosowaê od wersji 39.
GTMX_Lables -- wskaúnik do tablicy (zakoïczonej zerem)
zawierajâcej wskaúniki do napisów przy kaûdym "guziku", np.
<l>
type
MXChoices:array [1..4] of STR;
var
Labels:MXChoices;
begin
{ ..... }
Labels:=MXChoices('2 kolory','4 kolory','8 kolorów',Nil);
{ ..... }
end.
<txt>Tag ten jest konieczny, by gadget mógî powstaê.
GTMX_Active -- aktywny "guzik". Domyôlnie 0 -- pierwszy.
GTMX_Spacing -- odstëp pomiedzy "guzikami". Domyôlnie 1.
GTMX_Scaled -- tag ten istnieje od wersji 39. jeûeli TRUE, to
"guziki" zostanâ przeskalowane, by dopasowaê sië do rozmiarów
gadûetu.
GTMX_Titleplace -- jedna z flag z Newgadget.gng_Flags. Jeûeli
ûadna nie zostanie ustawiona, nazwa gadûetu sië nie pojawi. Tag
ten istnieje od wersji 39.
Dla funkcji GT_GetgadgetAttrs i GT_SetgadgetAttrs dostëpne sâ
tagi: GA_Disabled, GTMX_Active.
-- NUMBER_KIND
Sîuûy do wyôwietlania liczby (bez moûliwoôci wpisania), np. w
prefs/printergfx liczba kolorów. Chociaû podobny efekt moûna
uzyskaê nie stosujâc tego gadûetu, to jednak jego uûycie
zaoszczëdza wielu problemów z RawDoFmt i PrintIntuiText. Liczbë
wyôwietlanâ w gadûecie zmieniamy za pomocâ GT_SetgadgetAttrs z
tagiem GTNM_Number. NUMBER_KIND nie powoduje wysîania ûadnych
message'ów.