Dialogs.ob07 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. MODULE Dialogs;
  2. IMPORT
  3. KOSAPI, SYSTEM, OpenDlg, ColorDlg;
  4. CONST
  5. btnNone = 0;
  6. btnClose = 1;
  7. btnOpen = 17;
  8. btnColor = 18;
  9. VAR
  10. header: ARRAY 1024 OF CHAR;
  11. back_color: INTEGER;
  12. PROCEDURE BeginDraw;
  13. BEGIN
  14. KOSAPI.sysfunc2(12, 1)
  15. END BeginDraw;
  16. PROCEDURE EndDraw;
  17. BEGIN
  18. KOSAPI.sysfunc2(12, 2)
  19. END EndDraw;
  20. PROCEDURE DefineAndDrawWindow (left, top, width, height, color, style, hcolor, hstyle: INTEGER; header: ARRAY OF CHAR);
  21. BEGIN
  22. KOSAPI.sysfunc6(0, left*65536 + width, top*65536 + height, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(header[0]))
  23. END DefineAndDrawWindow;
  24. PROCEDURE WaitForEvent (): INTEGER;
  25. RETURN KOSAPI.sysfunc1(10)
  26. END WaitForEvent;
  27. PROCEDURE ExitApp;
  28. BEGIN
  29. KOSAPI.sysfunc1(-1)
  30. END ExitApp;
  31. PROCEDURE pause (t: INTEGER);
  32. BEGIN
  33. KOSAPI.sysfunc2(5, t)
  34. END pause;
  35. PROCEDURE Buttons;
  36. PROCEDURE Button (id, X, Y, W, H: INTEGER; Caption: ARRAY OF CHAR);
  37. VAR
  38. n: INTEGER;
  39. BEGIN
  40. n := LENGTH(Caption);
  41. KOSAPI.sysfunc5(8, X*65536 + W, Y*65536 + H, id, 00C0C0C0H);
  42. X := X + (W - 8*n) DIV 2;
  43. Y := Y + (H - 14) DIV 2;
  44. KOSAPI.sysfunc6(4, X*65536 + Y, LSL(48, 24), SYSTEM.ADR(Caption[0]), n, 0)
  45. END Button;
  46. BEGIN
  47. Button(btnOpen, 5, 5, 70, 25, "open");
  48. Button(btnColor, 85, 5, 70, 25, "color");
  49. END Buttons;
  50. PROCEDURE draw_window;
  51. BEGIN
  52. BeginDraw;
  53. DefineAndDrawWindow(200, 200, 500, 100, back_color, 51, 0, 0, header);
  54. Buttons;
  55. EndDraw;
  56. END draw_window;
  57. PROCEDURE OpenFile (Open: OpenDlg.Dialog);
  58. BEGIN
  59. IF Open # NIL THEN
  60. OpenDlg.Show(Open, 500, 450);
  61. WHILE Open.status = 2 DO
  62. pause(30)
  63. END;
  64. IF Open.status = 1 THEN
  65. COPY(Open.FilePath, header)
  66. END
  67. END
  68. END OpenFile;
  69. PROCEDURE SelColor (Color: ColorDlg.Dialog);
  70. BEGIN
  71. IF Color # NIL THEN
  72. ColorDlg.Show(Color);
  73. WHILE Color.status = 2 DO
  74. pause(30)
  75. END;
  76. IF Color.status = 1 THEN
  77. back_color := Color.color
  78. END
  79. END
  80. END SelColor;
  81. PROCEDURE GetButton (): INTEGER;
  82. VAR
  83. btn: INTEGER;
  84. BEGIN
  85. btn := KOSAPI.sysfunc1(17);
  86. IF btn MOD 256 = 0 THEN
  87. btn := btn DIV 256
  88. ELSE
  89. btn := btnNone
  90. END
  91. RETURN btn
  92. END GetButton;
  93. PROCEDURE main;
  94. CONST
  95. EVENT_REDRAW = 1;
  96. EVENT_KEY = 2;
  97. EVENT_BUTTON = 3;
  98. VAR
  99. Open: OpenDlg.Dialog;
  100. Color: ColorDlg.Dialog;
  101. BEGIN
  102. back_color := 00FFFFFFH;
  103. header := "Dialogs";
  104. Open := OpenDlg.Create(draw_window, 0, "/sys", "ASM|TXT|INI");
  105. Color := ColorDlg.Create(draw_window);
  106. WHILE TRUE DO
  107. CASE WaitForEvent() OF
  108. |EVENT_REDRAW:
  109. draw_window
  110. |EVENT_KEY:
  111. |EVENT_BUTTON:
  112. CASE GetButton() OF
  113. |btnNone:
  114. |btnClose: ExitApp
  115. |btnOpen: OpenFile(Open)
  116. |btnColor: SelColor(Color)
  117. END
  118. END
  119. END
  120. END main;
  121. BEGIN
  122. main
  123. END Dialogs.