Initial commit
This commit is contained in:
@@ -0,0 +1,262 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "GlobalUnit.h"
|
||||
#include "SkinListBoxUnit.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TSkinListBox::TSkinListBox(System::Classes::TComponent* AOwner)
|
||||
: Vcl::Stdctrls::TListBox(AOwner)
|
||||
{
|
||||
m_pSBVert = new TSkinScrollBar(this);
|
||||
m_pSBVert->Parent = (TWinControl*)AOwner;
|
||||
m_pSBVert->m_pWndCtrl = this;
|
||||
m_pSBVert->Enabled = true;
|
||||
|
||||
m_bSBAction = false;
|
||||
Style = lbOwnerDrawVariable;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TSkinListBox::~TSkinListBox()
|
||||
{
|
||||
// if(m_pSBVert){
|
||||
// delete m_pSBVert;
|
||||
// m_pSBVert = NULL;
|
||||
// }
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::CreateHandle(void)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::CreateHandle();
|
||||
|
||||
if( m_pSBVert )
|
||||
m_pSBVert->BringToFront();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TSkinListBox::CreateParams(Vcl::Controls::TCreateParams &Params)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::CreateParams( Params );
|
||||
|
||||
Params.Style = Params.Style & ~WS_BORDER;
|
||||
Params.ExStyle = Params.ExStyle & ~WS_EX_CLIENTEDGE;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::SetParent(TWinControl* AParent)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::SetParent( AParent );
|
||||
|
||||
if( m_pSBVert )
|
||||
m_pSBVert->Parent = AParent;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::WMEraseBkgnd(TWMEraseBkgnd &Message)
|
||||
{
|
||||
// DefaultHandler( &Message );
|
||||
|
||||
if( m_pSBVert && !m_pSBVert->m_bAction ){
|
||||
TScrollInfo si;
|
||||
si.cbSize = sizeof(si);
|
||||
si.fMask = SIF_ALL;
|
||||
GetScrollInfo( Handle, SB_VERT, &si );
|
||||
int nSSBMax, nSSBMin, nSSBPos, nSSBPage;
|
||||
m_pSBVert->GetScrollRange( &nSSBMin, &nSSBMax );
|
||||
nSSBPage = m_pSBVert->GetPageSize();
|
||||
nSSBPos = m_pSBVert->GetScrollPos();
|
||||
if( //m_pSBVert->Visible &&
|
||||
( si.nMax!=nSSBMax || si.nMin!=nSSBMin ||
|
||||
si.nPage!=nSSBPage || si.nPos!=nSSBPos ) ){
|
||||
SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, true );
|
||||
m_pSBVert->Enabled = (si.nMax>=si.nPage);
|
||||
}
|
||||
}
|
||||
|
||||
Message.Result = true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TSkinListBox::VisibleChanging(void)
|
||||
{
|
||||
if( !m_pSBVert )
|
||||
return;
|
||||
|
||||
DWORD dwStyle = GetWindowLong(Handle, GWL_STYLE);
|
||||
if( dwStyle & WS_VSCROLL ){
|
||||
if( !Visible && !m_pSBVert->Visible ){
|
||||
m_pSBVert->Top = Top;
|
||||
m_pSBVert->Visible = true;
|
||||
}
|
||||
else if( Visible && m_pSBVert->Visible ){
|
||||
m_pSBVert->Visible = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TSkinListBox::WMNCCalcSize(TWMNCCalcSize &Message)
|
||||
{
|
||||
DefaultHandler( &Message );
|
||||
|
||||
if( m_pSBVert && Message.CalcSize_Params ){
|
||||
DWORD dwStyle = GetWindowLong(Handle, GWL_STYLE);
|
||||
if( dwStyle & WS_VSCROLL ){
|
||||
DWORD dwSBWidth = GetSystemMetrics(SM_CXVSCROLL);
|
||||
if( m_pSBVert->Width < dwSBWidth )
|
||||
m_pSBVert->Width = dwSBWidth;
|
||||
|
||||
TRect newRect = Message.CalcSize_Params->rgrc[0];
|
||||
m_pSBVert->Left = newRect.Left + newRect.Width() - m_pSBVert->Width + dwSBWidth;
|
||||
m_pSBVert->Top = newRect.Top;
|
||||
m_pSBVert->Height = newRect.Height();
|
||||
|
||||
if( Visible && !m_pSBVert->Visible ){
|
||||
m_pSBVert->Visible = true;
|
||||
|
||||
// TScrollInfo si;
|
||||
// si.cbSize = sizeof(si);
|
||||
// si.fMask = SIF_ALL;
|
||||
// GetScrollInfo( Handle, SB_VERT, &si );
|
||||
// int nSSBMax, nSSBMin, nSSBPos, nSSBPage;
|
||||
// m_pSBVert->GetScrollRange( &nSSBMin, &nSSBMax );
|
||||
// nSSBPage = m_pSBVert->GetPageSize();
|
||||
// nSSBPos = m_pSBVert->GetScrollPos();
|
||||
// if( si.nMax!=nSSBMax || si.nMin!=nSSBMin || si.nPage!=nSSBPage || si.nPos!=nSSBPos ){
|
||||
// SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, true );
|
||||
// m_pSBVert->Enabled = (si.nMax>=si.nPage);
|
||||
// }
|
||||
}
|
||||
}
|
||||
else{
|
||||
if( m_pSBVert->Visible ){
|
||||
m_pSBVert->Visible = false;
|
||||
m_pSBVert->SetPosition( 0, false );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TSkinListBox::WMVScroll(TWMVScroll &Message)
|
||||
{
|
||||
DefaultHandler( &Message );
|
||||
/*
|
||||
bool bSetScrollInfo;
|
||||
TScrollInfo si;
|
||||
|
||||
if( Message.ScrollBar!=m_pSBVert->Handle ){
|
||||
bSetScrollInfo = true;
|
||||
}
|
||||
else{
|
||||
Message.ScrollBar = 0;
|
||||
bSetScrollInfo = false;
|
||||
}
|
||||
|
||||
if( bSetScrollInfo ){
|
||||
si.cbSize = sizeof(si);
|
||||
si.fMask = SIF_TRACKPOS | SIF_POS;
|
||||
GetScrollInfo( Handle, SB_VERT, &si );
|
||||
// SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, TRUE );
|
||||
}
|
||||
//
|
||||
*/
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TSkinListBox::WMMouseWheel(TWMMouseWheel &Message)
|
||||
{
|
||||
DefaultHandler( &Message );
|
||||
/*
|
||||
TScrollInfo si;
|
||||
si.cbSize = sizeof(si);
|
||||
si.fMask = SIF_POS;
|
||||
GetScrollInfo( Handle, SB_VERT, &si );
|
||||
// SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, TRUE );
|
||||
*/
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::AddItem(System::UnicodeString Item, System::TObject* AObject)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::AddItem( Item, AObject );
|
||||
/*
|
||||
TScrollInfo si;
|
||||
si.cbSize = sizeof(si);
|
||||
si.fMask = SIF_ALL;
|
||||
GetScrollInfo( Handle, SB_VERT, &si );
|
||||
// SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, TRUE );
|
||||
*/
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::DeleteSelected(void)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::DeleteSelected();
|
||||
/*
|
||||
TScrollInfo si;
|
||||
si.cbSize = sizeof(si);
|
||||
si.fMask = SIF_ALL;
|
||||
GetScrollInfo( Handle, SB_VERT, &si );
|
||||
// SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, TRUE );
|
||||
*/
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::KeyDown(System::Word &Key, System::Classes::TShiftState Shift)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::KeyDown( Key, Shift );
|
||||
/* LockWindowUpdate( Handle );
|
||||
switch( Key ){
|
||||
case 33:
|
||||
case 34:
|
||||
case 35:
|
||||
case 36:
|
||||
case 38:
|
||||
case 40:
|
||||
{
|
||||
TScrollInfo si;
|
||||
si.cbSize = sizeof(si);
|
||||
si.fMask = SIF_POS;
|
||||
GetScrollInfo( Handle, SB_VERT, &si );
|
||||
// SetScrollInfo( m_pSBVert->Handle, SB_CTL, &si, TRUE );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
LockWindowUpdate( NULL );
|
||||
*/
|
||||
Invalidate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::DrawItem(int Index, const System::Types::TRect &Rect, Winapi::Windows::TOwnerDrawState State)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::DrawItem(Index, Rect, State);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TSkinListBox::MeasureItem(int Index, int &Height)
|
||||
{
|
||||
Vcl::Stdctrls::TListBox::MeasureItem(Index, Height);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool __fastcall TSkinListBox::IsSBLButtonDown(int X, int Y)
|
||||
{
|
||||
TPoint point(X,Y);
|
||||
point = m_pSBVert->ScreenToClient(point);
|
||||
|
||||
return point.X>=0 && point.X<m_pSBVert->Width
|
||||
&& point.Y>=0 && point.Y<m_pSBVert->Height;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user