В этом упражнении объект будет двигаться по полю окна вашей программы по вашему желанию.
Создайте папку «Движение фигур». Создайте проект. В строке заголовка формы запишите: «Движение фигур» (свойство Caption). Дайте форме имя FormMove (свойство Name). Сохраните модуль и проект под именами UnitMove и ProjectMove в папке «Движение фигур».
Поместите на форму кнопку «Пуск» (TBitBtn), таймер (TTi- mer) и картинку (TImage) как показано на рис. 6.
Рис. 6. Формапроекта«Движениефигур»
Выключите таймер (Active:=False). В папку «Движение фигур» скопируйте файл какого-либо рисунка. После двойного щелчка на объекте Imagel нажмите кнопку Load... (загрузить) и выберите файл скопированного рисунка. В свойстве Stretch (растяжение) выберите значение: True (истина), для того чтобы рисунок полностью отображался в рамке.
С помощью свойства Name дайте кнопке «Пуск» имя: bt_Pusk. В процедуре щелчка на кнопке «Пуск» напишите операторы:
Timerl.Enabled:=True;
Timerl.Interval:=10;
Вы включили таймер и установили для него интервал 10 миллисекунд. Это значит, что события, которые вы опишете в процедуре для таймера, будут происходить с таким интервалом.
Для объекта Timerl на листе событий произведите двойной щелчок в окне события OnTimer (таймер включен). Запишите в теле процедуры следующий оператор:
Imagel.Left:=Imagel.Left+1;
Этот оператор увеличивает расстояние от левого края объекта до левой границы окна на единицу каждые 10 миллисекунд.
Для того чтобы объект можно было остановить в любом месте, добавьте кнопку и назовите ее «Стоп». С помощью свойства Nameдайте кнопке «Стоп» имя: bt_Stop. Запишите в теле процедуры (обрабатывающей щелчок на кнопке) для этой кнопки оператор:
Timeг1.Enabled:=False;
Этот оператор отключает таймер, а значит, отменяются все действия, работающие при включенном таймере.
Если вовремя не нажать кнопку «Стоп», то объект уползет за пределы окна. Чтобы это не случилось, его надо «ставить на место», когда он подползет к правой границе окна. Измените процедуру для таймера следующим образом:
ifImagel.Left>=FormMove.Width- Imagel.Width then Imagel.Left:=16
else {обратите внимание, что перед словом else не ставится знак ";"} Imagel.Left:=Imagel.Left+1;
Здесь проверяется условие: расстояние от левого края объекта до левой границы окна больше, чем ширина окна без ширины объекта? Если условие выполняется, то объект принимает свое первоначальное положение. Если условие не выполняется, то каждые 10 миллисекунд расстояние от левого края объекта до левой границы окна становится на единицу больше.
Вместо числа «16» впишите значение свойства Leftдля вашего объекта. Что будет происходить при изменении интервала таймера? Что будет происходить при изменении шага перемещения? Поэкспериментируйте с этими числами.
А можно ли передвигать по полю формы другие объекты, да еще в разных направлениях? Поместите в центр формы восемь фигур (TShape). Пусть это будут круги разного цвета, но одинакового размера, и все расположены один на другом, как бы слившись в один круг. Свойства Left(слева), Тор (вверху), Width(ширина) и Height(высота) для этих объектов должны быть одинаковыми. И попробуйте сделать так, чтобы они одновременно начали движение в разные стороны. Четыре круга должны двигаться к границам окна и четыре круга должны двигаться к углам окна. Добавьте кнопки управления движением фигур: «Двигать круги», «Остановить круги» и «Восстановить круги». Дайте им имена: bt_MoveCircle, bt_StopCircleи bt_VosstCircle. Добавьте еще один таймер. Выключите его (Active:=False). Запишите для кнопки bt_MoveCircleв теле процедуры, обрабатывающей щелчок на ней:
Timer2.Interval:=10;
Timer2.Enabled:=True;
Включается 2-й таймер. Интервал событий устанавливается равным 10 миллисекундам.
Запишите в теле процедуры для события OnTimer(таймер включен) 2-го таймера следующие операторы:
.Left+1 Top+1; .Left-1 Top-1; .Left+1 Top+1; .Left-1 Top+1; .Left-1 Top-1; Left+1 Top-1; |
Shapel. Shape2. Shape3, Shape4, Shape5, Shape5, Shape6, Shape 6, Shape7. Shape7, Shape8, Shape8, |
Left Top: Left Top: Left Top: Left Top: Left Top: Left Top: |
=Shapel
Shape2.
=Shape3
Shape4.
=Shape5
Shape5
=Shape6
Shape6
=Shape7
Shape7.
=Shape8
Shape8.
Для первых четырех кругов изменяется только один параметр: или расстояние от левого края круга до левой границы окна или расстояние от верхнего края круга до верхней границы окна. Для следующих четырех кругов изменяются одновременно оба этих параметра.
Для того чтобы остановить движение кругов, надо выключить 2-й таймер, поэтому для кнопки «Остановить круги» в теле процедуры запишите оператор: Timer2.Enabled:=False;
В теле процедуры для кнопки «Восстановить круги» должны находиться операторы, восстанавливающие первоначальное положение всех кругов:
Shapel.Left:=184;
Shapel.Top:=112;
Shape2.Left:=184;
Shape2.Top:=112;
Shape3.Left:=184;
Shape3.Top:=112;
Shape4.Left:=184;
Shape4.Top:=112;
Shape5.Left:=184;
Shape5.Top:=112;
Shape6.Left:=184;
Shape6.Top:=112;
Shape7..Left:=184;
Shape7.Top:=112;
Shape8.Left:=184;
Shape8.Top:=112;
Параметры ваших кругов могут не совпадать с этими. Вы их найдете в Инспекторе объектов.
С момента запуска проекта приложения и до того момента, когда на экране монитора отобразится окно приложения проходит некоторое время. Чем сложнее программа, тем больше это время. Чтобы занять пользователя до открытия окна программы, можно использовать заставку. Она открывается очень быстро, и ее можно убрать с экрана, когда открылось основное окно программы. Заставка может отображать ваши данные: фамилию, адрес, электронный почтовый ящик и т. д., может отображать логотип или какой-нибудь рисунок. Давайте создадим для нашего проекта такую заставку.
Создайте форму. В Строке заголовка напишите: «Заставка». Дайте форме имя: FormZastavka. Сохраните модуль под именемUnitZastavkaв папке «Движение фигур». Добавьте к проекту созданную форму.
Рис. 7. Форма заставки
Пропишите модуль после служебного слова implementation (реализация). Если вы нажмете клавишу F7, то будет произведено пошаговое выполнение программы с заходом в подпрограммы. При этом в окне описания программы добавится вкладыш ProjectMove. В нем описывается работа файла, запускающего проект. К действиям файла надо добавить несколько операторов, и получится следующая запись:
Begin
FormZastavka:=TFormZastavka.Create(Application);
FormZastavka.Show; // сделатьокновидимым
FormZastavka.Update; // перерисоватьокно
Application.Initialize; // инициализацияприложения Application.CreateForm(TFormMove, FormMove);
// создатьглавноеокноApplication.CreateForm(TFormZastavka, FormZastavka);
(создать заставку)
FormZastavka.Hide; // сделать окно невидимым
FormZastavka.Free; // освободить память
Application.Run; // запуск приложения
End.
Чтобы окно заставки закрылось при открытии основного окна программы, надо создать соответствующую процедуру для формы «Движение фигур». Произведите двойной щелчок указа телем мыши на форме «Движение фигур» и запишите в теле процедуры:
FormZastavka.Close;
Основное окно приложения открывается быстро, поэтому заставка едва успевает промелькнуть перед вашими глазами. Это неважно, зато теперь вы знаете, как ее создать и для другого приложения.