AFON//Радиотехник
C++Builder · проект 31/50

Рисование на Canvas

Линия за курсором при зажатой кнопке.

Задача

Рисовать на области Canvas: вести линию за курсором мыши при зажатой кнопке.

Компоненты на форме

PaintBox, Button (ButtonClear).

Как работает

  1. На MouseDown запомнить точку.
  2. На MouseMove при нажатой кнопке тянуть линию.
  3. На MouseUp прекращать рисование.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 31. Рисование мышью на Canvas
// Линия за курсором при зажатой кнопке.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Простейший графредактор: запоминаем точку на MouseDown и тянем линию
// за курсором, пока кнопка нажата. Основа работы с Canvas и событиями мыши.
bool FDown=false; int Fx=0, Fy=0;
void __fastcall TForm1::PaintBoxMouseDown(TObject*,TMouseButton,TShiftState,int X,int Y)
{ FDown=true; Fx=X; Fy=Y; }
void __fastcall TForm1::PaintBoxMouseMove(TObject*,TShiftState,int X,int Y)
{
    if (!FDown) return;
    PaintBox1->Canvas->Pen->Color = clLime;
    PaintBox1->Canvas->MoveTo(Fx,Fy);
    PaintBox1->Canvas->LineTo(X,Y);
    Fx=X; Fy=Y;
}
void __fastcall TForm1::PaintBoxMouseUp(TObject*,TMouseButton,TShiftState,int,int){ FDown=false; }
void __fastcall TForm1::ButtonClearClick(TObject *Sender)
{
    PaintBox1->Canvas->Brush->Color=clBlack;
    PaintBox1->Canvas->FillRect(PaintBox1->ClientRect);
}
//---------------------------------------------------------------------------

Пояснения

  • Canvas->MoveTo/LineTo рисуют отрезок.
  • Состояние «кнопка нажата» хранится в переменной.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.