"justify">. Напишемо наступні обробники: для ColorGrid1:
image1.Canvas.Pen.Color: = colorgrid1.ForegroundColor;// колір контура.Canvas.Brush.Color: = colorgrid1.BackgroundColor;// колір фонадля SpiEdit1:. Canvas.Pen.Width: = spinedit1.Value ;//задаємо товщину лінії
12. Тепер забезпечимо можливість малювання у другому режимі - прямі лінії. p align="justify"> OnClick для SpeedButton1:. Tag: = (sender as tspeedbutton). Tag;
(sender as Tspeedbutton). Down: = true;
Для події OnClick SpeedButton2 виберемо зі списку SpeedButton1Click
Опишемо глобальні змінні:, MovePoint: tpoint;
А в секції Implementation (відразу після {$ R *. dfm}) опишіть наступну процедуру:
procedure drawfigure (p1, p2: tpoint; amode: TPenMode); form1.Image1.Canvas do.Mode: = Amode; (p1.X, p1.Y); (p2.X, p2 . Y);
end;;
. Створимо наступні обробники:
Image1 OnMouseUp: startpoint.X = 10000 then exit; (image1.Tag = 1) or
(image1.Tag = 2)// це умова нам стане в нагоді в майбутньому для малювання фігур
then drawfigure (startpoint, point (x, y), pmCopy);
Відредагуємо метод Image1MouseMove наступним чином:
if ssleft in shift thenimage1.Tag of
: image1.Canvas.LineTo (x, y);
: begin (startpoint, movepoint, pmNotXor);: = Point (x, y); (StartPoint, MovePoint, pmNotXor);;;
У метод Image1MouseDown додайте:
startpoint: = point (x, y);: = StartPoint;
Тепер малювання можна робити в двох режимах: в режимі В«BrushВ» малюються лінії довільної форми, а в новому режимі В«RulerВ» малюються прямі лінії.
. Ускладнимо на редактор. Додамо ще один інструмент - Малювання фігур
Додамо в GroupBox1 ще одну кнопку SpeedButton3 (Caption = Figure ).
Параметри кнопки - GroupIndex = 1, Tag = 2
Розмістимо також у лівому нижньому куті форми панель (Panel1) і помістимо на неї компонент Shape1. Встановіть значення Width і Height для Shape1 на 4 пікселя менше, ніж відповідні значення компонента Panel1. Додайте компонент Shape1 по центру панелі. p align="justify"> Компонент Shape1 дозволяє визначити, як буде виглядати намальована фігура. В інших режимах малювання даний компонент дозволяє візуально оцінити поточні колір і товщину лінії. При клацанні лівої клавіші мишки на компоненті-зразку Shape1 змінюється тип фігури (прямокутник, прямокутник із закругленими кутами, еліпс) і відбувається автоматичний перехід у режим В«FigureВ». Клацання правою клавіші по компоненту дозволяє перейти в режим малювання фігур з рівними вимірами (квадрати і т.п.). br/>В
15. Оголосимо ще дві глобальні змінні: dx, dy: integer;
В розділ uses для Unit1 необхідно додати модуль математичних функцій Math
Змініть вже описану нами процедуру DrawFigure наступним чином (додати виділені жирним рядка):
with form1.Image1.Canvas do.Mode: = Amode; form1.Image1.tag of
: begin (p1.X, p1.Y); (p2.X, p2.Y);;
: begin: = p2.X-p1.X;: = p2.Y-p1.Y; abs (dx)> abs (dy) then dx: = abs (dy) * sign (dx) else dy: = abs (dx) * sign (dy); form1.shape1.Shape of: Rectangle (p1.X, p1.Y, p2.X, p2.Y);: RoundRect (p1.X, p1.Y, p2.X, p2.Y, (p2.Y-p1.X) div 2, (p2.Y-p1.Y) div 2);: div 2, dy div 2);: Ellipse (p1.X, p1.Y, p1.X + dx, p1.Y + dy);;;;;
У методі Image1MouseMove замініть рядок 1: begin на1, 2: begin
У метод ColorGrid1Change
У метод SpinEdit1Change додайте:. Pen.Width: = spinedit1.Value;
16. Створимо обробник OnMouseDown для Shape1:
procedure TForm1.Shape1MouseDown (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer); i: integer; ssLeft in Shift then: = (ord (shape1.Shape) +2 ) mod 6 elseodd (ord (Shape1.Shape)) then: = ord (shape1.Shape)-1i: = ord (shape1.Shape) +1;. Shape: = tshapetype (i);. Down: = true; 1 . Tag: = 2;
end;
. Реалізуємо функцію скасування попередньої операції. Для цього оголосимо глобальну змінну oldbitmap: tbitmap;
Відредагуйте метод FormCreate наступним чином:
image1.Parent.DoubleBuffered: = true;: = tbitmap.Create; image1
Створимо обробник OnDestroy для Form1:
oldbitmap.Free;
Встановимо властивості KeyPreview форми значення true і напише...