- •Оглавление
- •Введение
- •Глава 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
6.1.4. Проект «Таблица рисунков»
Постановка задачи. Простейший проект знакомит с компонентом TDrawGrid и его свойствами.
Компонент TDrawGrid является непосредственным родителем строковой таблицы TStringGrid, поэтому передает ей все свои свойства, методы и события за исключением специфичных для строк свойств Cells, Cols, Objects и Rows.
В приведенном примере компонент TDrawGrid используется для показа картинок и текста одновременно. Результат работы проекта приведен на рис. 35.
Рис. 35. Проект «Таблица рисунков»
Реализация. Найдите подходящие рисунки примерно одинакового размера и сохраните их в папке проекта. Создайте пустую форму для данного приложения и положите на нее таблицу DrawGrid. Значения фиксированных строки и столбца сделайте равными 0. Задайте число строк и столбцов так, чтобы число ячеек таблицы равнялось числу файлов с картинками. В приведенном примере шесть файлов с изображениями, поэтому таблица имеет три столбца и две строки. Установите для компонента DrawGrid1 следующие значения свойств.
В свойствах DrawGrid1 найдите DefaultRowHeight и DefaultRowWidth и сделайте их значения такими, чтобы они были немного больше размеров растрового рисунка. Установите свойство ScrollBars таблицы, равным ssNone. Оно означает – не вставлять полосы прокрутки.
В описание класса TForm1 вставьте такое поле sBitMap:
public
sBitMap: TStringList;
Это поле будет использоваться для хранения картинок и текстовых строк. Его необходимо создать и наполнить в момент создания окна, и уничтожить при его уничтожении. Поэтому создайте следующие обработчики событий OnCreate и OnDestroy для формы:
procedure TForm1.FormCreate(Sender: TObject);
// Эта процедура создает и наполняет список slBitMap
const fname:array[0..5] of String=('Ананас.bmp','Вишня.bmp',
'Апельс.bmp','Яблоко.bmp','Арбуз.bmp','Груша.bmp');
mas:array[0..5] of String=('Ананас','Вишня', 'Апельсин',
'Яблоко','Арбуз','Груша');
var k:integer;
begin
// Создаем список строк
sBitMap:=TStringList.Create;
// Вставляем в него названия картинок
for k:=0 to 5 do
begin
sBitMap.Add(mas[k]);
// Свойство Objects служит для хранения картинок
sBitMap.Objects[k]:=TBitMap.Create;
(sBitMap.Objects[k] as TBitMap).LoadFromFile(fname[k]);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
sBitMap.Free; // Уничтожает список строк
end;
Теперь необходимо создать обработчик события OnDrawCell. Этот обработчик обязателен для компонента TDrawGrid, так как без него компонент не сможет заполнить пустые клетки каким-либо изображением или текстом.
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var k,w,wr : integer;
{Рисует картинку из sBitMap.Objects[k] и текст из sBitMap}
begin
// Уменьшаем высоту картинки для вывода под ней текста:
Rect.Bottom:=Rect.Bottom-DrawGrid1.Canvas.TextHeight('1') – 2;
// Пересчитываем координаты ячейки в индекс списка:
k:=2*ACol + ARow;
{ Рисуем картинки в ячейках, при этом картинка растягивается по ячейке, поэтому ячейки не делайте слишком большими }
DrawGrid1.Canvas.StretchDraw(Rect,(sBitMap.Objects[k] as TBitMap));
// Центрируем текст по горизонтали и выводим его
w:=DrawGrid1.Canvas.TextWidth(sBitMap[k]);
wr:= (Rect.Right – Rect.Left - w) div 2;
DrawGrid1.Canvas.TextOut(Rect.Left + wr, Rect.Bottom + 1,
sBitMap[k]);
end;