Файл: ...\Samples\Solution\Forms\Graphics\Anim.scx
Этот образец иллюстрирует рисование линий на форме. Или точнее, он демонстрирует сохранение координат набора линий для их отрисовки и перерисовки наряду в дополнительными линиями в промежуточных позициях, создающих эффект движения.
Введние линий в таблицу
Каждый раз, когда пользоватлеь рисует линию на форме, ее координаты сохраняются в таблице с приведенной ниже структуров:
Имя | Тип | Описание |
---|---|---|
Frameno |
I |
Увеличивается каждый раз, когда пользователь выбирает New Frame (Новый кадр). |
Objno |
I |
Увеличивается каждый раз, когда линия вводится в кадр. |
X1 |
I |
Начальная координата X для линии. |
X2 |
I |
Конечная координата X для линии. |
Y1 |
I |
Начальная координата Y для линии |
Y2 |
I |
Конечная координата Y для линии. |
Проигрывание кадров
Приведенный ниже программный код проигрывает кадры, повторно использует таблицу в другой рабочей области, выбирает вторую рабочую область и переходит к следующему кадру:
![]() | |
---|---|
USE (lcTable) AGAIN IN 0 ALIAS shadow SELECT shadow LOCATE FOR frameno # &lcTable..frameno |
Переменная nBetween определяет, сколько промежуточных линий рисуется на форме между линией в одном кадре и соответствующей линией в другом кадре.
![]() | |
---|---|
FOR nb = 1 TO nBetween |
Внутри цикла FOR код сканирует таблицу для поиска всех линий, связанных с кадром и вычисляет координаты для промежуточных линий, например:
![]() | |
---|---|
nx1 = frames.x1 + nb * (shadow.x1 - frames.x1) / nBetween ny1 = frames.y1 + nb * (shadow.y1 - frames.y1) / nBetween |
Затем код рисует каждую промежуточную линию и после ожидания в полсекунды (WAIT .05) очищает форму и продолжает цикл.
![]() | |
---|---|
THISFORMSET.frmAnimation.line(nx1,ny1,nx2,ny2) |
Смотрите также
Задачи
Образец рисования линий и контуров на формеОбразцы решений