- •2. Визуальные компоненты
- •2.1. Свойства
- •2.2. События
- •2.3. Методы
- •If Edit1.CanFocus then Edit1.SetFocus; {перед получением фокуса производится проверка на возможность передачи фокуса компоненту}
- •3. Работа с текстом
- •3.1. Использование надписей
- •3.2. Однострочный редактор
- •3.3. Общие свойства, события и методы компонентов редактирования
- •3.4. Класс tStrings
- •3.5. Многострочный редактор
- •3.6. Использование списков
- •3.7. Таблица String Grid
- •4. Кнопки и переключатели
- •4.1. Работа с кнопками
- •4.1.1. Стандартная кнопка
- •4.1.2. Кнопка с рисунком
- •4.2. Работа с переключателями
- •4.2.1. Переключатель с независимой фиксацией
- •If CheckBox1.Checked then MessageDlg ('Время истекло! ', mtError, [mbОк], 0);
- •4.2.2. Переключатель с зависимой фиксацией
- •4.3. Объединение элементов управления
- •5. Использование форм
- •5.1. Свойства, методы и события форм
- •5.2. Организация взаимодействия форм
- •5.3. Особенности модальных форм
- •5.4. Шаблоны форм
- •5.5. Процедуры и функции, реализующие диалоги
- •5.6. Стандартные диалоги
- •If OpenDialog1.Execute then // при отмене диалога открытие файла не происходит
- •If SaveDialog1.Execute then { Получить имя файла }
- •6.Главное и контекстное меню, панели инструментов
- •6.1. Класс tMenuItem
- •6.2. Cоздание главного и контекстного меню
- •6.3. Динамическая настройка меню
- •6.4. Панели инструментов
- •7. Создание графических изображений
- •7.1. Классы для работы с графикой
- •7.2. Основные компоненты для размещения изображений
- •7.3. Типы графических объектов
- •7.4. Создание диаграмм
- •8. Печать объектов
- •8.1. Класс tPrinter
- •8.2. Печать текста
- •Var fPrn: Text; // объявлена переменная типа Text.
- •8.3. Диалоговые окна для работы с принтером
- •8.4. Печать графических изображений
- •8.4.1. Печать форм
- •8.4.2. Печать диаграмм
- •9. Работа с датами
- •9.1. Преобразование даты
- •9.2. Компоненты для ввода дат
- •10. Сохранение параметров программы.
- •Ini : tIniFile; //объявляем переменную типа inifile
- •Ini : tIniFile; //объявляем переменную типа inifile
- •11. Обработка исключительных ситуаций
- •Var f: File; begin AssignFile(f, 'Somefile.Ext'); try // оператор, в котором возможна ошибка Reset(f); // работы с файлом finally CloseFile(f) end;
7. Создание графических изображений
7.1. Классы для работы с графикой
Класс TFont определяет характеристики шрифта в любом компоненте, который может содержать текст. Свойства данного типа:
• Charset: TFontCharset NoDefault; определяет набор символов шрифта.
Значения, которые могут быть использованы в качестве TFontCharset: type TFontCharset = (fcsLatin1, fcsAnyCharSet, fcsLatin2, fcsLatin3, fcsLatin4, fcsISO_8859_5, fcsISO_8859_6, fcsKOI8R, fcsSet_Ja, fcsSet_Ko, fcsSet_Th_TH, fcsSet_Zh, fcsUnicode);
• Color: TColor; определяет цвет символов.
• Height: Integer; устанавливает высоту шрифта в пикселях.
• Name: TFontName; задает имя шрифта.
• Рitch: TFontPitch; задает ширину шрифта и может принимать значения: fpDefault – ширина задается типом шрифта, fpVariable – ширина символов переменная, fpFixed – ширина символов фиксированная.
• Size: Integer; задает высоту шрифта в пунктах (1 пункт = 1/72 дюйма).
• Style: TFontStyles; задает тип шрифта: fsBold – полужирный, fsItalic – курсив, fsUnderline – подчеркнутый, fsStrikeOut – перечеркнутый.
Класс ТРеn задает характеристики карандаша, которым создаются изображения различных линий либо контуров. Основные свойства:
• Color: TColor; определяет цвет линии, рисуемой карандашом. По умолчанию – черный.
• Mode: TPenMode; определяет стиль рисования линий карандашом. Может принимать следующие значения: pmBlack – всегда изображается черная линия;
pmWhite – всегда изображается белая линия;
pmNop – бесцветная линия;
pmNot – цвет, инверсный цвету экрана;
pmCopy – цвет определяется значением свойства Color;
pmNotCopy – цвет, инверсный цвету, заданному в свойстве Color;
pmMergePenNot – комбинация цвета Color и инверсного цвета экрана;
pmMaskPenNot – комбинация цветов, общих у Color и инверсного цвета экрана;
pmMergeNotPen – комбинация цвета экрана и инверсного цвета Color;
pmMaskNotPen – комбинация цветов, общих у цвета экрана и инверсного цвета Color;
pmMerge – комбинация цветов экрана и Color;
pmNotMerge – цвет, инверсный комбинации цветов экрана и Color;
pmMask – комбинация цветов, общих у экрана и Color;
pmNotMask – цвет инверсный комбинации цветов, общих у экрана и Color;
pmXor – комбинация цветов, присутствующих у цвета экрана или Color, но не одновременно у обоих;
pmNotXor – цвет, инверсный комбинации цветов, присутствующих у цвета экрана или
Color, но не одновременно у обоих.
По умолчанию цвет линии определяется свойством Color.
• Style: TPenStyle; определяет стиль линии, рисуемой карандашом: psSolid – сплошная линия (значение по умолчанию),
psDash – штриховая линия,
psDot – пунктирная линия,
psDashDot – штрихпунктирная линия,
psDashDotDot – штрихпунктирная линия с двумя пунктирами,
psClear – невидимая линия,
psInsideFrame – линия внутри замкнутой рамки
• Width: Integer; определяет толщину рисуемой линии. По умолчанию толщина равна 1 пикселю.
Класс TBrush содержит определение характеристик кисти, которая используется для заливки (закраски) замкнутых областей. Основные свойства:
• Bitmap: TBitmap; указывает на объект типа TBitmap, содержащий побитовое отображение изображения, размером 8х8 пикселей. Если Bitmap не пустой, то шаблон заполнения определяется именно им, а не свойством Style. Иначе свойство должно иметь значение nil.
• Color: TColor; определяет цвет кисти. По умолчанию – белый цвет.
• Style: TBrushStyle; определяет орнамент кисти. Могут быть значения: bsSolid – сплошная раскраска,
bsClear – отсутствие раскраски,
bsHorizontal – горизонтальные линии,
bsVertical – вертикальные линии,
bsFDiagonal – левые диагональные линии,
bsBDiagonal – правые диагональные линии,
bsCross – клетка,
bsDiagCross – косая клетка.
Класс TCanvas определяет объект Canvas, который представляет собой поверхность компонента, используемую для рисования, и инструменты, с помощью которых создаётся изображение: шрифт (класс TFont), карандаш (класс TPen) и кисть (класс TBrush). Объекты типа TCanvas не являются компонентами и используются как свойства различных элементов управления. Основные свойства TCanvas:
• Brush: TBrush; задает кисть канвы.
• Font: TFont; задает шрифт канвы.
• Pen: ТРеn; задает карандаш канвы.
• PenPos: TPoint; определяет положение графического курсора.
Все геометрические фигуры можно условно разбить на контурные (не имеющие внутренней закраски) и закрашенные (имеющие внутреннюю закраску). При рисовании контурных фигур используется только карандаш Реn с установленными в нем характеристиками (цвет линии, толщина и т.д.). Для закрашенных фигур (например эллипс, многоугольник) внутренность закрашивается кистью Brush с установленными в ней характеристиками (цвет, орнамент и т.д.). Тексты изображаются в соответствии с характеристиками (начертания, размер и т.д.), заданными в шрифте Font. На этапе выполнения программы значения свойств Pen, Brush и Font можно изменять.
Канва состоит из отдельных точек – пикселей. Каждый пиксель имеет горизонтальную и вертикальную координату. Начало координат, т.е. точка с координатами (0,0), располагается в левом верхнем углу канвы. Горизонтальная ось направлена слева направо, а вертикальная – сверху вниз. Размер канвы зависит от размера и особенностей компонента. Так, например, для компонента Image размер канвы определяется свойствами Height и Width, а для формы – свойствами ClientHeight и ClientWidth.
На канве есть невидимый графический курсор, который определяет текущее положение карандаша. Как правило, рисование графических примитивов – линий, окружностей, прямоугольников и т.д. – начинается с текущего положения этого курсора. В процессе рисования положение курсора изменяется или устанавливается в заданное положение.
Основные методы создания простых графических изображений в классе TCanvas:
• procedure MoveТo(Х, Y: Integer); перемещает графический курсор в точку с координатами (Х, Y).
• procedure LineTo(X, Y: Integer); проводит линию карандашом Реn из текущего положения графического курсора, определяемого свойством PenPos, до точки с координатами (Х,Y). Свойство PenPos получает новое значение, определяемое координатами (Х, Y).
Пример построения диагональных прямых линии формы при ее обновлении.
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
Pen.Color:=clRed;
MoveTo(0,0);
LineTo(ClientWidth, ClientHeight);
MoveTo(0, ClientHeight);
LineTo(ClientWidth, 0);
end;
end;
• procedure Arc(X1, Y1, Х2, X2, Х3, Y3, Х4, Y4: Integer); рисует дугу эллипса, который вписан в прямоугольник с координатами левого верхнего угла (Х1,Y1) и правого нижнего угла (Х2,Y2). Дуга начинается в точке пересечения эллипса с прямой, проходящей через центр эллипса и точку с координатами (Х3,Y3), а заканчивается в точке пересечения эллипса с прямой, проходящей через центр эллипса и точку с координатами (Х4, Y4).
Пример построения дуги на форме при ее обновлении
procedure TForm1.FormPaint(Sender: TObject);
var R: TRect;
begin
R := GetClientRect; {Выдает размеры текущего контейнера}
Canvas.Arc(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
end;
• procedure Chord (X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); чертит замкнутую фигуру, границами которой являются дуга окружности или эллипса и хорда. Параметры данного метода аналогичны параметрам метода Arc • procedure Ellipse(X1, Y1, Х2, Y2: Integer); overload; рисует эллипс, вписанный в прямоугольник с координатами левого верхнего угла (X1, Y1) и правого нижнего угла (Х2, Y2).
• procedure Pie(X1, Y1, Х2, Y2, Х3, Y3, Х4, X4: Longint); рисует сектор эллипса. Дуга эллипса задается так же, как методе Arc.
• procedure Rectangle(X1, Y1, Х2, Y2: Integer); overload; рисует прямоугольник, у которого левый верхний угол имеет координаты (Х1, Y1), а правый нижний угол – координаты (Х2, Y2).
Пример построения прямоугольника на форме при ее обновлении.
procedure TForm1.FormPaint(Sender: TObject);
var X,Y: integer;
begin
X:=Form1.Height; Y:=Form1.Width;
Canvas.Rectangle(Random(X), Random(Y), Random(X), Random(Y));
end;
• procedure RoundRect(X1, Y1, Х2, Y2, Х3, Y3: Integer); рисует прямоугольник, у которого левый верхний угол имеет координаты (X1, Y1), а правый нижний угол – координаты (Х2, Y2). Углы прямоугольника закруглены частями эллипса с осями X3 и Y3.
Пример построения прямоугольника со скругленными углами, которые скруглены по
шаблону окружности, с диаметром 10 точек.
procedure TForm1.FormPaint (Sender: TObject);
begin
Canvas.RoundRect(0, 0, ClientWidth div 2, ClientHeight div 2, 10, 10);
end;
• procedure PolyBeziеr (const Points: array of TPoint); чертит на канве цветом пера Реn сглаженную кривую по заданному множеству точек, определенных в массиве Points.
Пример построения кривой на форме при ее обновлении
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.PolyBezier([Point(0, 0), Point (100, 10), Point (20, 30), Point(230, 100)]);
end;
• procedure Polygon (Points: array of TPoint); чертит на канве многоугольник по заданному множеству точек, определенных в массиве Points, причем первая точка массива соединяется с последней, после чего многоугольник закрашивается цветом, определенным свойством кисти Brush.
Пример построения многоугольника на форме при ее обновлении.
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color := clTeal;
Canvas.Polygon([Point(10, 10), Point(30, 10), Point(130, 30), Point(240, 120)]);
end;
• procedure Polyline (Points: array of TPoint); чертит на канве незамкнутый многоугольник. Аналогичен методу Polygon, только не соединяет первую и последнюю точки массива Points
• procedure FillRect (const Rect: TRect); заполняет указанную прямоугольную область канвы цветом, определенным текущим значением свойства Color кисти (Brush) Пример построения закрашенной области на форме при ее обновлении.
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color:=clRed;
Canvas.FillRect(Rect(0,0,100,100));
end;
• procedure TextOut(X, Y: Integer; const Text: string); выводит текст Text на поверхность канвы. X и Y являются координатами левого верхнего угла.
Пример вывода текста на форму при ее обновлении:
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Font.Color := clRed;
Canvas.TextOut(20, 20, 'Owner Drawn text');
end;
• function TextHeight(const Text: string): Integer; возвращает высоту текста Text в пикселях, определяемую шрифтом Font.
• function TextWidth(const Text: string): Integer; возвращает длину текста Text в пикселях, определяемую шрифтом Font В классе TCanvas определены события OnChange и OnChanging • property OnChange: TNotifyEvent; возникает перед изменениями в канве.
• property OnChanging: TNotifyEvent; возникает после изменений в канве.