Доработать созданное приложение для реализации новых функций.
Задание №1
· При изменении размера окна должен меняться размер текстового окна;
· Добавить в меню пункт, который позволяет вставлять в позицию курсора текущую дату и время;
· Изменить программный код для кнопок панели инструментов для того, чтобы форматирование (размер, цвет, начертание, тип шрифта) применялось только к выделенному фрагменту.
Задание №2
· Если фрагмент текста не выделен, режимы Вырезать и Копировать должны быть не доступны (в меню и на панели инструментов);
· Если не был выбран режим Вырезать и Копировать нет доступа к режиму Вставить;
Задание №3
- Разработать программный код для пункта Файл/ Новый. При выборе этого пункта текстовое окно очищается, если его содержимое было сохранено. Если сохранение не выполнялось, вывести запрос о подтверждении действия.
Пример диалогового окна для выбора дальнейших действий
if messagedlg('Уверены? ',mtconfirmation, [mbyes,mbno], 0) = mryes then … else …;
Задание №4
|
|
- После сохранения отобразить имя файла в заголовке формы;
- Реализовать режим печати текста на принтере;
- Предусмотреть перехват ошибок при обращении к принтеру.
Контрольные вопросы
1. Как обратится к буферу обмена в программном коде?
2. Какие стандартные диалоговые окна можно использовать в проекте?
3. Как обратится к выделенному фрагменту текста и какие объекты позволяют это сделать?
4. Как обратиться к абзацу текста?
5. В какие объекты можно вывести содержимое текстового файла?
ПРАКТИЧЕСКАЯ РАБОТА № 6
Тема: Массивы
Цель работы: Получить навыки использования массива объектов в приложении.
Пояснения к работе
В Delphi разрешается определять массивы объектов, что весьма удобно, если в программе имеются группы объектов, действующих примерно одинаково. Такие массивы позволяют «привязывать» разные элементы управления к одной процедуре обработки события.
Способ создания массива объектов:
· установить компонент (на его основе будет создаваться массив), изменить необходимые свойства;
· объявить массив объектов (имя массива не должно совпадать с именем ранее установленного компонента);
· написать программный код для создания объектов массива, «привязки» объектов к форме и определения их свойств (обычно код пишется в FormCreate);
· если предполагается, что объекты массива должны реагировать на внешние события, то создаются и объявляются соответствующие процедуры.
Элементы массива объектов имеют одинаковые имена, различаются по индексу, остальные свойства могут совпадать или отличаться. Для обращения к элементу массива объектов необходимо указать имя объекта и в квадратных скобках его номер.
|
|
Постановка задачи:
Разработать приложение «Игра в пятнашки».
Алгоритм игры следующий: в прямоугольной коробке находится 15 фишек, на которых написаны числа от 1 до 15. Размер коробки - 4х4, таким образом, в коробке одна пустая ячейка. В начале игры фишки перемешаны. Задача игрока состоит в том, чтобы, не вынимая фишки из коробки, выстроить фишки в правильном порядке (по возрастанию).
Порядок выполнения
- Создать новый проект. Установить на форме командную кнопку, задать имя для нее Pole.
- Объявить массив объектов и переменные:
game:array[0..15] of TButton;
d,i:integer;
3. Для формы изменить свойство AutoSize - True, выбрать событие Сreate и ввести код:
Var
row,col:integer;
Begin
d:=50;// размер кнопки
For i:=0 to 15 do
Begin
game[i]:= TButton.Create(pole);
game[i].Parent:= Form1;
game[i].Width:=d; game[i].Height:=d;
game[i].Font.Style:=pole.Font.Style;
game[i].Font.Size:=pole.Font.Size;
game[i].Caption:=inttostr(i);
col:=i mod 4; //номер столбца для кнопки
row:=i div 4; //номер строки для кнопки
game[i].Top:=d*row;
game[i].Left:=d*col;
game[i].OnClick:=GameClick;
End;
game[0].Caption:=''; End;
4. Объявить процедуру
procedure GameClick(Sender: TObject);
- Ввести код для этой процедуры:
Procedure TForm1.GameClick(Sender: TObject);
Var
x0,y0,x,y,index:integer;
Begin
//определение номера нажатой кнопки
For i:=0 to 15 do
If game[i].Focused =true Then index:=i;;
// координаты пустышки
x0:=game[0].left;
y0:=game[0].Top;
//координаты нажатой кнопки
x:=game[index].left;
y:=game[index].Top;
//если соседи по столбцу, то обмен
If (x0=x) and (abs(y-y0)=d) Then
Begin
game[0].Left:=x; game[0].Top:=y;
game[index].Left:=x0; game[index].Top:=y0;
End;
//если соседи по строке, то обмен
If (y0=y) and (abs(x-x0)=d) Then
Begin
game[0].Left:=x; game[0].Top:=y;
game[index].Left:=x0; game[index].Top:=y0;
End;
End;
- Проверить работу программы.
- Создать главное меню на форме из двух пунктов: Перемешать и Выход. Для пункта Перемешать ввести следующий код:
randomize;
For v:=1 to 20 Do
Begin
row:=random(15)+1;
game[row].SetFocus;
gameclick(game[row]);
End;
- Предложить способ, как можно определить что задача решена и вывести соответствующее сообщение.
Задания для самостоятельного выполнения
Задание №1
Доработайте созданное приложение «Пятнашки»:
- добавить пункты в главное меню, позволяющие:
- выполнять настройку игрового поля (3х2, 4х4, 5х5);
- менять уровень сложности игры (степень перемешивания)
- вести счет количества результативных ходов пользователя.
Задание №2
Разработайте приложение «Клавиатура». Приложение должно работать следующим образом:
-
при щелчке по одной из «клавиш» в текстовое окно добавляется выбранная буква или пробел;
- при щелчке по кнопке «Очистить», текст полностью исчезает.
Кнопки с буквами – это массив объектов (командные кнопки или метки). Примерный вид окна представлен на рисунке.
Задание №3
Разработать игровое приложение, которое работает следующим образом:
- после загрузки приложения картинки (массив объектов) меняют свои координаты случайным образом (скорость перемещения отрегулируйте сами)
- при щелчке по любой картинке, она становится невидимой;
- работа программы заканчивается тогда, когда все изображения становятся невидимыми. Примерный вид окна представлен на рисунке.
Задание №4
Модифицировать приложение «Пятнашки»:
- создать массив объектов Image;
- разработать код для размещения на каждом объекте фрагмента одного рисунка.
Задача игрока – восстановить изображение картинки из фрагментов.
Контрольные вопросы
1. Из каких объектов можно создать массив объектов?
2. Какова последовательность создания массива объектов?
3. Если в приложении используется массив из 10 объектов, каждый из которых должен реагировать на двойной щелчок мыши, сколько процедур необходимо при этом создать?
4. Могут ли объекты, входящие в массив, реагировать на несколько событий?