home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 06 / ami072.txt < prev    next >
Text File  |  1997-04-07  |  11KB  |  317 lines

  1. GADTOOLS.LIBRARY (cz. 2.)
  2.  
  3. <a>Sebastian Koîodziejczyk
  4.  
  5. <txt>Na poczâtku zajmijmy sië najprostszym gadûetem --
  6. BUTTON_KIND.  Jest on najczëôciej spotykanym gadûetem -- "OK" ,
  7. "Use", "Save" itp. Wystarczy ustawiê pozycjë, rozmiary i nazwë
  8. gadûetu. Dodatkowo za pomocâ tagów moûna ustawiê:
  9.  
  10. GT_Underscore -- symbol, jaki poprzedza podkreôlonâ literë w
  11. nazwie gadûtu. Przykîadowo jeûeli w "Cancel" chcemy podkreôliê
  12. "C", wtedy w tagu podajemy np. '_' , a w nazwie "_Cancel". Uwaga
  13. -- dziaîa od 37. wersji biblioteki.
  14.  
  15. GA_Disabled -- jeûeli podamy TRUE (wartoôê róûnâ od 0), gadûet
  16. zostanie wyîâczony -- zostanie pokryty "siateczkâ" i nie bëdzie
  17. moûna go wybraê.  Domyôlnie FALSE.
  18.  
  19. GA_Immediate -- jeûeli podamy TRUE, bëdziemy otrzymywaê message,
  20. gdy tylko gadget zostanie naciôniëty. Domyôlnie FALSE. Uwaga --
  21. dziaîa od wersji 39.!
  22.  
  23. Przy odbieraniu message'ów z okna, w którym sâ gadûety gadtools,
  24. funkcje GetMsg i ReplyMsg naleûy zastâpiê funkcjami GetIMsg i
  25. ReplyIMsg (skîadnia taka sama, zmieniono tylko typy parametrów --
  26. zamiast p_Message -- od razu p_IntuiMessage).
  27.  
  28. W wypadku BUTTON_KIND otrzymujemy tylko IDCMP_GAGDETUP (dla
  29. systemu 1.3 GADGETUP) oraz, od wersji 39., gdy zostanie ustawiony
  30. tag GA_Immediate, IDCMP_GADGETDOWN (GADGETDOWN).
  31.  
  32. Naleûy pamiëtaê jeszcze o paru rzeczach:
  33.  
  34. -- Do ustalonych przez nas flag IDCMP naleûy dodaê (or) xxxIDCMP,
  35. gdzie xxx jest typem gadûetu jakiego uûywamy, np. BUTTONIDCMP,
  36. LISTVIEWIDCMP, MXIDCMP.
  37.  
  38. -- Po utworzeniu gadûetów i otwarciu okna naleûy wywoîaê procedurë
  39. GT_RefreshWindow. Format instrukcji:
  40.  
  41. <l>GT_RefreshWindow (window,    requester);
  42.  
  43.                      p_Window  p_Requester
  44.  
  45.                      a0        a1
  46.  
  47. <txt>window -- struktura window okna zawierajâcego gadûety
  48. gadtools.
  49.  
  50. requester -- na razie nie uûywany. Zawsze Nil!
  51.  
  52. Jeûeli najpierw otwieramy okno, potem dodajâc gadûety za pomocâ
  53. AddGList, naleûy wywoîaê RefreshGList (z intuition.library), a
  54. póúniej GT_RefreshWindow.
  55.  
  56. To tyle w tym odcinku. Za miesiâc przedstawië m.in. listing w
  57. Kick Pascalu przedstawiajâcy przykîad uûycia biblioteki
  58. gadtools.library.
  59.  
  60. Przejdúmy teraz do programu przykîadowego (listing 1).
  61.  
  62. * listing1 *
  63.  
  64. Jeûeli w funkcji Creategadget argument poprzedni_gadget = Nil,
  65. wtedy funkcja ta nie utworzy gadûetu -- zwróci Nil. Bezpiecznie
  66. moûemy równieû podaê Nil dla funkcji FreeVisualInfo -- funkcja po
  67. prostu nie zadziaîa, a nie np. zawiesi komputer. To samo odnosi
  68. sië do p_Screen w GetVisualInfo. Wîaôciwoôê ta przydaje sië,
  69. jeûeli nie chcemy co chwilë sprawdzaê, czy nie wystâpiî bîâd.
  70.  
  71. We wskaúnik do taglistu prawie zawsze moûemy wstawiê Nil  --
  72. funkcja zadziaîa! Informujemy jâ tylko, ûe nie mamy zamiaru
  73. niczego ustalaê tagami. Oczywiôcie nie dotyczy to przypadków, w
  74. których wymagane jest przekazanie jakichô danych tagami.
  75.  
  76. Do zmiany danych gadûetu (dotyczy danych ustawianych przez tagi)
  77. np. wîâczenia gadûetu sîuûy procedura GT_SetgadgetAttrs:
  78.  
  79. GT_SetgadgetAttrs (gadget,  Okno,    Requster,   TagList);
  80.                    p_gadget p_window p_requester p_taglist
  81.              a0       a1        a2          a3
  82.  
  83. Gadget -- gadûet, którego dane majâ byê modyfikowane.
  84.  
  85. Okno -- struktura Window okna, w którym gadûet sië znajduje. Od
  86. wersji 39.  moûe byê to Nil -- gadûet nie zostanie odôwieûony.
  87.       
  88. Requester -- zawsze Nil.
  89.  
  90. TagList -- taglist z nowymi danymi do gadûetu.
  91.  
  92. Dla BUTTON_KIND moûliwy jest tylko jeden tag -- GA_Disabled.
  93.  
  94. Do pobrania informacji o gadûecie sîuûy funkcja GT_GetgadgetAttrs
  95. (istnieje od wersji 39.):
  96.  
  97. Iloôê:= GT_GetgadgetAttrs (gadget,  Okno,    Requster,   TagList);
  98. long                       p_gadget p_window p_requester p_taglist
  99.  d0                     a0       a1        a2          a3
  100.  
  101. Gadget -- gadûet, z którego dane majâ byê pobrane.
  102.  
  103. Okno   -- struktura Window okna, w którym gadûet sië znajduje. Od
  104.           wersji 39. moûe byê to Nil -- gadûet nie zostanie odôwieûony.
  105.       
  106. Requester -- zawsze Nil.
  107.  
  108. TagList -- Taglist, w którym w pola ti_tag wstawiamy tagi identyfikujâce
  109.            dane, które chcemy pobraê, a ti_data wpisujemy WSKAÚNIKI do
  110.            zmiennych (typu LONG), w które zostanie wpisana odpowiednia dana.
  111.  
  112. Iloôê -- liczba zmiennych z taglistu, w które wpisano dane.
  113.  
  114. Dla BUTTON_KIND moûliwy jest tylko jeden tag -- GA_Disabled. W
  115. wyniku wywoîania GT_GetgadgetAttrs funkcji z tym tagiem, zmienna
  116. wskazywana przez ti_data przybierze wartoôê TRUE, jeûeli gadûet
  117. jest wyîâczony, w przeciwnym wypadku FALSE.
  118.  
  119. Uwaga! Stosujâc të funkcjë uniemoûliwiamy korzystanie z programu
  120. uûytkownikom posiadajâcym bibliotekë w wersji niûszej niû 39.
  121. (system 3.0).
  122.  
  123. Zajmijmy sië teraz nastëpnymi typami gadgetów:
  124.  
  125. -- CHECKBOX_KIND 
  126.  
  127. gadûet ten sîuûy do zaîâczania opcji, wykorzystany np. w
  128. prefs/screenmode wîâczanie/wyîâczanie autoscroll.  Do 39. wersji
  129. biblioteki musimy uûywaê ustalonych rozmiarów -- CHECKBOX_WIDTH i
  130. CHECKBOX_HEIGHT. Od tego gadûetu otrzymujemy message
  131. IDCMP_gadgETUP z polem code równym 0 lub 1, w zaleûnoôci od
  132. aktualnego stanu.
  133.  
  134. Dla tego typu gadûetu dostëpne sâ nastëpujâce tagi (dla funkcji
  135. Creategadget):
  136.  
  137. GT_Underscore -- tak jak w BUTTON_KIND.
  138.  
  139. GA_Disabled -- tak jak w BUTTON_KIND.
  140.  
  141. GTCB_Checked -- poczâtkowy stan gadûetu (TRUE lub FALSE).
  142. Domyôlnie FALSE.
  143.  
  144. GTCB_Scaled -- od wersji 39 -- jeûeli TRUE i rozmiary gadûetu sâ
  145. róûne od standardowych, to gadûet zostanie przeskalowany do
  146. podanych rozmiarów.  Jeûeli FALSE, to zostanâ przyjëte rozmiary
  147. standardowe. Domyôlnie FALSE.
  148.  
  149. Dla funkcji GT_GetgadgetAttrs i GT_SetgadgetAttrs dostëpne sâ
  150. tagi: GA_Disabled i GTCB_Checked.
  151.  
  152. -- INTEGER_KIND
  153.  
  154. Normalny gadûet typu integer (sîuûâcy do wpisywania liczby).
  155. Zawartoôê gadûetu odczytujemy z pola LongInt struktury
  156. StringInfo. Z kolei wskaúnik do niej otrzymujemy z pola
  157. SpecialInfo struktury gadget. Ponadto zawartoôê gadûetu moûna
  158. otrzymaê za pomocâ funkcji GT_GetgadgetAttrs, podajâc tag
  159. GTIN_Number. Od INTEGER_KIND otrzymujemy message IDCMP_GADGETUP
  160. i jeûeli podany zostaî tag GA_Immediate z polem ti_Data róûnym od
  161. 0 -- IDCMP_GADGETDOWN.
  162.  
  163. Dostëpne tagi dla Creategadget:
  164.  
  165. GT_Underscore -- tak jak w BUTTON_KIND.
  166.  
  167. GA_Disabled -- tak jak w BUTTON_KIND.
  168.  
  169. GA_Immediate -- tak jak w BUTTON_KIND.
  170.  
  171. GA_TabCycle -- jeûeli TRUE, to naciôniëcie [Tab] spowoduje
  172. przejôcie do nastëpnego gadûetu typu INTEGER lub STRING.
  173. Domyôlnie TRUE! Tag istnieje od wersji 37. Po naciôniëciu [Tab]
  174. otrzymujemy message IDCMP_GADGETUP i ewentualnie od nastëpnego
  175. gadûetu IDCMP_GADGETDOWN.
  176.  
  177. GTIN_Number -- zawartoôê gadûetu. Domyôlnie 0.
  178.  
  179. GTIN_MaxChars -- maksymalna liczba znaków w gadûecie. Domyôlnie
  180. 10.
  181.  
  182. STRINGA_ExitHelp -- jeûeli TRUE, to klawisz HELP spowoduje
  183. wyjôcie z gadûetu. Program otrzyma message IDCMP_GADGETUP z
  184. polem code równym $5f. Standardowo FALSE. Tag istnieje od wersji
  185. 37.
  186.  
  187. STRINGA_Justyfication -- decyduje, czy liczba w gadûecie bëdzie
  188. dosuniëta do lewej strony (STRINGLEFT), prawej (STRINGRIGHT) czy
  189. centrowana (STRINGCENTER). Domyôlnie dosuniëta do lewej strony.
  190. Tag istnieje od wersji 37.
  191.  
  192. STRINGA_ReplaceMode -- jeûeli TRUE, to w gadûecie wîâczony jest
  193. tryb replace (nowe znaki sâ napisywane na stare). Domyôlnie tryb
  194. insert. Tag istnieje od wersji 37.
  195.  
  196. Dla funkcji GT_GetgadgetAttrs i GT_SetgadgetAttrs dostëpne sâ
  197. tagi: GA_Disabled i GTIN_Number.
  198.  
  199. -- LISTVIEW_KIND
  200.  
  201. gadûet ten sîuûy do wyôwietlania elementów listy, tak jak np. w
  202. prefs/printer wybór typu drukarki (drivera).  Powoduje wysyîanie
  203. messagu IDCMP_GADGETUP, w polu code znajduje sië numer aktualnie
  204. wybranego wëzîa. Numer wybranego wëzîa moûna takûe otrzymaê za
  205. pomocâ GT_GetgadgetAttrs, z tagiem GTLV_Selected.  Lista (wëzîy)
  206. nie moûe byê zmieniana w czasie wyôwietlania w gadûecie.  Jeûeli
  207. chcemy usunâê lub dodaê jekieô wëzîy, musimy wywoîaê procedurë
  208. GT_SetgadgetAttrs z tagiem GTLV_Labels, w którym ti_Data bëdzie
  209. równe Nil.  Od tej chwili lista przestanie byê wyôwietlana w
  210. gadûecie i moûna wprowadzaê zmiany, po czym ponownie wywoîaê
  211. GT_SetgadgetAttrs z GTLV_Labels, zawierajâcym wskaúnik poprzednio
  212. wyôwietlanej listy.  Z powodu tego ograniczenia nie moûna
  213. wyôwietlaê ûadnych list, które mogâ byê zmienione przez inne
  214. programy, w tym, niestety, list systemowych, np. listy bibliotek.
  215.  
  216. Dostëpne tagi dla Creategadget:
  217.  
  218. GT_Underscore -- tak jak w BUTTON_KIND.
  219.  
  220. GA_Disabled -- tak jak w BUTTON_KIND. Dla tego typu gadûetu tag
  221. moûna stosowaê od wersji 39.
  222.  
  223. GTLV_Top -- pierwszy widoczny element listy. Domyôlnie 0.
  224.  
  225. GTLV_MakeVisible -- numer wëzîa, który ma byê widoczny w obszarze
  226. gadûetu.  Uwaga! Moûna uûyê tylko jednego z GTLV_Top i
  227. GTLV_MakeVisible. Tag istnieje od wersji 39.
  228.  
  229. GTLV_Labels -- struktura list, której nazwy wëzîów bëdâ
  230. wyôwietlane w gadûecie. Domyôlnie Nil.
  231.  
  232. GTLV_ReadOnly -- jeûeli TRUE, to lista jest tylko do odczytu.
  233. Domyôlnie FALSE.
  234.  
  235. GTLV_ScrollWidth -- szerokoôê suwaka przy gadûecie. Domyôlnie 16.
  236.  
  237. GTLV_ShowSelected -- gadûet STRING_KIND utworzony wczeôniej za
  238. pomocâ gadtools, w którym bëdzie wyôwietlony aktualnie wybrany
  239. wëzeî (z moûliwoôciâ edycji). Jeûeli Nil, to wybrany wëzeî bëdzie
  240. podôwietlony lub wyôwietlony na dole gadûetu (w zaleûnoôci od
  241. wersji gadtools). W przypadku niepodania tego tagu aktualnie
  242. wybrany wëzeî nie bëdzie zaznaczony.
  243.  
  244. GTLV_Selected -- numer aktualnie wybranego wëzîa lub -1, jeûeli
  245. ûaden. Domyôlnie -1.
  246.  
  247. LAYOUTA_Spacing -- przestrzeï miëdzy liniami. Domyôlnie 0.
  248.  
  249. Dla funkcji GT_GetgadgetAttrs dostëpne sâ tagi: GA_Disabled,
  250. GTLV_Top, GTLV_Labels i GTLV_Selected.  Dla funkcji
  251. GT_SetGagdetAttrs ponadto GTLV_MakeVisible.
  252.  
  253. -- MX_KIND
  254.  
  255. "Guziki radiowe", jak np. w prefs/serial wybór typu
  256. potwierdzenia.  Podajemy mu tablicë (zakoïczonâ Nil), zawierajâcâ
  257. wskaúniki tekstów, które pojawiâ sië przy guzikach.  Podobnie jak
  258. w CHECKBOX_KIND wymiary pojedynczego elementu sâ ustalone --
  259. MXWIDTH i MXHEIGHT. Zmieniê je moûna od versji 39.  Otrzymujemy
  260. message IDCMP_GADGETDOWN, w polu code numer wybranego "guzika".
  261.  
  262. Dostëpne tagi dla Creategadget:
  263.  
  264. GT_Underscore -- tak jak w BUTTON_KIND.
  265.  
  266. GA_Disabled -- tak jak w BUTTON_KIND. Dla tego typu gadûetu tag
  267. moûna stosowaê od wersji 39.
  268.  
  269. GTMX_Lables -- wskaúnik do tablicy (zakoïczonej zerem)
  270. zawierajâcej wskaúniki do napisów przy kaûdym "guziku", np.
  271.  
  272. <l>
  273. type
  274.  
  275.     MXChoices:array [1..4] of STR;
  276.  
  277. var
  278.  
  279.     Labels:MXChoices;
  280.  
  281. begin
  282.  
  283. { ..... }
  284.  
  285. Labels:=MXChoices('2 kolory','4 kolory','8 kolorów',Nil);
  286.  
  287. { ..... }
  288.  
  289. end.
  290.  
  291. <txt>Tag ten jest konieczny, by gadget mógî powstaê.
  292.  
  293. GTMX_Active -- aktywny "guzik". Domyôlnie 0 -- pierwszy.
  294.  
  295. GTMX_Spacing -- odstëp pomiedzy "guzikami". Domyôlnie 1.
  296.  
  297. GTMX_Scaled -- tag ten istnieje od wersji 39. jeûeli TRUE, to
  298. "guziki" zostanâ przeskalowane, by dopasowaê sië do rozmiarów
  299. gadûetu.
  300.  
  301. GTMX_Titleplace -- jedna z flag z Newgadget.gng_Flags. Jeûeli
  302. ûadna nie zostanie ustawiona, nazwa gadûetu sië nie pojawi. Tag
  303. ten istnieje od wersji 39.
  304.  
  305. Dla funkcji GT_GetgadgetAttrs i GT_SetgadgetAttrs dostëpne sâ
  306. tagi: GA_Disabled, GTMX_Active.
  307.  
  308. -- NUMBER_KIND
  309.  
  310. Sîuûy do wyôwietlania liczby (bez moûliwoôci wpisania), np. w
  311. prefs/printergfx liczba kolorów. Chociaû podobny efekt moûna
  312. uzyskaê nie stosujâc tego gadûetu, to jednak jego uûycie
  313. zaoszczëdza wielu problemów z RawDoFmt i PrintIntuiText.  Liczbë
  314. wyôwietlanâ w gadûecie zmieniamy za pomocâ GT_SetgadgetAttrs z
  315. tagiem GTNM_Number.  NUMBER_KIND nie powoduje wysîania ûadnych
  316. message'ów.
  317.