Subversion Repositories Kolibri OS

Rev

Rev 9577 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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