c++ builder 用鼠标画直线、椭圆、矩形

本文介绍了一个使用VCL库进行绘图的应用实例,通过不同的按钮设置,可以绘制直线、矩形和椭圆等基本图形,并支持多种画笔样式及颜色选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//在窗体上绘制直线椭圆、矩形。

//1.思路:用鼠标按下和松开确定要花图像的开始和结束位置,并设定好Pen和Brush的各种属性。

//2.界面

 //3.代码:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MouseDrawImage.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int sort;//绘制图像的类别
int ox,oy;//鼠标按下去时的坐标位置
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    sort=0;//不绘制图形
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
  if (ColorDialog1->Execute())
  {
    TColor pencolor;
    Canvas->Pen->Color=ColorDialog1->Color;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
  Canvas->Pen->Style=psSolid;//设定画笔为实线
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
  Canvas->Pen->Style=psDash;//设定画笔为破折线
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
  Canvas->Pen->Style=psDot;//设定画笔为点线
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton4Click(TObject *Sender)
{
  Canvas->Pen->Style=psDashDot;//设定画笔为点线+破折线
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
  Canvas->Pen->Width=StrToInt(Edit1->Text);//设定线宽
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
  if (ColorDialog1->Execute())
  {
    Canvas->Brush->Color=ColorDialog1->Color;//设定画刷的颜色
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton5Click(TObject *Sender)
{
  Canvas->Brush->Style=bsSolid;//设定画刷为实心
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton6Click(TObject *Sender)
{
  Canvas->Brush->Style=bsClear;//设定画刷为透明
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton7Click(TObject *Sender)
{
  Canvas->Brush->Style=bsHorizontal;//设定画刷为水平填充
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton8Click(TObject *Sender)
{
   Canvas->Brush->Style=bsVertical;//设定画刷为垂直填充
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    sort=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    sort=1;
}
//--------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    sort=3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
   sort=2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  Canvas->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  ox=X;
  oy=Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  switch(sort)
  {
      case 1:
        Canvas->MoveTo(ox,oy);
        Canvas->LineTo(X,Y);

        break;
      case 2:
        Canvas->Rectangle(ox,oy,X,Y);
        break;
      case 3:
        Canvas->Ellipse(ox,oy,X,Y);
        break;

  }
}
//---------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值