ЗАДАНИЕ XIV

Тема: Работа с двухмерной графикой
Цель: Изготовление простой головоломки

Перед началом работы необходимо:

владение основными приемами работы в MS Windows;
владение основными приемами работы в Stratum 2000.

Задание

Идея головоломки - определить недостающую фигуру среди уже известных.

Создайте новый проект и нарисуйте макет головоломки, он может выглядеть так:

lab8_1.gif (5012 bytes)

Выделите ключевую фигуру и замаскируйте ее среди подобных:

lab8_2.gif (6086 bytes)

Для удобства объедините в группу оставшиеся слева фигуры (для этого выделите их, и нажмите правую кнопку мышки):

lab8_3.gif (8792 bytes)

Теперь создадим модель обслуживающую головоломку:

Для создания отдельного окна, добавьте на схему объект LGSpace (библиотека Unit). Сделаем автоматическую настройку координат окна по графическому объекту. Нарисуйте обрамляющий прямоугольник. В его свойствах укажите ему имя - frame. Затем в объекте LGSpace, установите для переменной ObjectName значение - frame.

lab8_4.gif (14179 bytes)

Теперь размер окна будет равным размерам этого прямоугольника. Для того чтобы изменить Z-порядок прямоугольника (поместить его под другими графическими объектами), щелкните на нем правой кнопкой мышки и выберите команду Z-order - Downward. Или просто выберите объект и нажмите кнопки Ctrl-PgDown.

Для того чтобы пользователь мог перетаскивать объекты, добавьте объект DragObjects (библиотека Graph2d). Для того чтобы ограничить возможность перетаскивания, установите у всех стационарных графических объектов флаг Nonselectable object.

lab8_5.gif (10475 bytes)

Примечание: После того как Вы установите этот флаг, Вам они тоже будут недоступны, и если вы захотите получить к ним доступ, используйте команду 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, установив курсор мышки в нужную позицию. lab8_7.gif (361 bytes) В моем примере это 190,220.

Соедините связью переменные HObject (ScanObject) и hcobj (новый объект).

Пример готов, проверьте его работоспособность.

lab8_8.gif (19799 bytes)

Загрузить выполненный проект