Skip to content

Instantly share code, notes, and snippets.

@DoubleDi
Created November 7, 2017 22:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DoubleDi/17c230e1edf5528f12a11622f76a4dc1 to your computer and use it in GitHub Desktop.
Save DoubleDi/17c230e1edf5528f12a11622f76a4dc1 to your computer and use it in GitHub Desktop.
/* Запуск программы */
start :- /* создаём диалоговое окно */
new(DW, dialog('Окно моей программы')),
/* создаём поле Picture для вывода графических
фигур и задаём его размеры */
new(Picture, picture),
send(Picture, width(350)),
send(Picture, height(350)),
/*добавляем в это диалоговое окно список
объектов*/send_list(DW,append, /*графическое поле*/
[Picture,
/*поле для ввода ширины фигуры: заданы имя поля,
значение по умолчанию и min и мах ограничения */
new(Width, int_item(width, low := 10,
high := 300, default := 150)),
/* аналогичное поле для высоты фигуры */
new(Height,int_item(height, low := 10,
high := 300, default := 150))]),
/*добавляем поле для ввода Х-координаты */
send(DW, append, new(X, int_item(x_coord,
default := 10))),
/*добавляем поле для ввода Y-координаты */
send(DW, append, new(Y, int_item(y_coord,
/*добавляем список объектов*/
send_list(DW,append,
default :=10))),
/* кнопка "Нарисовать прямоугольник", при нажатии
происходит вычисление предиката mybox с пятью
аргументами, последние четыре получают значения из
соответствующих полей ввода */
[button('нарисовать прямоугольник',
86
message(@prolog,mybox,Picture,
Width?selection,
Height?selection,
X?selection, Y?selection)),
/* аналогичная кнопка "Нарисовать эллипс" */
button('нарисовать эллипс',
message(@prolog, myellipse,
Picture,
Width?selection,
Height?selection,
X?selection, Y?selection)),
/*кнопка "стереть" очищает графическую область*/
button('стереть',
message(Picture,clear))]),
/*добавляем кнопку "exit" завершения работы
программы – уничтожает диалоговое окно */
send(DW, append,
button(exit, and(message(DW, destroy),
message(Picture, destroy)))),
/*делаем объекты DW и Picture активными */
send(Picture, open),
send(DW, open).
/* вспомогательный предикат рисования
прямоугольника заданной ширины и высоты, с
заданными координатами левого верхнего угла */
mybox(Picture,Width,Height,X,Y) :-
send(Picture, display,
new(_,box(Width,Height)), point(X,Y)).
/*аналогичный предикат рисования эллипса */
myellipse(Picture,Width,Height,X,Y) :-
send(Picture, display,
new(_,ellipse(Width,Height)),
point(X,Y)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment