Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. MODULE Dialogs;
  2.  
  3. IMPORT KOSAPI, sys := SYSTEM, OpenDlg, ColorDlg;
  4.  
  5. VAR header: ARRAY 1024 OF CHAR; back_color: INTEGER;
  6.  
  7. PROCEDURE WindowRedrawStatus(p: INTEGER);
  8. VAR aux: INTEGER;
  9. BEGIN
  10.   aux := KOSAPI.sysfunc2(12, p)
  11. END WindowRedrawStatus;
  12.  
  13. PROCEDURE DefineAndDrawWindow(x, y, w, h, color, style, hcolor, hstyle, htext: INTEGER);
  14. VAR aux: INTEGER;
  15. BEGIN
  16.   aux := KOSAPI.sysfunc6(0, x * 65536 + w, y * 65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), htext)
  17. END DefineAndDrawWindow;
  18.  
  19. PROCEDURE WaitForEvent(): INTEGER;
  20.   RETURN KOSAPI.sysfunc1(10)
  21. END WaitForEvent;
  22.  
  23. PROCEDURE ExitApp;
  24. VAR aux: INTEGER;
  25. BEGIN
  26.   aux := KOSAPI.sysfunc1(-1)
  27. END ExitApp;
  28.  
  29. PROCEDURE pause(t: INTEGER);
  30. VAR aux: INTEGER;
  31. BEGIN
  32.   aux := KOSAPI.sysfunc2(5, t)
  33. END pause;
  34.  
  35. PROCEDURE Buttons;
  36.  
  37.   PROCEDURE Button(id, X, Y, W, H: INTEGER; Caption: ARRAY OF CHAR);
  38.   VAR n, aux: INTEGER;
  39.   BEGIN
  40.     n := LENGTH(Caption);
  41.     aux := 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.     aux := KOSAPI.sysfunc6(4, X * 65536 + Y, LSL(48, 24), sys.ADR(Caption[0]), n, 0)
  45.   END Button;
  46.  
  47. BEGIN
  48.   Button(17,  5, 5, 70, 25, "open");
  49.   Button(18, 85, 5, 70, 25, "color");
  50. END Buttons;
  51.  
  52. PROCEDURE draw_window;
  53. BEGIN
  54.   WindowRedrawStatus(1);
  55.   DefineAndDrawWindow(200, 200, 500, 100, back_color, 51, 0, 0, sys.ADR(header[0]));
  56.   Buttons;
  57.   WindowRedrawStatus(2);
  58. END draw_window;
  59.  
  60. PROCEDURE OpenFile(Open: OpenDlg.Dialog);
  61. BEGIN
  62.   IF Open # NIL THEN
  63.     OpenDlg.Show(Open, 500, 450);
  64.     WHILE Open.status = 2 DO
  65.       pause(30)
  66.     END;
  67.     IF Open.status = 1 THEN
  68.       COPY(Open.FilePath, header)
  69.     END
  70.   END
  71. END OpenFile;
  72.  
  73. PROCEDURE SelColor(Color: ColorDlg.Dialog);
  74. BEGIN
  75.   IF Color # NIL THEN
  76.     ColorDlg.Show(Color);
  77.     WHILE Color.status = 2 DO
  78.       pause(30)
  79.     END;
  80.     IF Color.status = 1 THEN
  81.       back_color := Color.color
  82.     END
  83.   END
  84. END SelColor;
  85.  
  86. PROCEDURE main;
  87. VAR Open: OpenDlg.Dialog; Color: ColorDlg.Dialog; res, al: INTEGER;
  88. BEGIN
  89.   back_color := 00FFFFFFH;
  90.   header := "Dialogs";
  91.   draw_window;
  92.   Open := OpenDlg.Create(draw_window, 0, "/rd/1", "ASM|TXT|INI");
  93.   Color := ColorDlg.Create(draw_window);
  94.   WHILE TRUE DO
  95.     CASE WaitForEvent() OF
  96.     |1: draw_window
  97.     |3: res := KOSAPI.sysfunc1(17);
  98.         al := LSR(LSL(res, 24), 24);
  99.         res := LSR(res, 8);
  100.         IF al = 0 THEN
  101.           CASE res OF
  102.           | 1: ExitApp
  103.           |17: OpenFile(Open)
  104.           |18: SelColor(Color)
  105.           END
  106.         END
  107.     ELSE
  108.     END
  109.   END
  110. END main;
  111.  
  112. BEGIN
  113.   main
  114. END Dialogs.