Вторник, 17.09.2019, 19:46
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

 Вправи.

Вправа 6. Малюнок із ліній.
Завдання. У середовищі програмування Lazarus розробіть проект Лінії, у якому на формі малюватимуться лінії за допомогою протягування мишею:

  • початок лінії буде розташовано в позиції, в якій натиснули кнопку миші,
  • а кінець – де відпустили кнопку миші.

1.    Сплануйте проект. Передбачте, які події будуть відбуватись на екранній формі та якими засобами мови програмування Lazarus їх можна реалізувати.
2.    Відкрийте середовище Lazarus, створіть новий проект і збережіть його складові в папку Лінії. Змініть властивість Caption об'єкта Forml на Лінії.
3.    Створіть процедуру опрацювання події "клацнули кнопкою миші". Для цього оберіть у таблиці вікна інспектора об'єктів вкладку Події, двічі клацніть у клітинці праворуч від OnMouseDown. У вікні редактора коду запишіть програмний код для оголошення змінної логічного типу DownM, яка передаватиме стан натиснення миші в кожну процедуру опрацювання події. Зверніть увагу, що ми записуємо її у програмний код до опису процедури опрацювання події!
4.    У програмний код запишіть процедуру опрацювання подій для форми:

  •  OnMouseDown – натиснута кнопка миші,
  • OnMouseUp – відпущена кнопка миші,
  • OnMouseMove – переміщення миші.


 Программный код
var
  Form1: TForm1;
 
DownM:Boolean;  //для передачи состояния нажатия мыши в каждую процедуру обработки события .

implementation
{$R *.lfm}
{ TForm1 }

 

 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 begin
    DownM := True;  
//кнопка мыши нажата
    Canvas.MoveTo(x,y); // установка пера в точку с координатами х, y., начало  рисования линии
 end;

 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
 begin
  if   DownM = True then    Canvas.LineTo(x,y);  
// условие построения линии к  точке с координатами х,y. с помощью 
 протягиваниия мышки
 end;

 procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 begin
      DownM := False;  
//кнопка мыши не нажата, конец рисования
 end;    
     
 

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;
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;

procedureTForm1.FormResizeze(Sender: TObject);
begin
  Refresh ();
ee end;

Додайте кнопку очищення форми 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;

практична робота

Форма входа
Поиск
Календарь
«  Сентябрь 2019  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2019
    Конструктор сайтов - uCoz