⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 psbevel.cpp

📁 用于开发Atmel的AVR系列单片机的GCC集成开发环境
💻 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 + -