Вправи.
Вправа 6. Малюнок із ліній.
Завдання. У середовищі програмування Lazarus розробіть проект Лінії, у якому на формі малюватимуться лінії за допомогою протягування мишею:
- початок лінії буде розташовано в позиції, в якій натиснули кнопку миші,
- а кінець – де відпустили кнопку миші.
1. Сплануйте проект. Передбачте, які події будуть відбуватись на екранній формі та якими засобами мови програмування Lazarus їх можна реалізувати.
2. Відкрийте середовище Lazarus, створіть новий проект і збережіть його складові в папку Лінії. Змініть властивість Caption об'єкта Forml на Лінії.
3. Створіть процедуру опрацювання події "клацнули кнопкою миші". Для цього оберіть у таблиці вікна інспектора об'єктів вкладку Події, двічі клацніть у клітинці праворуч від OnMouseDown. У вікні редактора коду запишіть програмний код для оголошення змінної логічного типу DownM, яка передаватиме стан натиснення миші в кожну процедуру опрацювання події. Зверніть увагу, що ми записуємо її у програмний код до опису процедури опрацювання події!
4. У програмний код запишіть процедуру опрацювання подій для форми:
- OnMouseDown – натиснута кнопка миші,
- OnMouseUp – відпущена кнопка миші,
- OnMouseMove – переміщення миші.
implementation |
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; |
5. Запустіть проект на виконання. Спробуйте намалювати лініями своє ім'я.
6. Збережіть зміни у проекті.
Вправа 7. Малювання різнокольорових ліній, створенних випадковим чином.
У попередньому параграфі ми викликали методи малювання графічних примітивів із процедури обробника події Button1Click, тобто малювання виконувалось при клацанні кнопки.
Але при перекритті вікна форми іншими вікнами або зміні розмірів форми частина малюнку може бути втрачена. Щоб цьому запобігти, краще створювати обробник події OnPaint для форми.
Перемальовування форми
Подія OnPaint Paint генерується за необхідності перемалювати форми, наприклад у разі активізації форми, якщо до цього частина її була закрита іншими вікнами.
Для створення процедури TForm1.FormPaint потрібно:
- виділити форму,
- у вікні Інспектор об'єктів перейти на сторінку Події
- і двічі клацнути в полі навпроти події OnPaint.
Отримана процедура TForm1.FormPaint виконуватиметься під час завантаження форми і при кожній зміні розмірів або видимості форми
2. Під час зміни розмірів форми в процесі виконання програми поверхня малювання стає недійсною, і малюнок зникає. Щоб уникнути цього, в обробнику події On Resize, яка при цьому виникає, слід викликати метод Refresh (). Він очищує полотно і генерує подію OnPaint.
3. Під час зміни розмірів форми в режимі виконання бажано, щоб розміри нашого малюнка підлаштовувалися під ці зміни. Властивості форми:
- ClientWidth- визначає ширину області, на якій можна малювати.
- ClientHeight - визначає висоту області, на якій можна малювати.
Щоб малюнок масштабувався разом із формою, необхідно при виклику графічних методів указувати не абсолютні значення координат, а їх залежності від властивостей ClientWidth, ClientHeight.
Значення властивості color визначається як довге ціле longint. Змінні цього типу займають в пам'яті чотири байти і містять інформацію про частки синього (B), зеленого (G) і червоного (R) кольорів і влаштовані таким чином:
- шістнадцятирічний код - $ 00BBGGRR, наприклад: form1.Canvas.brush.Color: = $00D5FFFF;
- десятирічний код (інформація про частки синього (B), зеленого (G) і червоного (R) квітів) - RGB (R, G, B), наприклад: form1.Canvas.brush.Color:=RGBToColor(255, 255, 213).
Колір можна задати випадковим чином, наприклад: form1.Canvas.Brush.Color:=RGBToColor(random(255),random(255),random(255)).
|
procedure TForm1.FormPaintnt(Sender: TObject); var i: Integer; end; procedureTForm1.FormResizeze(Sender: TObject); |
Додайте кнопку очищення форми Button1, яка здійснюється заливкою прямокутника, колір пензля такий же, як і вихідний колір форми:
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.brush.Color:= cldefault;
canvas.FillRect(0,0,500,300);
end;
Повторення виконання малюнку:
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
begin
Randomize;//инициализация генератора случайных чисел
for i := 0 to 100 do
begin
Canvas.Pen.Color:= RGBtoColor(Random (255),Random (255), Random (255));
Canvas.LineTo(Random(ClientWidth), Random(ClientHeight));
end;
end;