easygadtools.pas 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. PROGRAM EasyGadtools;
  2. {
  3. This is just a test on how to make a unit EasyGadtools.
  4. Feel free to make any changes or improvements on this
  5. example. If you make a unit or have a unit to handle
  6. gadtools in an easy way let me know.
  7. 24 Jul 2000.
  8. Changed to use systemvartags.
  9. 25 Nov 2002.
  10. [email protected]
  11. }
  12. USES Intuition, Exec, AGraphics, GadTools, Utility;
  13. CONST
  14. strarray : array[0..4] of PChar = ('A cycle',
  15. 'test',
  16. 'for',
  17. 'FPC Pascal',
  18. nil);
  19. VAR
  20. ps : pScreen;
  21. vi : Pointer;
  22. ng : tNewGadget;
  23. glist,gad : pGadget;
  24. wp : pWindow;
  25. HFont : word;
  26. HGadget : word;
  27. DistGad : word;
  28. HG : word;
  29. attr : pTextAttr;
  30. function NewGadget(left,top,width,height : Integer; txt : PChar; txtattr: pTextAttr;
  31. id : word; flags: Longint; visinfo, userdata : Pointer): tNewGadget;
  32. var
  33. ng : tNewGadget;
  34. begin
  35. with ng do begin
  36. ng_LeftEdge := left;
  37. ng_TopEdge := top;
  38. ng_Width := width;
  39. ng_Height := height;
  40. ng_GadgetText := txt;
  41. ng_TextAttr := txtattr;
  42. ng_GadgetID := id;
  43. ng_Flags := flags;
  44. ng_VisualInfo := visinfo;
  45. ng_UserData := userdata;
  46. END;
  47. NewGadget := ng;
  48. end;
  49. PROCEDURE CleanUp(why : string; rc : BYTE);
  50. BEGIN
  51. IF assigned(wp) THEN CloseWindow(wp);
  52. IF assigned(glist) THEN FreeGadgets(glist);
  53. IF assigned(vi) THEN FreeVisualInfo(vi);
  54. if why <> '' then writeln(why);
  55. HALT(rc);
  56. END;
  57. { Clones some datas from default pubscreen for fontsensitive
  58. placing of gadgets. }
  59. PROCEDURE CloneDatas;
  60. BEGIN
  61. ps := LockPubScreen(NIL);
  62. IF ps = NIL THEN CleanUp('Can''t get a lock on public screen',20)
  63. ELSE
  64. BEGIN
  65. HFont := ps^.Font^.ta_YSize;
  66. attr := ps^.Font;
  67. vi := GetVisualInfoA(ps,NIL);
  68. UnLockPubScreen(NIL, ps);
  69. IF vi = NIL THEN CleanUp('Can''t get VisualInfo', 20);
  70. END;
  71. END;
  72. function ButtonGadget(id,left,top,width,height:word; txt:pchar): pGadget;
  73. begin
  74. ng := NewGadget(left,top,width,height,txt,attr,id,PLACETEXT_IN,vi,nil);
  75. gad := CreateGadgetA(BUTTON_KIND,gad,@ng,nil);
  76. ButtonGadget := gad;
  77. end;
  78. function ButtonGadget(id,left,top,width,height:word; txt: AnsiString): pGadget;
  79. begin
  80. ButtonGadget := ButtonGadget(id,left,top,width,height,PChar(txt));
  81. end;
  82. function CycleGadget(id,left,top,width,height:word; txt:pchar ; thearr : Pointer): pGadget;
  83. begin
  84. ng := NewGadget(left,top,width,height,txt,attr,id,PLACETEXT_LEFT,vi,nil);
  85. gad := CreateGadget(CYCLE_KIND,gad,@ng,[
  86. AsTag(GTCY_Labels), AsTag(thearr),
  87. TAG_END]);
  88. CycleGadget := gad;
  89. end;
  90. PROCEDURE GenerateWindow;
  91. BEGIN
  92. glist := NIL; gad := CreateContext(addr(glist));
  93. IF gad = NIL THEN CleanUp('Can''t create GadList', 20);
  94. gad := ButtonGadget(0,10,HG,200,HGadget,'File Requester');
  95. HG := HG + DistGad;
  96. gad := ButtonGadget(1,10,HG,200,HGadget,'Font Requester');
  97. HG := HG + DistGad;
  98. gad := ButtonGadget(2,10,HG,200,HGadget,'Screen Requester');
  99. HG := HG + DistGad + 3;
  100. //gad := CycleGadget(3,100,HG,100,HGadget,'Cycle me',@strarray);
  101. //HG := HG + DistGad+4;
  102. gad := ButtonGadget(4,10,HG,96,HGadget,'OK');
  103. gad := ButtonGadget(5,115,HG,96,HGadget,'Cancel');
  104. HG := HG + 5;
  105. if gad = nil then CleanUp('Can''t create gadgets',20);
  106. wp := OpenWindowTags(NIL,[
  107. WA_Gadgets, AsTag(glist),
  108. WA_Title, AsTag('Test of EasyGadtools'),
  109. WA_Left, AsTag(100),
  110. WA_Top, AsTag(100),
  111. WA_Flags, WFLG_SMART_REFRESH OR WFLG_NOCAREREFRESH OR
  112. WFLG_DEPTHGADGET OR WFLG_DRAGBAR OR WFLG_CLOSEGADGET OR
  113. WFLG_ACTIVATE,
  114. WA_Idcmp, IDCMP_GADGETUP OR IDCMP_CLOSEWINDOW,
  115. WA_InnerWidth, 215,
  116. WA_InnerHeight, HG,
  117. TAG_DONE]);
  118. IF wp = NIL THEN CleanUp('Can''t open window', 20);
  119. END;
  120. PROCEDURE MainWait;
  121. VAR
  122. msg : pIntuiMessage;
  123. iclass : LONG;
  124. ende : BOOLEAN;
  125. BEGIN
  126. ende := FALSE;
  127. REPEAT
  128. msg := pIntuiMessage(WaitPort(wp^.UserPort));
  129. msg := GT_GetIMsg(wp^.UserPort);
  130. WHILE msg <> NIL DO
  131. BEGIN
  132. iclass := msg^.IClass;
  133. GT_ReplyIMsg(msg);
  134. CASE iclass OF
  135. IDCMP_CLOSEWINDOW : ende := TRUE;
  136. IDCMP_GADGETUP : writeln('You clicked on a gadget');
  137. ELSE END;
  138. msg := GT_GetIMsg(wp^.UserPort);
  139. END;
  140. UNTIL ende;
  141. END;
  142. BEGIN
  143. CloneDatas;
  144. HGadget := HFont +6;
  145. DistGad := HGadget +4;
  146. HG := HFont + 10;
  147. GenerateWindow;
  148. MainWait;
  149. CleanUp('',0);
  150. END.