Initial commit
This commit is contained in:
+240
@@ -0,0 +1,240 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "PanelDB.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TPanelDB::TPanelDB(TComponent* AOwner)
|
||||
: Vcl::Extctrls::TPanel(AOwner)
|
||||
{
|
||||
ParentColor = false;
|
||||
Ctl3D = false;
|
||||
ParentCtl3D = false;
|
||||
DoubleBuffered = true;
|
||||
|
||||
m_bBkgDrawed = false;
|
||||
m_bDBCreated = false;
|
||||
|
||||
m_BtnSel = m_BtnFocus = NULL;
|
||||
m_bLeft = false;
|
||||
|
||||
m_CanvasDr = new TCanvas();
|
||||
m_CanvasDr->Font->Name = "Tahoma";
|
||||
|
||||
m_BMPBkg = NULL;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TPanelDB::~TPanelDB()
|
||||
{
|
||||
SAFE_DELETE(m_BMPBkg)
|
||||
BtnClear();
|
||||
DCRelease();
|
||||
SAFE_DELETE( m_CanvasDr );
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::CreateWnd(void)
|
||||
{
|
||||
Vcl::Extctrls::TPanel::CreateWnd();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::CreateParams(Controls::TCreateParams &Params)
|
||||
{
|
||||
Vcl::Extctrls::TPanel::CreateParams(Params);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::WMEraseBkgnd(TWMEraseBkgnd &Message)
|
||||
{
|
||||
Message.Result = true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::WMSize(Winapi::Messages::TWMSize &Message)
|
||||
{
|
||||
DCRelease();
|
||||
DCInit();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::DCInit()
|
||||
{
|
||||
m_BufDC = CreateCompatibleDC(Canvas->Handle);
|
||||
m_BufBitmap = CreateCompatibleBitmap(Canvas->Handle, Width, Height);
|
||||
SelectObject(m_BufDC, m_BufBitmap);
|
||||
m_CanvasDr->Handle = m_BufDC;
|
||||
m_bDBCreated = true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::DCRelease()
|
||||
{
|
||||
DeleteDC(m_BufDC);
|
||||
DeleteObject(m_BufBitmap);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::Paint()
|
||||
{
|
||||
if( !m_bDBCreated || !m_CanvasDr ) DCInit();
|
||||
DoPaintBKG(m_CanvasDr);
|
||||
|
||||
if(FOnPaintBKG) FOnPaintBKG(this, m_CanvasDr, TRect(0, 0, Width, Height));
|
||||
|
||||
DoPaintLst(m_CanvasDr);
|
||||
|
||||
BitBlt(Canvas->Handle,
|
||||
0, 0, Width, Height,
|
||||
m_CanvasDr->Handle,
|
||||
0, 0, SRCCOPY);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::DoPaintBKG(TCanvas *pCanvas)
|
||||
{
|
||||
if( m_BMPBkg && Width==m_BMPBkg->Width && Height==m_BMPBkg->Height) {
|
||||
StretchBlt(pCanvas->Handle, 0, 0, Width, Height,
|
||||
m_BMPBkg->Canvas->Handle, 0, 0, Width, Height,
|
||||
SRCCOPY);
|
||||
}
|
||||
else {
|
||||
m_bBkgDrawed = false;
|
||||
}
|
||||
|
||||
if( !m_bBkgDrawed) {
|
||||
|
||||
TRect rtThis = TRect(0, 0, Width, Height);
|
||||
|
||||
if( FOnDrawBKG ) {
|
||||
FOnDrawBKG(this, pCanvas, rtThis);
|
||||
}
|
||||
else {
|
||||
pCanvas->Brush->Color = this->Color;
|
||||
pCanvas->FillRect(rtThis);
|
||||
}
|
||||
|
||||
if( !m_BMPBkg ) {
|
||||
m_BMPBkg = new TBitmap();
|
||||
}
|
||||
m_BMPBkg->SetSize(Width, Height);
|
||||
StretchBlt(m_BMPBkg->Canvas->Handle, 0, 0,Width, Height,
|
||||
pCanvas->Handle, 0, 0,Width, Height,
|
||||
SRCCOPY);
|
||||
m_bBkgDrawed = true;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::DoPaintLst(TCanvas *pCanvas)
|
||||
{
|
||||
BTNLST::iterator lst_FBTNLST;
|
||||
for( lst_FBTNLST = m_LstBtn.begin();
|
||||
lst_FBTNLST != m_LstBtn.end();
|
||||
lst_FBTNLST++ )
|
||||
{
|
||||
(*lst_FBTNLST)->Paint(pCanvas);
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TPoint pt = TPoint(X, Y);
|
||||
TStateBtn *pCur = GetBtnCur(pt);
|
||||
NULL_RETURN(pCur)
|
||||
|
||||
if( Button==mbLeft ) {
|
||||
m_bLeft = true;
|
||||
BtnDown(pCur, pt);
|
||||
}
|
||||
else if( Button==mbRight ) {
|
||||
m_bLeft = false;
|
||||
BtnDown(pCur, pt, false);
|
||||
}
|
||||
|
||||
m_BtnSel = pCur;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::MouseUp(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TPoint pt = TPoint(X, Y);
|
||||
if( Button==mbLeft ) {
|
||||
BtnUp(m_BtnFocus, m_BtnSel, pt);
|
||||
}
|
||||
else if( Button==mbRight ) {
|
||||
BtnUp(m_BtnFocus, m_BtnSel, pt, false);
|
||||
}
|
||||
|
||||
if( m_BtnFocus==m_BtnSel && m_BtnSel ) {
|
||||
if( m_bLeft && m_BtnSel->OnClick )
|
||||
m_BtnSel->OnClick(m_BtnSel);
|
||||
else if( !m_bLeft && m_BtnSel->OnClickR )
|
||||
m_BtnSel->OnClickR(m_BtnSel);
|
||||
}
|
||||
|
||||
m_BtnSel = NULL;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::MouseMove(System::Classes::TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TPoint pt = TPoint(X, Y);
|
||||
TStateBtn *pCur = GetBtnCur(pt);
|
||||
|
||||
BtnMove(pCur, pt);
|
||||
|
||||
m_BtnFocus = pCur;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::CMMouseLeave(TMessage &Message)
|
||||
{
|
||||
BtnMove(NULL, TPoint(-1, -1));
|
||||
|
||||
BtnLeave();
|
||||
|
||||
m_BtnFocus = NULL;
|
||||
m_BtnSel = NULL;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::Click(void)
|
||||
{
|
||||
if( OnClick ) OnClick(this);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::DblClick(void)
|
||||
{
|
||||
if( m_BtnFocus ) {
|
||||
if( m_bLeft && m_BtnFocus->OnDBClick )
|
||||
m_BtnFocus->OnDBClick(m_BtnFocus);
|
||||
}
|
||||
|
||||
if( OnDblClick ) OnDblClick(this);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
TStateBtn* __fastcall TPanelDB::GetBtnCur(TPoint pt)
|
||||
{
|
||||
TStateBtn *pCur = 0;
|
||||
BTNLST::iterator lst_FBTNLST;
|
||||
for( lst_FBTNLST = m_LstBtn.begin();
|
||||
lst_FBTNLST!= m_LstBtn.end();
|
||||
lst_FBTNLST++ )
|
||||
{
|
||||
pCur = (*lst_FBTNLST)->GetSubCusor( pt );
|
||||
if( pCur ) { break; }
|
||||
}
|
||||
|
||||
return pCur;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::BtnAdd(TStateBtn *pBtn)
|
||||
{
|
||||
m_LstBtn.push_back(pBtn);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TPanelDB::BtnClear()
|
||||
{
|
||||
if(m_LstBtn.size()<=0) return;
|
||||
|
||||
BTNLST::iterator lst_FBTNLST;
|
||||
for( lst_FBTNLST = m_LstBtn.begin();
|
||||
lst_FBTNLST!= m_LstBtn.end();
|
||||
lst_FBTNLST++ )
|
||||
{
|
||||
TStateBtn *pBtn = *lst_FBTNLST;
|
||||
SAFE_DELETE(pBtn)
|
||||
}
|
||||
m_LstBtn.clear();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user