- Добавьте на форму MainForm еще одну панель инструментов ToolBar. На нее мы и поместим компоненты для выбора свойств пера и кисти.
- Поместите на форму компонент ImageList. Его свойства Height и Width задают размеры содержащихся в нем изображений. Измените свойство Width на 36. Добавьте в ImageList2 изображения из папки Pen.
- На только что созданную панель инструментов поместите компонент ComboBoxEx с палитры компонентов Win32.
Примечание: Расширенный комбинированный список ComboDoxEx отличается от простого выпадающего списка ComboBox возможностью добавлять картинки к его элементам.
Этот компонент будем использовать для выбора стиля рисуемой линии.
- В свойстве Style выберите csExDropDownList, теперь редактор будет работать только в режиме отображения выбора и его нельзя использовать для ввода новой строки (при других значениях стиля это возможно). В свойстве Images выберите ImageList2.
- Выделите свойство ItemsEx, которое задает набор элементов списка. Двойным щелчком мыши в поле этого свойства или нажатием кнопки с многоточием откройте редактор элементов списка.
Рис. 5. Редактор списка ComboDoxEx.
- Кнопка Add New позволяет добавить в список новые элементы, которые обладают уже известными вам свойствами Caption и ImageIndex. Создайте 6 пунктов со следующими свойствами:
Caption | ImageIndex |
Сплошная | |
Невидимая | |
Тире | |
Точка | |
Тире-точка | |
Тире-точка-точка |
Эти элементы представляют собой набор значений, которые может принимать стиль рисуемой линии. Закройте редактор ComboBoxEx.
- В свойстве Hint компонента ComboBoxEx1 задайте «Стиль линии|Выбор стиля линии», свойство ShowHint измените на True.
- Двойным щелчком мыши по компоненту ComboBoxEx1 откройте обработчик события OnChange этого компонента и в позиции курсора добавьте код
with Image1.Canvas.Pen do
case ComboBoxEx1.ItemIndex of
0:Style:=psSolid;
1:Style:=psClear;
2:Style:=psDash;
3:Style:=psDot;
4:Style:=psDashDot;
5:Style:=psDashDotDot;
end;
Эта процедура в зависимости от выбранного элемента списка меняет стиль рисуемой линии.
- Теперь добавьте на панель инструментов ToolBar3 компонент SpinEdit со страницы Samples. Этот компонент предназначен для ввода и отображения числа. Он представляет собой комбинацию однострочного редактора CustomEdit и кнопок SpinButton. Редактор способен вводить только целые числа, а кнопки используются для изменения числа на некоторую фиксированную величину. Мы будем использовать его для изменения толщины рисуемой линии.
- Измените ширину SpinEdit1 на 40, минимальное значение (MinValue) на 1, а максимальное (MaxValue) – на 20.
- В свойстве Hint наберите «Толщина линии|Изменение толщины линии», свойство ShowHint измените на True.
- Создайте для него процедуру
procedure TMainForm.SpinEdit1Change(Sender: TObject);
begin
Image1.Canvas.Pen.Width:= SpinEdit1.Value;
end;
- Создайте на панели инструментов ToolBar3 разделитель (команда New Separator из контекстного меню).
- Поместите на форму компонент ImageList и добавьте в него изображения из папки Brush.
- На панель инструментов ToolBar3 поместите еще один список ComboBoxEx. Этот компонент мы будем использовать для изменения стиля заливки.
- В свойстве Style выберите csExDropDownList. А в свойстве Images выберите ImageList3.
- С помощью свойства ItemsEx задайте следующие элементы списка
Caption | ImageIndex |
Сплошная | |
Отсутствует | |
Горизонтальная | |
Вертикальная | |
Диагональ вверх | |
Диагональ вниз | |
Прямая решетка | |
Косая решетка |
- В свойстве Hint наберите «Стиль заливки|Выбор стиля заливки», свойство ShowHint измените на True.
- Создайте для него процедуру
procedure TMainForm.ComboBoxEx2Change(Sender: TObject);
begin
with Image1.Canvas.Brush do
case ComboBoxEx2.ItemIndex of
0:Style:=bsSolid;
1:Style:=bsClear;
2:Style:=bsHorizontal;
3:Style:=bsVertical;
4:Style:=bsFDiagonal;
5:Style:=bsBdiagonal;
6:Style:=bsCross;
7:Style:=bsDiagCross;
end;
end;
- Для того чтобы при запуске программы в списках стилей были выбраны первые элементы, в созданную нами процедуру Start добавьте код:
ComboBoxEx1.ItemIndex:=0;
ComboBoxEx2.ItemIndex:=0;
SpinEdit1.Text:='1';
Свойства шрифта
Поскольку наш графический редактор может выводить текст, то он должен иметь возможность изменять свойства шрифта.
- На форму MainForm добавьте еще одну панель инструментов ToolBar.
- Для этой панели свойства AutoSize и Flat измените на True.
- Поместите на нее комбинированный список ComboBox. Он будет использоваться для выбора имени шрифта.
- Создайте для него процедуру
procedure TMainForm.FontNameChange(Sender: TObject);
begin
Image1.Canvas.Font.Name:= ComboBox1.Items[ComboBox1.ItemIndex];
end;
Эта процедура изменяет название шрифта холста на элемент, выделенный в списке ComboBox1.
- Для того чтобы заполнить содержимое списка названиями шрифтов, в событие OnCreate формы добавьте строку
ComboBox1.Items:=Screen.Fonts;
- А в процедуру Start добавьте код
ComboBox1.Text:= Image1.Canvas.Font.Name;
- На панели инструментов ToolBar4 создайте разделитель (New Separator) и добавьте еще один компонент ComboBox, который будет использоваться для изменения размера шрифта. Установите его ширину равной 48.
- Дважды щелкните на свойстве Items и в открывшемся окне редактора введите строки 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72.
- Создайте процедуру
procedure TMainForm.ComboBox2Change(Sender: TObject);
begin
Image1.Canvas.Font.Size:= StrToInt(ComboBox2.Text);
end;
- В процедуру Start добавьте код
ComboBox2.Text:= IntToStr(Image1.Canvas.Font.Size);
- Для работы функций StrToInt и IntToSt, в разделе uses подключите модуль SysUtils.
- На панели инструментов ToolBar4 создайте разделитель и три кнопки (New Button).
- В свойстве Images выберите ImageList1, а затем задайте для кнопок рисунки, означающие жирный, курсивный и подчеркнутый текст. Измените их имена (Name) на btBold, btItalic и btUnderlined соответственно.
- Выделите эти три кнопки и в свойстве Style установите значение tbsCheck.
- Кнопка btBold задает жирный стиль шрифта.
procedure TMainForm.btBoldClick(Sender: TObject);
begin
with Image1.Canvas.Font do
if btBold.Down then Style:= Style + [fsBold]
else Style:= Style - [fsBold];
end;
- Кнопки btItalic и btUnderlined задают курсивный и подчеркнутый стиль текста соответственно.
procedure TMainForm.btItalicClick(Sender: TObject);
begin
with Image1.Canvas.Font do
if btItalic.Down then Style:= Style + [fsItalic]
else Style:= Style - [fsItalic];
end;
procedure TMainForm.btUnderlinedClick(Sender: TObject);
begin
with Image1.Canvas.Font do
if btUnderlined.Down then Style:= Style + [fsUnderline]
else Style:= Style - [fsUnderline];
end;