Program gt_demo; {$incl 'libraries/gadtools.h' } {$incl 'utility/tagitem.h' } {$incl 'intuition/gadgetclass.h' } {$incl 'graphics/text.h' } Type TagList=array[0..31] of tagitem; Var NW:NewWindow; PrgWindow:^Window ActiveGadget,GList,OKGadget,CancelGadget,DisabledGadget:p_Gadget VI:Ptr; WBScreen:p_Screen; OKNewGadget,CancelNewGadget,DisabledNewGadget:NewGadget; Msg:^IntuiMessage; Leave:Boolean; Class:Long; IAddress:Ptr; OKTagList,DisabledTagList:TagList; PrgFont:TextAttr; Begin OpenLib (GTBase,'gadtools.library',0); OpenLib (IntBase,'intuition.library',0); WBScreen:=OpenWorkBench; VI:=GetVisualInfo(WBScreen,Nil); GList:=Nil; if CreateContext(^GList)=NIL then writeln ('Coō nie poszīo tak jak trzeba. Prawdopodobnie za maīo pamiėci.'); OKTagList[0]:=tagitem(GT_Underscore,ord('_')); OKTagList[1]:=tagitem(TAG_END,0); DisabledTagList[0]:=tagitem(GA_Disabled,1); DisabledTagList[1]:=tagitem(TAG_END,0); PrgFont:=TextAttr('topaz.font',8,FS_NORMAL,0); With OKNewGadget do begin gng_LeftEdge:=10; gng_TopEdge:=20; gng_Width:=60; gng_Height:=12; gng_GadgetText:=' _OK '; gng_TextAttr:=^PrgFont; gng_GadgetID:=1; { Gadget ma numer 1. } gng_Flags:=0; gng_VisualInfo:=VI; { Tutaj wīaōnie jest potrzebne VisualInfo } gng_UserData:=Nil; { Wystarczy GadgetID } End; OKGadget:=CreateGadget(BUTTON_KIND,GList,^OKNewGadget,^OKTagList); { Typ Button, Poprzedni gadget - Glist, NewGadget - ustawiona wczeōniej, TagList - nie ma } CancelNewGadget:=NewGadget(100,20,60,12,'Cancel',^PrgFont,2,0,VI,Nil); { To samo co przy OKNewGadget tylko krócej } CancelGadget:=CreateGadget(BUTTON_KIND,OKGadget,^CancelNewGadget,Nil); DisabledNewGadget:=NewGadget(30,40,100,12,'Wyīāczony',^PrgFont,0,0,VI,Nil); DisabledGadget:=CreateGadget(BUTTON_KIND,CancelGadget,^DisabledNewGadget,^DisabledTagList); if GList=Nil then Writeln ('Nie poszīo.') Else Begin NW:=NewWindow(120,100,300,100, 255,255, { Standardowe kolory } _CLOSEWINDOW or GadgetUP or BUTTONIDCMP { Program bėdzie otrzymywaī } { informacje o naciōniėciu gadget'a zamkniėcia okna oraz } { o naciōniėciu (wīaōciwie puszczeniu) gadgetów } ,WindowDrag or WindowClose or Smart_Refresh or WindowDepth or NoCareRefresh, GList { Tutaj dajemy nasz īaļcuch gadgetów } ,Nil, 'Test', Nil, Nil, 0,0,0,0, WBenchScreen); PrgWindow:=OpenWindow(^NW); If PrgWindow=Nil then writeln ('Nie mogė otworzyź okna!') else begin GT_RefreshWindow (PrgWindow,Nil); { Ta instrukcja pokazuje gadgety gadtools } { Spróbuj usunāź tā instrukcjė przy nastėpnym uruchomieniu programu } { I trochė poklikaź w obszarze okna } Leave:=False; Repeat MSG:=Wait_Port(PrgWindow^.UserPort); { Czekamy na wiadomoōź od naszego okna } if MSG<>NIL then Begin { Nadeszīa } MSG:=GT_GetIMsg(PrgWindow^.UserPort); { Wiėc jā odbieramy } { Jeūeli uūywasz gadtools.library zamiast GET_Msg oraz Reply_Msg } { Musisz korzystaź z GT_GetIMsg i GT_ReplyIMsg } Class:=MSG^.Class; IAddress:=MSG^.IAddress; { Zgodnie z zaleceniem Duddie'go tylko przepisujemy interesujāce nas } { pola, interpretowaź bėdziemy póśniej } GT_ReplyIMsg(Msg); { Juū odczytaliōmy, port wolny } { Teraz interpretacja } { Pole Class zawiera informacje która flaga IDCMP (ustawiona w NewWindow) } { spowodowaīa wysīanie message'a } Case Class of _CLOSEWINDOW: Leave:=True; { Uūytkownik nacisnāī gadget zamkniėcia okna } GadgetUP: Begin { Uūytkownik nacisnāī jakiō gadget } ActiveGadget:=IAddress; { Juū mamy wskaśnik do gadgeta który naciōniėto } Case ActiveGadget^.GadgetID of { Teraz tylko sprawdziź pole ID } 1: Writeln ('Nacisneīeō gadget OK! '); 2: Begin Writeln ('Nacisnāīeō gadget Cancel'); End; { I inne wartoōci wpisane w gng_GadgetID } Otherwise; { Na wszelki wypadek } End; End; Otherwise; { To juū konieczne w z innymi gadgetami - } { ustawionych jest wiėcej flag IDCMP, których nie potrzebujemy } End; End; Until Leave { Czekamy , aū Leave=TRUE ( zmienna Leave jest ustawiana przy } { zamkniėciu okna, spróbuj wpisaź Leave:=True przy reakcji na } { gadget Cancel np. po Writeln ('Nacisnāīeō gadget Cancel'); } CloseWindow (PrgWindow); { Zamkniėcie okna } End; FreeGadgets (GList); { Zwolniź pamiėź zajmowanā przez gadgety } End; FreeVisualInfo(VI); { Zwolniź pamiėź zajmowanā przez VisualInfo } CloseLib (IntBase); CloseLib (GTBase); { I zamknāź biblioteki } End.