Таблица 9 Класс ТРеn
Свойство | Назначение |
Color | Определяет цвет пера |
Style | Определяет стиль линии, рисуемой пером. |
psSolid | сплошная линия |
psDash | пунктирная линия |
psDot | точечная линия |
psDashDot | точечно-пунктирная линия |
psDashDotDot | точечно-пунктирная линия |
psClear | прозрачная линия |
psInsideFrame | |
Width | Содержит значение толщины пера в пикселах |
Пунктирные и штрихпунктирные линии (стили psDash, psDot, psDashDot, psDashDotDot) могут быть установлены только для линий единичной толщины. Более толстые линии должны быть сплошными — такое ограничение существует в Windows.
Класс TBrush инкапсулирует свойства кисти — инструмента для заливки областей. Когда создается экземпляр этого класса, первоначально создается белая сплошная кисть. Приведем свойства этого класса.
Таблица 10 Класс TBrush
Свойство | Назначение |
Color | Определяет цвет кисти |
Style | Определяет стиль кисти (фактура закраски) |
bsSolid | сплошная заливка |
bsClear | прозрачная заливка |
bsHorizontal | горизонтальная штриховка |
bsVertical | вертикальная штриховка |
bsFDiagonal | диагональная штриховка с наклоном вправо |
bsBDiagonal | диагональная штриховка с наклоном влево |
bsCross | перекрещенная штриховка |
bsDiagCross | диагональная перекрещенная штриховка |
Для поточечного рисования можно получить доступ к каждому пикселу, используя значение свойства Pixels[X, Y: Integer], которое соответствует цвету точки с координатами X, Y. Необходимость рисовать отдельную точку возникает нередко, но если нужно модифицировать все или хотя бы многие точки изображения, свойство pixels надо сразу отбросить — настолько оно неэффективно.
4.2 Методы класса TCanvas
Канва содержит методы-надстройки над всеми основными функциями рисования GDI Windows и свойства, которые приведены ниже в табл. 8.4. При их рассмотрении имейте в виду, что все геометрические фигуры рисуются текущим пером. Те из них, которые можно закрашивать, закрашиваются с помощью текущей кисти. Кисть и перо при этом имеют текущий цвет.
Таблица 11 Методы TCanvas
procedure Arc (XI, Y1, Х2, Y2, Х3, Y3, Х4, Y4: integer); | Метод рисует сегмент эллипса. Эллипс определяется описывающим прямоугольником (Х1, Y1) — (Х2, Y2); его размеры должны лежать в диапазоне от 2 до 32767 точек. Начальная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (ХЗ, Y3). Конечная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (Х4, Y4). Сегмент рисуется против часовой стрелки. |
procedure Chord (XI, Y1, Х2, Y2, ХЗ, Y3, Х4, Y4 : Integer); | Рисует хорду и заливает отсекаемую ею часть эллипса. Эллипс, начальная и конечная точки хорды определяются как в методе Arc |
procedure Ellipse (XI, Y1, Х2, Y2: Integer); | Рисует и закрашивает эллипс, вписанный в прямоугольник (Х1, Y1) – (Х2, Y2) |
procedure LineTo(X, Y: Integer); | Проводит линию текущим пером из текущей точки в (X, Y) |
procedure MoveTo(X, Y: Integer); | Перемещает текущее положение пера (свойство PenPos) в точку (X, Y) |
procedure FillRect(const Rect: TRect) ; | Производит заливку прямоугольника (текущей кистью) |
procedure Pie(XI, Yl, X2, Y2, X3, Y3, X4, Y4: Integer); | Рисует сектор эллипса, описываемого прямоугольником (Х1, Y1) — (X2, Y2). Стороны сектора лежат на лучах, проходящих из центра эллипса через точки (X3, Y3) и (X4, Y4) |
procedure Polygon(const Points: array of TPoint); | Строит многоугольник, используя массив координат точек Points. При этом последняя точка соединяется с первой и внутренняя область закрашивается |
procedure Polyline(const Points: array of TPoint); | Строит ломаную линию, используя массив координат точек Points |
procedure Rectangle(X1, Y1,X2, Y2: Integers); | Рисует прямоугольник с верхним левым углом в (Х1, Y1) и нижним правым в (X2, Y2) |
Procedure RoundRect(XI, Yl, X2, Y2, X3, Y3: Integers); | Рисует прямоугольник с закругленными углами. Координаты вершин — те же, что и в методе Rectangle. Закругления рисуются как сегменты эллипса с размерами осей по горизонтали и вертикали X3 и Y3 |
procedure TextOut(X, Y; Integer; const Text: string); | Производит вывод строки Text. Левый верхний угол помещается в точку канвы (X, Y) |
Предусмотрено два события для пользовательской реакции на изменение канвы: OnChange и OnСhanging. Эти события возникают при изменениях свойств и вызовах методов TCanvas, меняющих вид канвы (то есть, при любом рисовании; в методе MoveTo, например, они не возникают). Отличие их в том, что событие onChanging вызывается до начала изменений, а событие OnChange — после их завершения.
4.3 Примеры использования свойств и методов класса TCanvas
Заполнение формы разноцветными точками.
procedure TForm1.FormPaint(Sender: TObject);
var i, j: integer;
begin
for i:=0 to Width-1 do
|
Canvas. Pixels[i, j]:=i*j;
end;
Рисование отрезка с координатами начала и конца (10, 10) и (20, 20) толстой сплошной линией красного цвета.
begin
|
Canvas. Pen. Width:=10;
Canvas. MoveTo(10,10);
Canvas. LineTo(20,20);
end;
Рисование прямоугольника с координатами (20,30) и (80,100) синей пунктирной линией с заливкой красного цвета.
begin
Canvas. Pen. Color:=clBlue;

Canvas. Pen. Width:=1;
Canvas. Pen. Style:=psDash;
Canvas. Brush. Color:=clRed;
|
end;
Рисование окружности с центром в (100, 100) и радиусом 50 белой точечной линией со штрихованной заливкой синего цвета.

with Canvas do begin
pen. Color:=clWhite;
Pen. Width:=1;
Pen. Style:=psDot;
Brush. Color:=clBlue;
Brush. Style:=bsCross;
Ellipse(100-50,100-50,100+50,100+50);
|
Рисование замкнутой ломаной линии (пятиугольной звезды)
Canvas. Pen. Color := clWhite;
Canvas. Polyline([Point(40, 10), Point(20, 60), Point(70, 30),
Point(10, 30), Point(60, 60), Point(40, 10)]);
Рисование верхней четверти окружности (эллипса)

Canvas. Arc(10, 10, 100, 100, 100, 10, 10, 10);
5. Использование визуальных компонентов
Визуальные компоненты представляют собой элементы, из которых конструируется интерфейс работающего приложения. Однако существует значительное количество компонентов, которые не создают видимого изображения, но тем не менее играют важную роль в программной реализации приложения. Правильнее думать о компонентах как о заранее приготовленных фрагментах программы, которые можно вставлять, если в этом есть необходимость, в разрабатываемую программу. В этом разделе приводится начальный обзор компонентов, который дает самое общее представление о богатстве возможностей Delphi. Библиотеки компонентов для разных версий Delphi строятся по принципу расширения: в первой версии было около 70 компонентов, в то время как в состав Delphi 6 входит более 300 компонентов. Ниже компоненты группируются по функциональному признаку, приводятся их краткие описания.
5.1 Метки
Метки предназначены для размещения на форме различного рода текстовых надписей. Для этого служит центральное свойство компонента – Caption. С помощью свойства Font можно разнообразить вид надписи. С меткой может быть связан оконный управляющий элемент, который выбирается при нажатии Alt+Буква, где Буква - выделенная подчеркиванием буква в тексте метки (такие символы в терминологии Windows называются акселераторами). Визуальные компоненты TLabel (закладка Standart на Палитре компонентов) и TStaticText (закладка Additional) являются примерами меток. Класс TLabel является потомком класса TControl и обладает всеми свойствами этого класса. В отличие от TLabel класс TStaticText в качестве предка имеет класс TWinControl. Приведем характерные свойства метки, которые совпадают для обоих классов.
Таблица 12 свойства TLabel и TStaticText
Transparent | Логическое свойство, определяющее прозрачность фона метки. Если False, фон закрашивается собственным цветом Color, в противном случае используется фон родительского компонента |
Wordwrap | Логическое свойство, разрешающее (запрещающее) разрыв строки на границе слова. |
FocusControl | Содержит имя оконного компонента, который связан с меткой-акселератором |
ShowAccelChar | Если содержит True, то символ & в тексте метки предшествует символу-акселератору |
Layout | Определяет выравнивание текста по вертикали относительно границ метки: tlTop – текст располагается вверху; tlCenter – текст центрируется по вертикали; tlBottom – текст располагается внизу |
Для TStaticText определено свойство BorderStyle, которое определяет тип границ компонента: sbsNone– нет границы, sbsSingle – границы толщиной в один пиксел, sbsSunken – дает эффект вдавленности компонента.
5.2 Кнопки
Кнопки широко используются в Windows для управления приложениями. Управлять кнопками можно с помощью щелчка мыши, с клавиатуры или программно. Визуально и функционально компонент кнопка напоминает кнопку клавиатуры. В Delphi имеется несколько разновидностей кнопок: обычные кнопки, кнопки с изображением, быстрые кнопки, т. е. классы TButton (закладка Standart), TBitBtn (закладка Addittional), TSpeedButton (закладка Additional). Все они являются потомками класса TWinControl. Рассмотрим специфические свойства визуального компонента TButton.
Таблица 13 специфические свойства TButton
Cancel | Если имеет значение True, событие OnClick кнопки возникает при нажатии клавиши Esc |
Default | Если имеет значение True, событие OnClick кнопки возникает при нажатии клавиши Enter |
ModalResult | Определяет результат, с которым было закрыто модальное окно |
В терминологии Windows модальными окнами называются такие специальные окна, которые, появившись на экране, блокируют работу пользователя с другими окнами вплоть до своего закрытия. Обычно с их помощью реализуется диалог, требующий от пользователя принятия некоторого решения. Для этого в состав модального окна включается несколько кнопок. Если у кнопки определено свойство ModalResult, нажатие на нее приводит к закрытию модального окна и возвращает в программу значение ModalResult как результат диалога с пользователем. В Delphi определены следующие стандартные значения ModalResult: mrNone – модальное окно не закрывается, mrIgnore – нажата кнопка Ignore, mrOk – нажата кнопка Oк, mrYes – нажата кнопка Yes, mrCancel – нажата кнопка Cancel, mrNo – нажата кнопка No, mrAbort – нажата кнопка Abort, mrAll – нажата кнопка All, mrRetry – нажата кнопка Retry. В отличие от большинства других видимых компонентов кнопка TButton является компонентом операционной системы Windows и поэтому не может изменять свой цвет произвольным образом – изменение цвета кнопки происходит вместе с изменением палитры Windows. Кнопка всегда имеет системный цвет clBtnFace и не имеет свойства Color. Шрифт надписи на кнопке может менять свой стиль и размер, но компонент игнорирует изменение цвета надписи.
В качестве примера использования кнопки приведем обработчик события OnClick, где в метку отображается количество нажатий на кнопку
procedure TForm1.Button1Click(Sender: TObject);
Var i:Integer;
Begin
i:= StrToInt (Label2.Caption);
Label1.Caption:= IntToStr (i+1);
end;
Пиктографическая кнопка TBitBtn представляет собой популярную разновидность стандартной кнопки TButton. Ее отличительная особенность – свойство Glyph, с помощью которого определяется растровое изображение, рисуемое на поверхности кнопки. Свойство Kind определяет одну из 11 стандартных разновидностей кнопки, показанных на рисунке. Нажатие любой из них, кроме bkCustom и bkHelp, закрывает модальное окно и возвращает в программу результат mrxxx: bkOk – mrОk, bkCancel – mrCancel и т. д. Кнопка bkClose для модального окна возвращает mrCancel, а для главного окна программы - закрывает его и завершает работу программы. Кнопка bkHelp автоматически вызывает раздел справочной службы, связанный с HelpContext формы, на которую она помещена. Если у кнопки была изменена пиктограмма Glyph, Delphi автоматически установит свойство Kind равным bkCustom. Это произойдет также в случае, когда кнопка указана как умалчиваемая (Default=True), но Kind не содержит bkОk или bkYes, а также если ее свойство Cancel содержит True, a Kind нe содержит bkCancel или bkNo.
Свойства Cancel, Default и ModalResult кнопка TBitBtn унаследовала у своего родительского класса TButton. С помощью свойства Default кнопку можно сделать умалчиваемой – в этом случае нажатие Enter автоматически вызывает обработчик ее события OnClick. Однако умалчиваемыми можно сделать только кнопки bkYes и bkNo, остальные значения свойства Kind будут заменяться на bkСustom при размещении в Default значения True и наоборот – в Default автоматически помещается False при установке в Kind любого значения, кроме bkYes, bkNo или bkСustom. Специфичные свойства кнопки с изображением указаны ниже:
Таблица 14 Специфичные свойства TBitBtn
Glyph | Определяет от 1 до 4 связанных с кнопкой растровых изображения |
Kind | Определяет разновидность кнопки |
Layout | Определяет край кнопки, к которому прижимается пиктограмма: blGlyphLeft – к левому; blGlyphRight – к правому; blGlyphTop – к верхнему; blGlyphBottom – к нижнему) |
Цвет поверхности кнопки с изображением не может изменяться программно, но в отличие от TButton можно менять цвет надписи на кнопке.
Кнопки TSpeedButton отличаются от TBitBtn тремя обстоятельствами: во-первых, они могут фиксироваться в утопленном состоянии, во-вторых, они не могут закрыть модальное окно и в третьих, они не могут быть умалчиваемыми. Во всем остальном они повторяют свойства и методы TBitBtn. Для фиксации кнопка должна быть отнесена к какой-либо группе кнопок (эта группа может состоять из нее одной – вариант одиночной фиксируемой кнопки). Для этого используется свойство GroupIndex целого типа, которое не должно быть равно 0. Поведение кнопки определяется логическим свойством AllowAllup: если это свойство имеет значение True, утопленная кнопка отпускается только при нажатии любой другой кнопки, входящей в ту же группу; если AllowAllup равно False, то кнопку можно освободить повторным щелчком. Индикатором состояния кнопки служит логическое свойство Down, которое имеет значение True, если кнопка утоплена. Свойство доступно для записи, что позволяет изменять состояние кнопки программно. Для кнопки TSpeedButton предусмотрено событие onDbkClick, которое возникает при двойном щелчке на утопленной кнопке.
5.3 Редактируемые компоненты
Часто бывает необходимо не только показать статический (неизменяемый) текст на форме, но и редактировать (вводить с клавиатуры) нужную информацию. Для этой цели разработан ряд редактируемых визуальных компонентов. Примерами редактируемых компонентов являются TEdit (закладка Standart), TMemo (закладка Standart), TMaskEdit (закладка Additional). Все эти компоненты имеют общего предка – класс TWinControl. Компонент класса TEdit представляет собой однострочный редактор текста. С его помощью можно вводить и/или отображать отдельную текстовую строку. Компоненты класса TMemo используются для ввода, редактирования и/или отображения достаточно длинного текста, который может располагаться на нескольких строках. Следующие свойства являются общими для всех редактируемых компонентов.
Таблица 15 Свойства редактируемых компонентов
Text | Содержит редактируемую строку (для TEdit) или редактируемый текст в виде одной строки (для TMemo) |
ReadOnly | Логическое свойство, разрешающее или запрещающее редактирование текста в компоненте |
MaxLength | Определяет максимально допустимую длины текста в символах. Если имеет значение 0, длина строки не ограничена. |
HideSelection | Если содержит False, выделение текста сохраняется при потере компонентом фокуса ввода |
Для однострочного редактора существует ряд специфичных свойств и методов. Приведем некоторые из них.
Таблица 16 Свойства однострочного редактора
AutoSelect: | Указывает, будет ли выделяться весь текст в момент получения компонентом фокуса ввода |
CharCase | Определяет автоматическое преобразование высоты букв: ecNormal – нет преобразования; ecUpperCase –- все буквы заглавные; ecLowerCase – все буквы строчные. Правильно работает с кириллицей |
PasswordChar | Если символ PasswordChar определен, он заменяет собой любой символ текста при отображении в окне. Используется для ввода паролей |
SelLength | Содержит длину выделенной части текста |
SelStart | Содержит номер первого символа выделенной части текста |
SelText | Содержит выделенную часть текста |
Для работы с однострочным редактором можно использовать методы компонента.
Таблица 17 Методы однострочного редактора
Сlears | Удаляет весь текст |
ClearSelection | Удаляет выделенный текст |
SelectAll | Выделяет весь текст |
Undo | Восстанавливает текст в том виде, в каком он был перед последним получением компонентом фокуса ввода |
В компоненте TMemo текст хранится в свойстве Lines класса TStrings и, таким образом, представляет собой пронумерованный набор строк (нумерация начинается с нуля). С помощью свойств и методов класса TStrings (Count, Add, Delete, Clear и т. д.) можно динамически формировать содержимое компонента. Для загрузки в компонент текста из файла и для сохранения текста в файле удобно использовать методы LoadFromFile и SaveToFile класса TStrings. Например, следующий обработчик события OnCreatе формы Form1 загружает в Memo1 текст проектного файла программы:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


