📄 newshape.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "NewShape.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TNewShape *)
{
new TNewShape(NULL);
}
//---------------------------------------------------------------------------
__fastcall TNewShape::TNewShape(TComponent* Owner)
: TGraphicControl(Owner)
{
Width = 65;
Height = 65;
FBrush = new TBrush();
FBrush->OnChange = StyleChanged; //修改刷子的OnChange事件 //增加的代码,构造刷子
FPen = new TPen();
FPen->OnChange = StyleChanged;
}
//---------------------------------------------------------------------------
namespace Newshape
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TNewShape)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TNewShape::SetShape(TNewShapeType Value)
{
if (FShape != Value) // 属性值如果被修改
{
FShape = Value; // 保存新的值
Invalidate(); // 强制重新画一个新的图形
}
}
//------------------------------------------------------------------------------------------
void __fastcall TNewShape::SetBrush( TBrush* Value)
{
FBrush->Assign(Value); //用参数值代替已有的刷子模式
}
//---------------------------------------------------------------------------
void __fastcall TNewShape::SetPen( TPen* Value)
{
FPen->Assign(Value); //用参数值代替已有的画笔模式
}
//---------------------------------------------------------------------------
__fastcall TNewShape::~TNewShape()
{
delete FPen; // 删除画笔对象
delete FBrush; // 删除刷子对象
}
//---------------------------------------------------------------------------
void __fastcall TNewShape::StyleChanged( TObject* Sender)
{
Invalidate(); // 控件的重画
}
//------------------------------------------------------------------------------------------
void __fastcall TNewShape::Paint()
{
int X,Y,W,H,S;
Canvas->Pen = FPen; // 将画布的画笔指定为控件的画笔
Canvas->Brush = FBrush; // 将画布的刷子指定为控件的刷子
W=Width; // 调用控件的宽度属性值
H=Height; // 调用控件的高度属性值
X=Y=0; // 圆和正方形左上角坐标
if( W<H ) S=W; //如果宽度小于高度,那么圆角半径变量等于宽度
else
S=H; //否则圆角半径变量等于高度
switch(FShape) // 调整高度、宽度和坐标值
{
case sstRectangle: //如果画矩形、圆角矩形和椭圆
case sstRoundRect:
case sstEllipse:
Y=X=0; // 坐标原点为图形的左上角
break;
case sstSquare: //如果画正方形、圆角正方形和圆
case sstRoundSquare:
case sstCircle:
X= (W-S)/2; // 坐标原点在图形的中心
Y= (H-S)/2;
break;
default:
break;
}
switch(FShape) //检查要画的图形
{
case sstSquare:
case sstRoundSquare:
W=H=S; //使用宽度和高度中的最小值
case sstRectangle: // 如果是画矩形或正方形
Canvas->Rectangle(X,Y,X+W,Y+H); //画矩形
break;
case sstRoundRect: // 如果是画圆角矩形或圆角正方形
//画圆角矩形
Canvas->RoundRect(X,Y,X+W,Y+H,S/4,S/4);
break;
case sstCircle:
W=H=S; // 如果是画圆或椭圆
case sstEllipse:
Canvas->Ellipse(X,Y,X+W,Y+H); //椭圆包含和前面所画的矩形一样的范围内
break;
default:
break;
}
}
//------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -