ЗАДАНИЕ XIV
Тема: Работа с двухмерной
графикой Цель: Изготовление простой головоломки |
Перед началом работы необходимо:
владение основными приемами работы в MS Windows; |
владение основными приемами работы в Stratum 2000. |
Задание
Идея головоломки - определить недостающую фигуру среди уже известных.
Создайте новый проект и нарисуйте макет головоломки, он может выглядеть так:
Выделите ключевую фигуру и замаскируйте ее среди подобных:
Для удобства объедините в группу оставшиеся слева фигуры (для этого выделите их, и нажмите правую кнопку мышки):
Теперь создадим модель обслуживающую головоломку:
Для создания отдельного окна, добавьте на схему объект LGSpace (библиотека Unit). Сделаем автоматическую настройку координат окна по графическому объекту. Нарисуйте обрамляющий прямоугольник. В его свойствах укажите ему имя - frame. Затем в объекте LGSpace, установите для переменной ObjectName значение - frame.
Теперь размер окна будет равным размерам этого прямоугольника. Для того чтобы изменить Z-порядок прямоугольника (поместить его под другими графическими объектами), щелкните на нем правой кнопкой мышки и выберите команду Z-order - Downward. Или просто выберите объект и нажмите кнопки Ctrl-PgDown.
Для того чтобы пользователь мог перетаскивать объекты, добавьте объект DragObjects (библиотека Graph2d). Для того чтобы ограничить возможность перетаскивания, установите у всех стационарных графических объектов флаг Nonselectable object.
Примечание: После того как Вы установите этот флаг, Вам они тоже будут недоступны, и если вы захотите получить к ним доступ, используйте команду Format - Page properties - закладка Flags - Allow choosing unchoosable objects. Выполните редактирование и переключите флаг обратно.
Теперь будем определять правильность выбора пользователя. Создайте новый объект и поместите в него следующую модель:
HANDLE hcobj
if (check) // if user press the "CHECK" button
if (hcobj == #14) // checking descriptor current key object
r := MessageBox("Correct !","",0)
else
r := MessageBox("Incorrect !","",0)
endif
check := 0 // reseting the "CHECK" button
endif
Примечание: Определить дескриптор ключевого объекта можно щелкнув на нем правой кнопкой мышки и выбрав Properties - закладка Info. Смотрите пункт HANDLE, в моем примере он получился равным 14. У вас может быть другим, исправьте значение в тексте!
Добавьте кнопку WinButton (библиотека Unit) и установите у ее переменной Text значение "Check".
Примечение: поскольку кнопка относится к классу Windows объектов у вас могут возникнуть сложности с ее выбором. Выполните команду Format - Page properties - закладка Flags - Disable child windows. Выполните редактирование кнопки. Не забудьте отключить флаг обратно, иначе кнопка не будет работать!
Соедините связью переменные pressed (WinButton) и check (новый объект).
Добавьте объект ScanObject (библиотека Graph2d). Установите в нем значения переменных x,y равными середине ключевого поля нашей головоломки. Определить их можно в StatusLine, установив курсор мышки в нужную позицию. В моем примере это 190,220.
Соедините связью переменные HObject (ScanObject) и hcobj (новый объект).
Пример готов, проверьте его работоспособность.