Свойства карандаша в Delphi

Теперь давайте напишем пример, в котором увидим свойства карандаша в дей­ствии. Создайте новое приложение. Создайте обработчик события OnPaint и напи­шите в нем код, представленный в листинге:

 

procedure TForm1.FormPaint(Sender: TObject);

begin

//Рисуем сплошную линию (psSolid)

Canvas.Pen.Style:=psSolid;

Canvas.MoveTo(10,20);

Canvas.LineTo(200,20);

//Рисуем psDash линию

Canvas.Pen.Style:=psDash;

Canvas.MoveTo(10,40);

Canvas.LineTo(200,40);

//Рисуем psDash линию

Canvas.Pen.Style:=psDot;

Canvas.MoveTo(10,60);

Canvas.LineTo(200,60);

//Рисуем psDashDot линию

Canvas.Pen.Style:=psDashDot;

Canvas.MoveTo(10,80);

Canvas.LineTo(200,80);

//Рисуем psDashDotDot линию

Canvas.Pen.Style:=psDashDotDot;

Canvas.MoveTo(10,100) ;

Canvas.LineTo(200,100);

//Рисуем psClear линию

Canvas.Pen.Style:=psClear;

Canvas.MoveTo(10,120);

Canvas.LineTo(200,120);

//Рисуем psInsideFrame линию

Canvas.Pen.Style:=psInsideFrame;

Canvas.MoveTo(10,140);

Canvas.LineTo(200,140);

end;

 

Результат работы программы вы можете увидеть на рис.

Свойства карандаша в DelphiВ данном примере по событию onPaint (когда надо перерисовать форму) пооче­редно рисуются линии разного стиля. Для этого сначала выбирается нужный стиль (например, Canvas.Pen.Style:=psSolid выбирает стиль сплошной линии).

 

Потом перемещается карандаш в точку начала линии— canvas.MoveTo(х, y). Meтод MoveTo перемещает карандаш в позицию, указанную в качестве параметров х и у. При перемещении не происходит ника­кого рисования на холсте (canvas), х и y—это не сантиметры и не миллиметры, а количество пикселов (количество экранных точек).

 

Отсчет координаты х идет слева. Это значит, что левая сторона окна равна нуле­вой позиции х, а правая сторона окна—это максимальное значение. Но это не оз­начает, что х не может быть отрицательным или больше максимума. Вы без про­блем можете указывать любые значения, только нужно учитывать, что часть линии может уйти за пределы окна.

 

Отсчет координаты y идет сверху. Верхнее обрамление окна является нулевой точкой y. При этом заголовок окна (с названием формы и системными кнопками) не входит в пространство клиентской области окна.

 

Теперь мы должны нарисовать линию с помощью метода LineTo (х, y) . В каче­стве параметров передаются конечные координаты линии. Отрезок будет нарисо­ван, начиная от текущей позиции карандаша, куда мы перешли с помощью метода MoveTo, и до координат, указанных при вызове метода LineTo.

 

После прорисовки первой линии выбираем следующий стиль и перемещаемся в позицию на 20 пикселов ниже уже нарисованной линии. После этого рисуем сле­дующую линию.

Теперь добавим в нашу программу возможность смены цвета карандаша. Для этого установим на форму кнопку с надписью "Изменить цвет" и компонент coiorDialog с вкладки Dialogs. Компонент coiorDialog предназначен для отобра­жения стандартного диалога выбора цвета. На форме он будет выглядеть в качестве простого квадратика с пиктограммой и при запуске не будет виден.

Для события onclick кнопки напишем следующий код:

 

if ColorDialogl.Execute then

Canvas.Pen.Color:=ColorDialogl.Color;

FormPaint(nil);

 

В первой строке кода отображается окно выбора цвета (ColorDialog1. Execute). Если пользователь выбрал цвет и не нажал ОК (нажал отмену или нажал кнопку крестика в заголовке), то окно возвращает значение false. Поэтому мы проверяем, если результат показа окна равен true, то изменить цвет:

if ColorDialogl.Execute then Изменить цвет холста

Напоминаю, что по умолчанию конструкция if проверяет указанный код на ра­венство true, если не указано обратное. В связи с этим эту же конструкцию можно было бы записать так:

if ColorDialogl.Execute=true then Изменить цвет холста

Результат выбранного цвета записывается в свойство color компонента ColorDialogl. Именно его мы и присваиваем цвету карандаша canvas.Pen.color. После этого нужно только перерисовать рисунок. Для этого явно вызывается про­цедура— обработчик события OnPaint формы. У нас обработчик называется FormPaint, именно его и необходимо вызывать.

Можете запустить программу и проверить результат работы смены цветов линий.

Теперь добавим возможность выбора толщины линии. Для этого установим компонент upDown с вкладки Win32. Для события onclick этого компонента напи­шем следующий код:

 

procedure TFormi.UpDownlClick(Sender: TObject; Button: TUDBtnType);

begin

Canvas.Pen.Width:=UpDownl.Position;

Repaint;

end;

 

Компонент upDown состоит из двух кнопок. Верхняя кнопка увеличивает внут­ренний счетчик. Нижняя — уменьшает. Текущее значение счетчика можно прочи­тать в свойстве Position. Именно это значение мы и присваиваем в свойство ши­рины карандаша Canvas . Pen. Width.

 

После этого вызывается метод главной формы Repaint. Этот метод генерирует событие о том, что надо перерисовать содержимое окна. Это значит, что будет ав­томатически вызван обработчик события onPaint. Результат тот же, что и просто вызов напрямую обработчика, как это делалось после смены цвета. Но такой спо­соб считается более правильным.

СОВЕТ. Если говорить о том, какой способ более правильный, то оба они работают без проблем, просто второй способ более эстетичный и красивый, хотя и требует до­полнительных затрат на генерацию сообщения о необходимости перерисовать окно.

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: