forked from KolibriOS/kolibrios
0eb1f22eab
oberon07: update examples git-svn-id: svn://kolibrios.org@9648 a494cfbc-eb01-0410-851d-a64ba20cac60
159 lines
2.7 KiB
Plaintext
159 lines
2.7 KiB
Plaintext
MODULE Dialogs;
|
|
|
|
IMPORT
|
|
KOSAPI, SYSTEM, OpenDlg, ColorDlg;
|
|
|
|
|
|
CONST
|
|
btnNone = 0;
|
|
btnClose = 1;
|
|
btnOpen = 17;
|
|
btnColor = 18;
|
|
|
|
|
|
VAR
|
|
header: ARRAY 1024 OF CHAR;
|
|
back_color: INTEGER;
|
|
|
|
|
|
PROCEDURE BeginDraw;
|
|
BEGIN
|
|
KOSAPI.sysfunc2(12, 1)
|
|
END BeginDraw;
|
|
|
|
|
|
PROCEDURE EndDraw;
|
|
BEGIN
|
|
KOSAPI.sysfunc2(12, 2)
|
|
END EndDraw;
|
|
|
|
|
|
PROCEDURE DefineAndDrawWindow (left, top, width, height, color, style, hcolor, hstyle: INTEGER; header: ARRAY OF CHAR);
|
|
BEGIN
|
|
KOSAPI.sysfunc6(0, left*65536 + width, top*65536 + height, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(header[0]))
|
|
END DefineAndDrawWindow;
|
|
|
|
|
|
PROCEDURE WaitForEvent (): INTEGER;
|
|
RETURN KOSAPI.sysfunc1(10)
|
|
END WaitForEvent;
|
|
|
|
|
|
PROCEDURE ExitApp;
|
|
BEGIN
|
|
KOSAPI.sysfunc1(-1)
|
|
END ExitApp;
|
|
|
|
|
|
PROCEDURE pause (t: INTEGER);
|
|
BEGIN
|
|
KOSAPI.sysfunc2(5, t)
|
|
END pause;
|
|
|
|
|
|
PROCEDURE Buttons;
|
|
|
|
PROCEDURE Button (id, X, Y, W, H: INTEGER; Caption: ARRAY OF CHAR);
|
|
VAR
|
|
n: INTEGER;
|
|
BEGIN
|
|
n := LENGTH(Caption);
|
|
KOSAPI.sysfunc5(8, X*65536 + W, Y*65536 + H, id, 00C0C0C0H);
|
|
X := X + (W - 8*n) DIV 2;
|
|
Y := Y + (H - 14) DIV 2;
|
|
KOSAPI.sysfunc6(4, X*65536 + Y, LSL(48, 24), SYSTEM.ADR(Caption[0]), n, 0)
|
|
END Button;
|
|
|
|
BEGIN
|
|
Button(btnOpen, 5, 5, 70, 25, "open");
|
|
Button(btnColor, 85, 5, 70, 25, "color");
|
|
END Buttons;
|
|
|
|
|
|
PROCEDURE draw_window;
|
|
BEGIN
|
|
BeginDraw;
|
|
DefineAndDrawWindow(200, 200, 500, 100, back_color, 51, 0, 0, header);
|
|
Buttons;
|
|
EndDraw;
|
|
END draw_window;
|
|
|
|
|
|
PROCEDURE OpenFile (Open: OpenDlg.Dialog);
|
|
BEGIN
|
|
IF Open # NIL THEN
|
|
OpenDlg.Show(Open, 500, 450);
|
|
WHILE Open.status = 2 DO
|
|
pause(30)
|
|
END;
|
|
IF Open.status = 1 THEN
|
|
COPY(Open.FilePath, header)
|
|
END
|
|
END
|
|
END OpenFile;
|
|
|
|
|
|
PROCEDURE SelColor (Color: ColorDlg.Dialog);
|
|
BEGIN
|
|
IF Color # NIL THEN
|
|
ColorDlg.Show(Color);
|
|
WHILE Color.status = 2 DO
|
|
pause(30)
|
|
END;
|
|
IF Color.status = 1 THEN
|
|
back_color := Color.color
|
|
END
|
|
END
|
|
END SelColor;
|
|
|
|
|
|
PROCEDURE GetButton (): INTEGER;
|
|
VAR
|
|
btn: INTEGER;
|
|
BEGIN
|
|
btn := KOSAPI.sysfunc1(17);
|
|
IF btn MOD 256 = 0 THEN
|
|
btn := btn DIV 256
|
|
ELSE
|
|
btn := btnNone
|
|
END
|
|
RETURN btn
|
|
END GetButton;
|
|
|
|
|
|
PROCEDURE main;
|
|
CONST
|
|
EVENT_REDRAW = 1;
|
|
EVENT_KEY = 2;
|
|
EVENT_BUTTON = 3;
|
|
VAR
|
|
Open: OpenDlg.Dialog;
|
|
Color: ColorDlg.Dialog;
|
|
BEGIN
|
|
back_color := 00FFFFFFH;
|
|
header := "Dialogs";
|
|
Open := OpenDlg.Create(draw_window, 0, "/sys", "ASM|TXT|INI");
|
|
Color := ColorDlg.Create(draw_window);
|
|
|
|
WHILE TRUE DO
|
|
CASE WaitForEvent() OF
|
|
|EVENT_REDRAW:
|
|
draw_window
|
|
|
|
|EVENT_KEY:
|
|
|
|
|EVENT_BUTTON:
|
|
CASE GetButton() OF
|
|
|btnNone:
|
|
|btnClose: ExitApp
|
|
|btnOpen: OpenFile(Open)
|
|
|btnColor: SelColor(Color)
|
|
END
|
|
END
|
|
END
|
|
END main;
|
|
|
|
|
|
BEGIN
|
|
main
|
|
END Dialogs. |