TestSimpleGui.Mod 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. MODULE TestSimpleGui;
  2. IMPORT G := Graph, S := SimpleGui, Out, Int, Strings;
  3. CONST window = FALSE;
  4. VAR
  5. frmMain: S.Form;
  6. pnlSide: S.Panel;
  7. btnSave: S.Button;
  8. btnExit: S.Button;
  9. pnlMap: S.Panel;
  10. btn2: S.Button;
  11. btnMove: S.Button;
  12. edtText: S.Edit;
  13. scbHorz, scbHorz2: S.ScrollBar;
  14. scbVert: S.ScrollBar;
  15. sbxMap: S.ScrollBox;
  16. btnFile: S.Button;
  17. btnEdit: S.Button;
  18. edtMsg: S.Edit;
  19. custom: S.Widget;
  20. cnvSign: S.Canvas;
  21. XX, YY: INTEGER;
  22. moving: BOOLEAN;
  23. PROCEDURE BtnExitOnClick(c: S.Widget);
  24. BEGIN
  25. S.Quit
  26. END BtnExitOnClick;
  27. PROCEDURE Btn2OnClick(c: S.Widget);
  28. BEGIN
  29. c(S.Button).caption[1] := CHR((ORD(c(S.Button).caption[1]) + 1) MOD 1256)
  30. END Btn2OnClick;
  31. PROCEDURE BtnExitOnMouseMove(c: S.Widget; x, y: INTEGER; btns: SET);
  32. BEGIN
  33. c(S.Button).caption[5] := CHR((ORD(c(S.Button).caption[5]) + 1) MOD 256);
  34. c(S.Button).caption[6] := CHR(ORD(c(S.Button).caption[5]) + 1);
  35. c(S.Button).caption[7] := 0X
  36. END BtnExitOnMouseMove;
  37. PROCEDURE BtnMoveOnMouseDown(c: S.Widget; x, y, btn: INTEGER);
  38. BEGIN
  39. IF btn = 1 THEN moving := TRUE; XX := x; YY := y END
  40. END BtnMoveOnMouseDown;
  41. PROCEDURE BtnMoveOnMouseUp(c: S.Widget; x, y, btn: INTEGER);
  42. BEGIN moving := FALSE
  43. END BtnMoveOnMouseUp;
  44. PROCEDURE BtnMoveOnMouseMove(c: S.Widget; x, y: INTEGER; btns: SET);
  45. BEGIN
  46. IF moving THEN
  47. c.x := c.x + x - XX;
  48. c.y := c.y + y - YY;
  49. XX := x; YY := y;
  50. IF c.x < 0 THEN c.x := 0 END
  51. END;
  52. END BtnMoveOnMouseMove;
  53. PROCEDURE OnScroll(c: S.ScrollBar; value: INTEGER);
  54. VAR s: ARRAY 32 OF CHAR;
  55. BEGIN
  56. S.ScrollBarSetValue(scbHorz2, value);
  57. Int.Str(scbHorz.value, s);
  58. Strings.Append(':', s);
  59. Int.Append(scbVert.value, s);
  60. S.EditSetText(edtText, s)
  61. END OnScroll;
  62. PROCEDURE ScbHorz2OnScroll(c: S.ScrollBar; value: INTEGER);
  63. BEGIN
  64. S.ScrollBarSetValue(scbVert, value)
  65. END ScbHorz2OnScroll;
  66. PROCEDURE CustomOnPaint(c: S.Widget; x, y, w, h: INTEGER);
  67. VAR color: G.Color;
  68. BEGIN
  69. G.MakeCol(color, 255, 255, 0);
  70. G.Line(x, y, x + w - 1, y + h - 1, color);
  71. G.Line(x + w - 1, y, x, y + h - 1, color);
  72. END CustomOnPaint;
  73. PROCEDURE CustomOnMouseMove(c: S.Widget; x, y: INTEGER; btns: SET);
  74. VAR color: G.Color;
  75. BEGIN
  76. G.MakeCol(color, 0, x * 7 MOD 256, y * 7 MOD 256);
  77. btnFile.bgColor := color
  78. END CustomOnMouseMove;
  79. PROCEDURE CnvSignOnMouseMove(c: S.Widget; x, y: INTEGER; btns: SET);
  80. VAR color: G.Color;
  81. draw: BOOLEAN;
  82. BEGIN
  83. draw := TRUE;
  84. IF btns = {1} THEN
  85. color := btnFile.bgColor
  86. ELSIF btns = {2} THEN
  87. G.MakeCol(color, 0, 255, 255)
  88. ELSE
  89. draw := FALSE
  90. END;
  91. IF draw THEN
  92. G.Target(c(S.Canvas).bmp);
  93. G.PutPixel(x, y, color)
  94. END
  95. END CnvSignOnMouseMove;
  96. PROCEDURE InitInterface(): BOOLEAN;
  97. VAR W, H: INTEGER;
  98. color: G.Color;
  99. BEGIN
  100. G.GetScreenSize(W, H);
  101. frmMain := S.NewForm(0, 0, W, H);
  102. pnlSide := S.NewPanel(frmMain, 4, 4, 104, H - 8);
  103. G.MakeCol(color, 40, 150, 40);
  104. S.SetBgColor(pnlSide, color);
  105. btnSave := S.NewButton(pnlSide, 4, 4, 96, 24, 'Сохранить');
  106. btnExit := S.NewButton(pnlSide, 4, 32, 96, 24, 'Выйти');
  107. S.SetOnClick(btnExit, BtnExitOnClick);
  108. S.SetOnMouseMove(btnExit, BtnExitOnMouseMove);
  109. edtText := S.NewEdit(pnlSide, 4, 60, 96, 20);
  110. scbHorz := S.NewScrollBar(pnlSide, 4, 84, 96, 16);
  111. S.ScrollBarSetOnScroll(scbHorz, OnScroll);
  112. scbHorz2 := S.NewScrollBar(pnlSide, 24, 104, 76, 50);
  113. S.ScrollBarSetOnScroll(scbHorz2, ScbHorz2OnScroll);
  114. scbVert := S.NewScrollBar(pnlSide, 4, 104, 16, 140);
  115. S.ScrollBarSetVertical(scbVert, TRUE);
  116. S.ScrollBarSetOnScroll(scbVert, OnScroll);
  117. pnlMap := S.NewPanel(frmMain, 112, 4, W - 116, H - 8);
  118. G.MakeCol(color, 150, 90, 40);
  119. S.SetBgColor(pnlMap, color);
  120. btn2 := S.NewButton(pnlMap, 64, 4, 96, 96, 'ОГО!');
  121. S.SetOnClick(btn2, Btn2OnClick);
  122. btnMove := S.NewButton(pnlMap, 168, 4, 96, 96, 'ДВИГАЙ');
  123. S.SetOnMouseDown(btnMove, BtnMoveOnMouseDown);
  124. S.SetOnMouseUp(btnMove, BtnMoveOnMouseUp);
  125. S.SetOnMouseMove(btnMove, BtnMoveOnMouseMove);
  126. sbxMap := S.NewScrollBox(pnlMap, 4, 104, 300, 200);
  127. S.ScrollBoxSetNoBg(sbxMap, ~TRUE);
  128. S.ScrollBoxSetInnerSize(sbxMap, 700, 800);
  129. G.MakeCol(color, 0, 90, 255);
  130. S.SetBgColor(sbxMap, color);
  131. btnFile := S.NewButton(sbxMap, 20, 40, 80, 24, 'Файл');
  132. btnEdit := S.NewButton(sbxMap, 260, 40, 80, 24, 'Правка');
  133. edtMsg := S.NewEdit(sbxMap, 60, 170, 120, 35);
  134. custom := S.NewWidget(sbxMap, 50, 70, 100, 70);
  135. S.SetOnPaint(custom, CustomOnPaint);
  136. S.SetOnMouseMove(custom, CustomOnMouseMove);
  137. cnvSign := S.NewCanvas(sbxMap, 210, 80, 150, 250);
  138. S.SetOnMouseMove(cnvSign, CnvSignOnMouseMove);
  139. moving := FALSE
  140. RETURN TRUE END InitInterface;
  141. PROCEDURE Init(): BOOLEAN;
  142. VAR ok: BOOLEAN;
  143. BEGIN ok := TRUE;
  144. IF window THEN G.Settings(640, 480, {G.window}) END;
  145. G.Init;
  146. IF ~G.Done THEN ok := FALSE END;
  147. IF ok THEN
  148. S.Init;
  149. IF ~S.Done THEN ok := FALSE END
  150. END;
  151. IF ok & ~InitInterface() THEN ok := FALSE END
  152. RETURN ok END Init;
  153. PROCEDURE Close;
  154. BEGIN
  155. G.Close
  156. END Close;
  157. BEGIN
  158. IF Init() THEN S.Run ELSE Out.String('Error loading.'); Out.Ln END;
  159. Close
  160. END TestSimpleGui.