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

  1. DWANAÔCI-E
  2.  
  3. <lead>Trudno uwierzyê, ûe to juû rok sië E-dukujecie. Nie
  4. zaîamujcie sië, kurs E nie bëdzie trwaî w nieskoïczonoôê. Myôlë,
  5. ûe 24. odcinka nie doczekamy.
  6.  
  7. <a>Rafaî Wiosna
  8.  
  9. <txt>Juû tradycyjnie proponujë zapodaê sobie jakiô muzak. Moduîy
  10. zawarte na pîytce Aminet 6 jakoô nie rzuciîy mnie na nogi,
  11. dlatego teû polecam tym razem muzykë z taômy: album "Dummy"
  12. kapeli Portishead. Jest to muzyka typowo wisielcza, wprawiajâca w
  13. nastrój samobójczy, czyli odpowiedni do nastroju naszego kâcika
  14. E. Niemniej niektóre kawaîki sâ odjazdowe i zdecydowanie polecam
  15. caîâ pîytkë, nie tylko na pogrzeby i rozwody.
  16.  
  17. <sr>Miësko
  18.  
  19. <txt>Jak juû wspomniaîem miesiâc temu, w tym odcinku kursu
  20. zaczynam omawianie wbudowanych w E procedur wspóîpracy z
  21. systemem. Na poczâtek pójdzie blok odpowiadajâcy za dostëp do
  22. intuition.library. Przedtem jednak maîa dygresja. Otóû poniûsze
  23. procedury nie umoûliwiajâ peînej kontroli nad systemem. Taka np.
  24. OpenW(), która otwiera okienko, nie pozwoli na okreôlenie
  25. wielkoôci okna zmniejszonego gadûetem "zoom" (po lewej od gadûetu
  26. odpowiadajâcego za poîoûenie okna wzglëdem innych). Korzystanie z
  27. wbudowanych do E funkcji intuicyjnych jest dozwolone, jednak gdy
  28. bëdziesz pisaî duûy program, wykorzystujâcy w duûej mierze
  29. procedury systemowe, powinieneô korzystaê z procedur, zawartych w
  30. Kickstarcie.
  31.  
  32. Pierwszâ procedurâ "intuicyjnâ" w E jest otworzenie okna. Robi
  33. sië to tak:
  34.  
  35. <l>wptr:=OpenW(x,y,szer,wys,IDCMP,wflagi,tytul,screen,sflagi,gadgety,taglist=NIL)
  36.  
  37. <txt>Procedura zwraca wskaúnik do otworzonego okna lub NIL,
  38. jeûeli operacja nie byîa moûliwa.
  39.  
  40. Parametry "x" i "y" to, jak moûna sië domyôliê, poîoûenie górnego
  41. lewego rogu okna na ekranie. Oczywiste sâ teû "szer" i "wys" --
  42. szerokoôê i wysokoôê okna. Zabawa zaczyna sië z parametrem
  43. "IDCMP". Okreôla on, które wiadomoôci o zdarzeniach systemowych
  44. (IntuiMessage) ma otrzymywaê aplikacja. Zdarzenia to m.in.
  45. ruchy myszy, wciôniëcie gadûetu. Program otrzymuje wiadomoôci
  46. poprzez swój port, tworzony zawsze przez system przy uruchamianiu
  47. programu. Jak odczytywaê te wiadomoôci -- napiszë za chwilë.
  48. Strukturë IntuiMesage moûesz obejrzeê, wypisujâc nastëpujâcy
  49. wiersz:
  50.  
  51. <l>e:bin/showmodule emodules:intuition/intuition
  52.  
  53. (---) OBJECT intuimessage
  54.  
  55. (  0)   execmessage:substructure
  56.  
  57. ( 20)   class:LONG
  58.  
  59. ( 24)   code:INT
  60.  
  61. ( 26)   qualifier:INT
  62.  
  63. ( 28)   iaddress:LONG
  64.  
  65. ( 32)   mousex:INT
  66.  
  67. ( 34)   mousey:INT
  68.  
  69. ( 36)   seconds:LONG
  70.  
  71. ( 40)   micros:LONG
  72.  
  73. ( 44)   idcmpwindow:LONG
  74.  
  75. ( 48)   speciallink:LONG
  76.  
  77. (---) ENDOBJECT     /* SIZEOF=52 */
  78.  
  79. <txt>NIE WPISUJ TEGO W SWOIM PROGRAMIE! Aby móc skorzystaê z tej
  80. struktury, jak i z opisywanych flag oraz wiadomoôci IDCMP, dopisz
  81. na poczâtku swojego programu:
  82.  
  83. <l>MODULE 'intuition/intuition'
  84.  
  85. <txt>Zdarzenie, a dokîadnie jego klasa, przechowywana w polu "class"
  86. struktury "intuimessage", moûe byê nastëpujâce (zamieszczam, mimo tego,
  87. ûe dubluje sië to z opisem C):
  88.  
  89. IDCMP_NEWSIZE -- wiadomoôê przesyîana po tym, kiedy uûytkownik zmieniî
  90. wielkoôê okna.
  91.  
  92. IDCMP_REFRESHWINDOW -- wiadomoôê przesyîana wtedy, kiedy
  93. zawartoôê okna trzeba odôwieûyê. Dotyczy okien otwieranych z
  94. flagami WFLG_SIMPLE_REFRESH lub WFLG_SMART_REFRESH. Z tym
  95. odôwieûaniem to jest tak, ûe Intuition odôwieûy za Ciebie
  96. wszystkie gadûety i ramki w oknie, natomiast Twoja dziaîka to
  97. odrysowanie caîej szaty graficznej, którâ tworzy program, np.
  98. wszelkich napisów czy rysunków (funkcje DrawImage(),
  99. PrintIText(), DrawBorder() itd.). Odôwieûanie powinieneô robiê w
  100. takiej klamrze (zmienna "wptr" to wskaúnik do struktury okna
  101. zwracany przez OpenW()):
  102.  
  103. <l>BeginRefresh(wptr)
  104.  
  105. ... tu oôwieûamy nasze bazgroîy ...
  106.  
  107. EndRefresh(wptr,TRUE)
  108.  
  109. <txt>Proszë przeczytaê opis funkcji BeginUpdate() i EndRefresh()
  110. w pliku "intuition.doc" z AutoDocs. Okna WFLG_SMART_REFRESH
  111. wymagajâ odôwieûenia tylko i wyîâcznie wtedy, kiedy uûytkownik
  112. zmieni wielkoôê okna (tak wiëc aplikacja, która otworzy sobie
  113. takie okno, nie otrzyma wiadomoôci IDCMP_REFRESHWINDOW przy
  114. "zwykîych" zniszczeniach -- o odtworzenie okreôlonych regionów
  115. okna zadba system, magazynujâc potrzebne fragmenty okna w pamiëci
  116. Chip). Okien typu WFLG_SUPERBITMAP nie trzeba odôwieûaê.
  117.  
  118. IDCMP_MOUSEBUTTONS -- przekazuje aplikacji wiadomoôci o
  119. wciôniëciu lub puszczeniu przez uûytkownika któregoô klawisza
  120. myszy. Przekazywane sâ tylko te zdarzenia wymienionego typu,
  121. których nie obsîuguje Intuition, a wiëc na przykîad klikniëcie
  122. nad gadûetem zmiany wielkoôci okna nie zostanie przekazane
  123. aplikacji.
  124.  
  125. IDCMP_MOUSEMOVE -- przekazuje wiadomoôci o ruchu myszy, ale tylko
  126. wtedy, kiedy okno jest aktywne oraz jeden z gadûetów stworzonych
  127. przez uûytkownika ma ustawionâ flagë GACT_FOLLOWMOUSE.
  128.  
  129. IDCMP_GADGETDOWN -- informuje aplikacjë, ûe uûytkownik wcisnâî
  130. gadûet. Pojëcie "wciôniëcia" trzeba uôciôliê -- chodzi tu o
  131. naciôniëcie (ale nie puszczenie) lewego klawisza myszy nad
  132. gadûetem. Aby aplikacja otrzymaîa takâ wiadomoôê, gadûet musi
  133. mieê ustawionâ flagë GACT_IMMEDIATE, która informuje Intuition,
  134. ûe aplikacja chce otrzymywaê wiadomoôci omawianego typu zaraz po
  135. tzw. aktywacji gadûetu. Identyfikacjë gadûetu naleûy
  136. przeprowadziê, sprawdzajâc wartoôê pola "gadgetid" w strukturze
  137. zwracanej w polu "iaddress":
  138.  
  139. <l>IF (msg.class=IDCMP_GADGETDOWN) OR (msg.class=IDCMP_GADGETUP)
  140.  
  141.     g:=msg.iaddress
  142.  
  143.     gadid:=g.gadgetid
  144.  
  145. <txt>Zmienna "gadid" bëdzie zawieraîa numer wciôniëtego gadûetu
  146. (nadawany przy ich tworzeniu).
  147.  
  148. IDCMP_GADGETUP -- jak moûna sië domyôliê, oznacza wiadomoôê
  149. wysyîanâ przez Intuition po IDCMP_GADGETDOWN, czyli wtedy, kiedy
  150. uûytkownik puôciî lewy klawisz myszy, a jej wskaúnik znajduje sië
  151. jeszcze nad gadûetem. Aby otrzymaê takâ wiadomoôê, naleûy we
  152. flagach gadûetu ustawiê wartoôê GACT_RELVERIFY. Przy okazji uwaga
  153. -- wspominam o "puszczaniu" gadûetu, klikaniu na nim, ale
  154. przecieû istniejâ typy gadûetów, których uûytkowanie jest
  155. zupeînie inne, np. gadûety do wprowadzania danych (STRING_KIND).
  156. Wiëcej moûna sië dowiedzieê z cyklu, opisujâcego
  157. gadtools.library, który byî u nas drukowany w trzech kolejnych
  158. numerach, poczâwszy od 3/95.
  159.  
  160. IDCMP_MENUPICK -- uûytkownik wybraî jakiô element menu. Moûna to
  161. odczytaê w nastëpujâcy sposób:
  162.  
  163. <l>IF (msg.class=IDCMP_GADGETDOWN) OR (msg.class=IDCMP_GADGETUP)
  164.  
  165.     menuid:=msg.code
  166.  
  167.         menu:=menuid AND %11111
  168.  
  169.         opcja:=Shr(menuid AND %11111100000,5)
  170.  
  171. <txt>IDCMP_CLOSEWINDOW -- uûytkownik chce zamknâê okienko.
  172.  
  173. <sr>*
  174.  
  175. <txt>Na tym zakoïczë ten wakacyjny odcinek. Za miesiâc bëdë dalej
  176. meîî sprawy zwiâzane z oknami i Intuition. Poniewaû zaczyna sië
  177. szkoîa, Wy teû przygotujcie sië na wkuwanie wiëkszej iloôci
  178. materiaîu.
  179.  
  180. <przyp>Literatura: AutoDocs -- "intuition.doc", Commodore 1994.
  181.  
  182. Includes -- "intuition/intuition.h", "intuition/gadgetclass.h",
  183. "libraries/gadtools.h", Commodore 1994.
  184.