📄 psbevel.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "PSBevel.h"
//---------------------------------------------------------------------------
__fastcall TPSBevel::TPSBevel(void)
{
FHFromColor = clWhite;
FHToColor = clSilver;
FSFromColor = (TColor)0x00444444;
FSToColor = (TColor)0x00888888;
FBevelWidth = 16;
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::SetHFromColor (TColor val)
{
FHFromColor = val;
Change ();
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::SetHToColor (TColor val)
{
FHToColor = val;
Change ();
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::SetSFromColor (TColor val)
{
FSFromColor = val;
Change ();
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::SetSToColor (TColor val)
{
FSToColor = val;
Change ();
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::SetBevelWidth (int val)
{
FBevelWidth = val;
Change ();
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::Change (void)
{
if (FOnChange) FOnChange (this);
}
//---------------------------------------------------------------------------
void __fastcall TPSBevel::DrawBevel (Graphics::TCanvas *can, TRect rect)
{
union {TColor col; BYTE dat[4];} From, To, Temp;
float r, g, b, rtemp, gtemp, btemp;
int i;
if (FBevelWidth == 0) return;
Temp.dat[3] = 0;
From.col = FHFromColor;
To.col = FHToColor;
rtemp = (float)(From.dat[2] - To.dat[2]) / FBevelWidth;
gtemp = (float)(From.dat[1] - To.dat[1]) / FBevelWidth;
btemp = (float)(From.dat[0] - To.dat[0]) / FBevelWidth;
r = From.dat[2];
g = From.dat[1];
b = From.dat[0];
for (i = 0;i < FBevelWidth;i++)
{
Temp.dat[2] = r;
Temp.dat[1] = g;
Temp.dat[0] = b;
can->Pen->Color = Temp.col;
can->MoveTo (rect.Left + i, rect.Bottom - i);
can->LineTo (rect.Left + i, rect.Top + i);
can->LineTo (rect.Right - i, rect.Top + i);
r -= rtemp;
g -= gtemp;
b -= btemp;
}
From.col = FSFromColor;
To.col = FSToColor;
rtemp = (float)(From.dat[2] - To.dat[2]) / FBevelWidth;
gtemp = (float)(From.dat[1] - To.dat[1]) / FBevelWidth;
btemp = (float)(From.dat[0] - To.dat[0]) / FBevelWidth;
r = From.dat[2];
g = From.dat[1];
b = From.dat[0];
for (i = 0;i < FBevelWidth;i++)
{
Temp.dat[2] = r;
Temp.dat[1] = g;
Temp.dat[0] = b;
can->Pen->Color = Temp.col;
can->MoveTo (rect.Left + i, rect.Bottom - i);
can->LineTo (rect.Right - i, rect.Bottom - i);
can->LineTo (rect.Right - i, rect.Top + i - 1);
r -= rtemp;
g -= gtemp;
b -= btemp;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -