Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы программирования в Delphi. Учебно-методическое пособие
.pdf
Основы программирования в Delphi
3. Необходимо также обрабатывать событие OnDragDrop. В ходе обра-
ботки, для исходной кнопки (параметр Source, приведенный к типу TButton с
помощью операции as) задаются новые координаты ее местоположения на
форме (свойства Left и Top).
procedure TForm1.FormDragDrop (Sender, Source: TObject; X, Y: Integer);
begin
(Source as TButton). Left: = X;
(Source as TButton). Top: = Y;
end;
В конце заметим, что дополнительно событиям OnDragOver и
OnDragDrop, могут быть созданы обработчики еще двух событий (необяза-
тельных):
- OnStartDrag – начат процесс перемещения объекта: пользователь нажал и
удерживает левую кнопку мыши;
- OnEndDrag – процесс перемещения и сброса объекта завершен.
В обработчиках этих событий могут быть реализованы дополнительные
требования к перемещению.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Для чего используются в программах компоненты Флажок и Радиокнопка?
2. Перечислите их основные свойства.
3. Что из себя представляет компонент RadioGroup?
4. Как создается главное меню приложения в Delphi?
5. Какие диалоговые окна ввода-вывода можно создавать в Delphi?
6. Перечислите основные события мыши.
7. В чем состоит суть механизма drag and drop?
ВИДЕО-УРОК 6
https://youtu.be/xiaGPjEDjdc
101

Основы программирования в Delphi
Свойство
Назначения
ClipRect
Область холста, которая реально отрисовывается.
Обычно эта область совпадает с клиентской обла-
стью. В ряде случаев за счет ограничения области
вывода небольшим прямоугольником, удается значи-
тельно повысить скорость отображения информации.
PenPos
Текущая позиция графического курсора (тип
TPoint).
Метод
Назначение
procedure MoveTo(x, y: Integer);
Устанавливает текущую позицию гра-
12. РАБОТА С ГРАФИКОЙ В DELPHI
12.1 Использование канвы
Вся технология вывода графической информации на экран основывается
на понятии канвы (Canvas). По умолчанию, область канвы совпадает с клиентской областью формы или элемента управления. Эта область представляет со-
бой ту часть объекта, которая не занята какими-то вспомогательными деталями
оформления (например, заголовком окна, строкой меню, панелью командных
кнопок), недоступными для вывода на них графической информации.
На канву можно обращаться как к свойству формы (или элемента управле-
ния). Например, на канву формы Form1 можно обращаться так:
Form1.Canvas
а на канву элемента управления Image1 (панель компонентов Дополнительные)
можно обращаться так:
Image1. Canvas
Канва является объектом класса TCanvas и, следовательно, имеет соб-
ственные свойства и методы. Ниже приведены самые важные свойства класса
TCanvas, которые активно используются в процессе вывода графической информации.
Методы канвы позволяют рисовать различные геометрические фигуры:
линии, дуги, эллипсы и т.д.
102

Основы программирования в Delphi
фического курсора в точку, с координатами x, y
procedure LineTo(x, y: Integer);
Рисует линию от текущей точки до
точки, с координатами x, y
procedure Rectangle (const Rect:
Trect);
Рисуется прямоугольник, его внутренняя
область заполняется в соответствии со
значением свойства Brush
procedure Ellipse (const Rect:
TRect);
Рисуется эллипс
procedure TextOut (x, y: Integer;
const Text: String);
Вывод строки в конкретную позицию
канвы
Свойство
Назначение
Color
Цвет карандаша
Style
Стиль линии определяет, будет ли она сплошной или
пунктирной
Полный список методов можно найти в учебниках по Delphi. Обращение
к этим методам происходит аналогично обращению к методам класса. Напри-
мер,
X:=0; Y:=0; // Координаты левого верхнего угла формы
Form1.Canvas. MoveTo (X, Y); // Устанавливаем графический курсор
// на точку X=0, Y=0
X:=Form1.Width; // Координаты правого нижнего угла
Y:=Form1.Height;
Form1.Canvas. LineTo(X, Y);
Form1.Canvas.TextOut (0, 100, 'Я учусь на факультете математики и
информатики НИСПТР'); // Вывод текста
Этот фрагмент программы построит линию от левого верхнего угла до
нижнего правого угла формы. Затем выводится текст, начиная с точки с координатами (0, 100).
Определение текущего цвета, толщину и типа линий, текущего шрифта и
характеристик шрифта выполняется за счет использования свойств канвы,
определенных в виде классов.
Свойство Pen (класс TPen) – предназначен для определения текущих ха-
рактеристик линии. Этот класс имеет следующие основные свойства:
103

Основы программирования в Delphi
Width
Толщина линии в пикселях
Mode
Режим рисования определяет, в частности, способ
комбинирования своего цвета с текущем цветом холста
К этим свойствам обращаются также как и другим свойствам формы. Но в
данном случае выражение получается «многоэтажным». Например,
Form1.Canvas.Pen.Color:= clBlue;
Form1.Canvas.Pen.Width:= 15;
В этом фрагменте программы определяется текущий цвет и ширина линии.
Все линии, рисуемые после этих выражений, будут синего цвета, а толщина линии 15 пикселей.
Свойство Font (класс TFont) – с помошью свойств класса TFont можно
определить новый шрифт, высоту шрифта и других характеристик шрифта.
Например,
Form1.Canvas.Font.Size:= 12; // Высота шрифта
Form1.Canvas.Font.Color:=clGreen; // Цвет шрифта
Свойство Brush (класс TBrush). Свойства этого класса предназначены
для заполнения сплошных областей формы в соответствии с заданным шабло-
ном. Например, после выполнения выражений:
Form1.Canvas.Brush.Color:= clGreen;
Form1.Canvas.Rectangle(50,50,200,200);
на форме появится зеленый прямоугольник c координатами диагонально
противоположных углов: (150, 150) и (200, 200).
Помимо свойств Color и Style, в класс TBrush добавлено новое свойство
Bitmap , которое позволяет заполнить область заранее подготовленным точечным изображением.
В конце расмотрим небольшой пример, который демонстрирует возмож-
ности Delphi 7 по работе с графикой.
Пример. В программе имеется меню для установления цвета и толщины
линии, цвета заливки и размера шрифта. Можно задать координаты вершин
для рисования эллипса и прямоугольника, а также очистить канву. Кнопка
Текст позволяет вывести необходимый текст на изображении.
104

Основы программирования в Delphi
Рис. 12.1 Использование канвы в Delphi
Программный код нашего приложения выглядит следующим образом:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
edt1: TEdit;
edt2: TEdit;
lbl1: TLabel;
lbl2: TLabel;
img1: TImage;
Button1: TButton;
Button2: TButton;
105

Button3: TButton;
mm1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
N51: TMenuItem;
N101: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Основы программирования в Delphi
N9: TMenuItem;
N10: TMenuItem;
N12: TMenuItem;
edt3: TEdit;
edt4: TEdit;
lbl3: TLabel;
lbl4: TLabel;
Button4: TButton;
N13: TMenuItem;
N14: TMenuItem;
N121: TMenuItem;
N141: TMenuItem;
N161: TMenuItem;
N181: TMenuItem;
N201: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
imesNewRoman1: TMenuItem;
imesNewRoman2: TMenuItem;
Button5: TButton;
106

Основы программирования в Delphi
edt5: TEdit;
procedure N12Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N51Click(Sender: TObject);
procedure N101Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure N121Click(Sender: TObject);
procedure N141Click(Sender: TObject);
procedure N161Click(Sender: TObject);
procedure N181Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x1,y1,x2,y2:Integer;
implementation
{$R *.dfm}
procedure TForm1.N12Click(Sender: TObject);
107

Основы программирования в Delphi
begin
Form1.Close;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Color:=clRed;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Color:=clBlue;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Color:=clYellow;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Color:=clLime;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Width:=1;
end;
procedure TForm1.N21Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Width:=2;
end;
procedure TForm1.N51Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Width:=5;
108

Основы программирования в Delphi
end;
procedure TForm1.N101Click(Sender: TObject);
begin
Form1.img1.Canvas.Pen.Width:=10;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Form1.img1.Canvas.Brush.Color:=clYellow;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
Form1.img1.Canvas.Brush.Color:=clLime;
end;
procedure TForm1.N10Click(Sender: TObject);
begin
Form1.img1.Canvas.Brush.Color:=clBlue;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
x1:=StrToInt(edt1.Text);
y1:=StrToInt(edt2.Text);
x2:=StrToInt(edt3.Text);
y2:=StrToInt(edt4.Text);
Form1.img1.Canvas.MoveTo(x1,y1);
Form1.img1.Canvas.LineTo(x2,y2);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
x1:=StrToInt(edt1.Text);
y1:=StrToInt(edt2.Text);
x2:=StrToInt(edt3.Text);
109

Основы программирования в Delphi
y2:=StrToInt(edt4.Text);
Form1.img1.Canvas.Ellipse(x1,y1,x2,y2);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
x1:=StrToInt(edt1.Text);
y1:=StrToInt(edt2.Text);
x2:=StrToInt(edt3.Text);
y2:=StrToInt(edt4.Text);
Form1.img1.Canvas.Rectangle(x1,y1,x2,y2);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.img1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
end;
procedure TForm1.N121Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Size:=12;
end;
procedure TForm1.N141Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Size:=14;
end;
procedure TForm1.N161Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Size:=16;
end;
procedure TForm1.N181Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Size:=18;
end;
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
