123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- PROGRAM EasyGadtools;
- {
- This is just a test on how to make a unit EasyGadtools.
- Feel free to make any changes or improvements on this
- example. If you make a unit or have a unit to handle
- gadtools in an easy way let me know.
- 24 Jul 2000.
- Changed to use systemvartags.
- 25 Nov 2002.
- [email protected]
- }
- USES Intuition, Exec, AGraphics, GadTools, Utility;
- CONST
- strarray : array[0..4] of PChar = ('A cycle',
- 'test',
- 'for',
- 'FPC Pascal',
- nil);
- VAR
- ps : pScreen;
- vi : Pointer;
- ng : tNewGadget;
- glist,gad : pGadget;
- wp : pWindow;
- HFont : word;
- HGadget : word;
- DistGad : word;
- HG : word;
- attr : pTextAttr;
- function NewGadget(left,top,width,height : Integer; txt : PChar; txtattr: pTextAttr;
- id : word; flags: Longint; visinfo, userdata : Pointer): tNewGadget;
- var
- ng : tNewGadget;
- begin
- with ng do begin
- ng_LeftEdge := left;
- ng_TopEdge := top;
- ng_Width := width;
- ng_Height := height;
- ng_GadgetText := txt;
- ng_TextAttr := txtattr;
- ng_GadgetID := id;
- ng_Flags := flags;
- ng_VisualInfo := visinfo;
- ng_UserData := userdata;
- END;
- NewGadget := ng;
- end;
- PROCEDURE CleanUp(why : string; rc : BYTE);
- BEGIN
- IF assigned(wp) THEN CloseWindow(wp);
- IF assigned(glist) THEN FreeGadgets(glist);
- IF assigned(vi) THEN FreeVisualInfo(vi);
- if why <> '' then writeln(why);
- HALT(rc);
- END;
- { Clones some datas from default pubscreen for fontsensitive
- placing of gadgets. }
- PROCEDURE CloneDatas;
- BEGIN
- ps := LockPubScreen(NIL);
- IF ps = NIL THEN CleanUp('Can''t get a lock on public screen',20)
- ELSE
- BEGIN
- HFont := ps^.Font^.ta_YSize;
- attr := ps^.Font;
- vi := GetVisualInfoA(ps,NIL);
- UnLockPubScreen(NIL, ps);
- IF vi = NIL THEN CleanUp('Can''t get VisualInfo', 20);
- END;
- END;
- function ButtonGadget(id,left,top,width,height:word; txt:pchar): pGadget;
- begin
- ng := NewGadget(left,top,width,height,txt,attr,id,PLACETEXT_IN,vi,nil);
- gad := CreateGadgetA(BUTTON_KIND,gad,@ng,nil);
- ButtonGadget := gad;
- end;
- function ButtonGadget(id,left,top,width,height:word; txt: AnsiString): pGadget;
- begin
- ButtonGadget := ButtonGadget(id,left,top,width,height,PChar(txt));
- end;
- function CycleGadget(id,left,top,width,height:word; txt:pchar ; thearr : Pointer): pGadget;
- begin
- ng := NewGadget(left,top,width,height,txt,attr,id,PLACETEXT_LEFT,vi,nil);
- gad := CreateGadget(CYCLE_KIND,gad,@ng,[
- AsTag(GTCY_Labels), AsTag(thearr),
- TAG_END]);
- CycleGadget := gad;
- end;
- PROCEDURE GenerateWindow;
- BEGIN
- glist := NIL; gad := CreateContext(addr(glist));
- IF gad = NIL THEN CleanUp('Can''t create GadList', 20);
- gad := ButtonGadget(0,10,HG,200,HGadget,'File Requester');
- HG := HG + DistGad;
- gad := ButtonGadget(1,10,HG,200,HGadget,'Font Requester');
- HG := HG + DistGad;
- gad := ButtonGadget(2,10,HG,200,HGadget,'Screen Requester');
- HG := HG + DistGad + 3;
- //gad := CycleGadget(3,100,HG,100,HGadget,'Cycle me',@strarray);
- //HG := HG + DistGad+4;
- gad := ButtonGadget(4,10,HG,96,HGadget,'OK');
- gad := ButtonGadget(5,115,HG,96,HGadget,'Cancel');
- HG := HG + 5;
- if gad = nil then CleanUp('Can''t create gadgets',20);
- wp := OpenWindowTags(NIL,[
- WA_Gadgets, AsTag(glist),
- WA_Title, AsTag('Test of EasyGadtools'),
- WA_Left, AsTag(100),
- WA_Top, AsTag(100),
- WA_Flags, WFLG_SMART_REFRESH OR WFLG_NOCAREREFRESH OR
- WFLG_DEPTHGADGET OR WFLG_DRAGBAR OR WFLG_CLOSEGADGET OR
- WFLG_ACTIVATE,
- WA_Idcmp, IDCMP_GADGETUP OR IDCMP_CLOSEWINDOW,
- WA_InnerWidth, 215,
- WA_InnerHeight, HG,
- TAG_DONE]);
- IF wp = NIL THEN CleanUp('Can''t open window', 20);
- END;
- PROCEDURE MainWait;
- VAR
- msg : pIntuiMessage;
- iclass : LONG;
- ende : BOOLEAN;
- BEGIN
- ende := FALSE;
- REPEAT
- msg := pIntuiMessage(WaitPort(wp^.UserPort));
- msg := GT_GetIMsg(wp^.UserPort);
- WHILE msg <> NIL DO
- BEGIN
- iclass := msg^.IClass;
- GT_ReplyIMsg(msg);
- CASE iclass OF
- IDCMP_CLOSEWINDOW : ende := TRUE;
- IDCMP_GADGETUP : writeln('You clicked on a gadget');
- ELSE END;
- msg := GT_GetIMsg(wp^.UserPort);
- END;
- UNTIL ende;
- END;
- BEGIN
- CloneDatas;
- HGadget := HFont +6;
- DistGad := HGadget +4;
- HG := HFont + 10;
- GenerateWindow;
- MainWait;
- CleanUp('',0);
- END.
|