
6.5.2. Пример 1. Рисование на канве
Рассмотрим следующую задачу: в текстовом файле записано несколько строк. Каждая строка начинается с символа, обозначающего один из методов канвы. Затем в той же строке приведено несколько значений целого типа, необходимых для работы этих методов. Необходимо прочитать этот файл и построить графические примитивы на канве. В табл. 6.4 приведены первые символы строки и методы соответствующие этим символам.
Таблица 6.5
Символ |
Метод |
Назначение |
L |
LineTo(x1,y1) |
Отрезок прямой |
M |
MoveTo(x1,y1) |
Переместить указатель |
R |
RectAngle(x1,y1,x2,y2) |
Прямоугольник |
E |
Ellipse(x1,y1,x2,y2) |
Эллипс |
C |
Brush.Color:=C |
Цвет кисти |
C |
Pen.Color:=C |
Цвет пера |
T |
TextOut(x1,y1,s); |
Строка текста |
Список параметров каждого метода определяет число и тип значений, идущих в каждой строке за первым символом. Так, например, если строка начинается с символа T, то далее в строке ожидается два целых числа и строка.
Для реализации этой задачи создадим проект из одной формы FormMain, на которую выставим компоненты TMainMenu и OpenDialog. В меню определим только два пункта: Open и Exit. Создадим обработчик события Open1Click и метод формы DrawPicture(FName: string), который необходимо «прописать» в классе TFormMain (листинг 6.3):
Листинг 6.3. Описание класса формы
TFormMain = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
OpenDialog1: TOpenDialog;
procedure Exit1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
private
{ Private declarations }
procedure DrawPicture(FName: string);
public
{ Public declarations }
end;
Обработчик события Open1Click вызывает диалог OpenDialog1 и, в случае нажатия кнопки Ok, вызывает процедуру DrawPicture:
Листинг 6.4. Обработчик события Open1Click
procedure TFormMain.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
DrawPicture(OpenDialog1.FileName);
end;
Основная процедура DrawPicture открывает текстовый файл и циклом while читает все строки файла (листинг 6.5).
Листинг 6.5. Процедура чтения файла и рисования DrawPicture
procedure TFormMain.DrawPicture(FName: string);
var f: textfile;
ch: char;
x1,y1,x2,y2,C: integer;
s: string;
begin
AssignFile(f,FName); Reset(f); // открыть файл
with Canvas do
begin
while not EOF(f) do begin
Read(f,ch); // чтение первого символа строки
case ch of // чтение остальных данных в строке и построение
'L': begin // линия
Readln(f,x1,y1); LineTo(x1,y1);
end;
'R': begin // прямоугольник
Readln(f,x1,y1,x2,y2); RectAngle(x1,y1,x2,y2);
end;
'E': begin // эллипс
Readln(f,x1,y1,x2,y2); Ellipse(x1,y1,x2,y2);
end;
'C': begin // установить цвет заливки
Readln(f,C); Brush.Color:=C;
end;
'c': begin // установить цвет линий
Readln(f,C); Pen.Color:=C;
end;
'T': begin // нарисовать строку символов
Readln(f,x1,y1,s); TextOut(x1,y1,s);
end;
end;
end;
end;
CloseFile(f); // закрыть файл
end;