- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •Глава 2
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •2.1.3. Рисование координатной сетки
- •2.1.4. Построение графиков элементарных функций
- •2.2. Класс tBitmap и работа с растровыми рисунками
- •2.2.1. Рисование на поле растрового рисунка
- •2.2.2. Движение двоичного образа по фоновой картинке
- •2.3. Компонент tImage и его использование
- •2.3.1. Проект «Движение компонента tImage»
- •2.3.2. Перемещение картинок
- •2.3.3. Проект «Движение компонента tImage
- •Глава 3
- •3.1. События от мыши
- •3.1.1. Проект «Попади в мишень»
- •3.1.2. Проект «Снежинки»
- •3.1.3. Проект «Крестики-нолики»
- •3.1.4. Движение образа по удерживанию левой кнопки мыши
- •3.1.5. Проект «Жизнь клеток»
- •3.2. События от клавиатуры
- •3.2.1. Код клавиши
- •3.2.2. Управляемое движение образа
- •3.2.3. Совмещение управляемого и неуправляемого движений.
- •Глава 4
- •4.1. Проект «Простейший графический редактор»
- •Глава 5
- •5.1. Создание кнопок
- •5.1.1. Проект «Лохотрон»
- •5.1.2. Игра «Пятнадцать»
- •5.2. Создание компонентов tImage
- •5.2.1. Проект «Угадай картинку»
- •5.2.2. Проект «Собери картинку»
- •Глава 6
- •6.1. Компоненты tStringGrid и tDrawGrid
- •6.1.1. Сортировка массива
- •6.1.2. Проект «Таблица успеваемости»
- •6.1.3. Система предварительной продажи билетов
- •6.1.4. Проект «Таблица рисунков»
- •6.1.5. Рисование в таблице tDrawGrid
- •6.2. Компоненты tListBox, tCombobox ,
- •6.2.1. Прорисовка изображений в списке tListBox
- •6.2.2. Проект «Зоомагазин»
- •6.2.3. Проект «Шуточная игра»
- •6.2.4. Проект «Редактирование списка вопросов»
- •Глава 7
- •7.1. Тест «Знаете ли вы загадки?»
- •7.2. Проект «Исторические даты»
- •Глава 8
- •8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
- •8.1.1. Просмотр текстовых файлов
- •8.2. Добавление и удаление записей в файл и из файла
- •8.2.1. Проект «Журнал группы»
- •8.3. Файлы для проекта «Судоку»
- •Глава 9
- •9.1. Просмотр видеофильма с использованием
- •9.2. Простейшая мультипликация
- •Глава 10
- •10.1. Пример использования try… except
- •Глава 11
- •11.1. Оформление проекта
- •11.1.1. Проект «Бегущая строка»
- •11.1.2. Проект «Титры»
- •11.1.3. Общие рекомендации по оформлению
- •11.2. Рекомендации для отчета по проекту
- •11.3. Темы проектов
- •11.3.1. Головоломка «Сквэрворд»
- •11.3.2. Задача «Путешествие по маршруту»
- •11.3.3. Головоломка «Ходом коня»
- •11.3.4. Задача «Извилистый путь»
- •11.3.5. Головоломка «Фишки на поле»
- •Список литературы
- •630058, Новосибирск, ул. Русская, 35
Глава 5
Динамическое создание компонентов
5.1. Создание кнопок
5.1.1. Проект «Лохотрон»
Постановка задачи. Создать четыре кнопки, пронумеровать кнопки, дать им имя. Программа загадывает случайное число, а играющий должен угадать, какое это число. Для этого он мышью кликает по соответствующей кнопке. Данный проект – это простейший пример динамического создания кнопок и их методов.
Реализация. Положим на форму только одну кнопку «Старт». На рис. 27 дана форма проекта «Лохотрон».
Рис. 27. Форма для проекта «Лохотрон»
Понадобится одна глобальная переменная LuckyNumber
var LuckyNumber:integer;
В обработчике события OnClick кнопки Button1 напишем такой код:
procedure TForm1.Button1Click(Sender: TObject);
Var TB: TButton;
i: Integer;
begin
Randomize;
LuckyNumber:=Random(4)+1; {Загадали случайное число}
For i:=1 To 4 Do
Begin
{ Ищем объект по имени.
Примечание: для TSpeedButton и некоторых других объектов FindChildControl() не работает – необходимо использовать FindComponent() - работает точно с такими же параметрами – именем объекта }
TB:=TButton(Form1.FindChildControl('B'+IntToStr(i)));
If TB<>Nil Then
TB.Free; { Уничтожили кнопку, если она есть }
End;
For i:=1 To 4 Do
Begin
{ Создаём экземпляр класса TButtonForm1
(параметр Owner – хозяин) – объект, отвечающий за удаление кнопки.
Если кнопка не была уничтожена вручную, то при удалении Owner (хозяина) он обходит все принадлежащие ему объекты и удаляет их сам }
TB:=TButton.Create(Form1);
{ Parent – родитель, т. е. объект, на котором будет нарисована кнопка }
TB.Parent:=Form1;
{ На имя объекта накладываются такие же ограничения,
как на имена переменных, т.е. оно должно начинаться с буквы }
TB.Name:='B'+IntToStr(I); {B1, B2, B3 ... }
TB.Left:=i*50; { Чтобы не накладывались друг на друга }
TB.Top:=20;
TB.Width:=30;
TB.Caption:=IntToStr(i);
TB.OnClick:=BTN; { Указание собственного метода }
TB.Tag:=i; { Присваиваем свойству Tag номер кнопки }
End;
end;
Событие OnClick созданных кнопок подключает метод BTN, код которого приведен ниже. В этом методе анализируется, какая кнопка была нажата. Если номер кнопки равен загаданному числу, то выводится сообщение «Победа», все кнопки прячутся (свойство Hide) и можно начинать сначала. Если номер кнопки не равен загаданному числу, то эта кнопка прячется. Заголовок метода BTN помещается в раздел public:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure BTN(Sender: TObject);
{ Public declarations }
end;
procedure TForm1.BTN(Sender: TObject);
Var TB: TButton;
i: Integer;
Begin
{ Sender объект, у которого произошло событие, вызвавшее данный метод }
TB:=TButton(Sender); { Преобразовываем объект класса TObject в кнопку }
If TB.Tag = LuckyNumber Then
Begin
ShowMessage('Победа!');
For i:=1 To 4 Do
Begin
{Ищем кнопки по имени и прячем их}
TB:=TButton(Form1.FindChildControl('B'+IntToStr(I)));
If TB<>Nil Then TB.Hide;
End;
End
Else
Begin
ShowMessage('Не угадали.');
{ Скрываем кнопку, на которую нажали }
TB.Hide;
End;
End;
На рис. 28 показан результат после нажатия кнопки «Старт».
Рис. 28. Кнопки, созданные в проекте «Лохотрон»
Задание. Вместо кнопок TButton используйте кнопки TBitBtn, у которых свойство Glyph позволяет загрузить картинки на поверхность кнопки. Картинки размещайте на кнопки случайным образом. Изначально картинки не видны. Рядом положите такие же картинки. Загадайте одну из них, пометив ее щелчком, а потом поищите ее на кнопках.