Initial commit
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ComboBoxComponent.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
|
||||
#include "DropListScrollBar.cpp"
|
||||
#include "DropListView.cpp"
|
||||
#include "CapButton.cpp"
|
||||
|
||||
static inline void ValidCtrCheck(TComboBoxComponent *)
|
||||
{
|
||||
new TComboBoxComponent(NULL);
|
||||
}
|
||||
|
||||
namespace Comboboxcomponent
|
||||
{
|
||||
void __fastcall PACKAGE Register()
|
||||
{
|
||||
TComponentClass classes[1] = {__classid(TComboBoxComponent)};
|
||||
RegisterComponents(L"Samples", classes, 0);
|
||||
}
|
||||
}
|
||||
|
||||
#define MIN(x, y) ((x)<(y)?(x):(y))
|
||||
|
||||
|
||||
__fastcall TComboBoxComponent::TComboBoxComponent(TComponent *Owner)
|
||||
: CBCapButton(Owner)
|
||||
{
|
||||
m_ClickStat = 0;
|
||||
|
||||
m_IsMouseOver = false;
|
||||
|
||||
ItemHeight = 20;
|
||||
ShowItemCount = 5;
|
||||
|
||||
FShowMode = TComboBoxMode(cbShowDown);
|
||||
|
||||
// 初始化下拉列表框
|
||||
m_DropListView = new TDropListView(this);
|
||||
m_DropListView->Parent = (TWinControl *)Owner;
|
||||
m_DropListView->SetDesignVisible(false);
|
||||
m_DropListView->Visible = false;
|
||||
|
||||
m_DropListView->OnHide = DoDropListHide;
|
||||
m_DropListView->OnShow = DoDropListShow;
|
||||
|
||||
OnMouseEnter = DoMouseEnter;
|
||||
OnMouseLeave = DoMouseLeave;
|
||||
}
|
||||
|
||||
__fastcall TComboBoxComponent::~TComboBoxComponent()
|
||||
{
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetParent(TWinControl* AParent)
|
||||
{
|
||||
m_DropListView->Parent = AParent;
|
||||
CBCapButton::Parent = AParent;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetFontSize( int value )
|
||||
{
|
||||
m_DropListView->SetFontSize(value);
|
||||
CBCapButton::SetFontSize(value);
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetFont( String name, int size )
|
||||
{
|
||||
CBCapButton::SetFont(name, size);
|
||||
m_DropListView->SetFont(name, size);
|
||||
}
|
||||
|
||||
TComboBoxItem * __fastcall TComboBoxComponent::AddItem(String Caption)
|
||||
{
|
||||
TComboBoxItem * pNewItem = new TComboBoxItem(Caption, DoItemClick);
|
||||
m_DropListView->AddItem(pNewItem);
|
||||
|
||||
return pNewItem;
|
||||
}
|
||||
|
||||
TComboBoxItem * __fastcall TComboBoxComponent::GetItem(int Index)
|
||||
{
|
||||
return m_DropListView->GetItem( Index );
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::Clear()
|
||||
{
|
||||
if(m_DropListView->ItemsCount != 0)
|
||||
{
|
||||
m_DropListView->Clear();
|
||||
}
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::DoDropListShow(TObject *Sender)
|
||||
{
|
||||
Down = true;
|
||||
m_ClickStat = 1;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::DoDropListHide(TObject *Sender)
|
||||
{
|
||||
Down = false;
|
||||
|
||||
if(!m_IsMouseOver)
|
||||
{
|
||||
m_ClickStat = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ClickStat = 3;
|
||||
}
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::DoItemClick(TComboBoxItem* Sender, int Index)
|
||||
{
|
||||
Caption = Sender->Caption;
|
||||
if(FOnChange) FOnChange(Sender, Index);
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::DoMouseEnter(TObject *Sender)
|
||||
{
|
||||
m_IsMouseOver = true;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::DoMouseLeave(TObject *Sender)
|
||||
{
|
||||
m_IsMouseOver = false;
|
||||
}
|
||||
/*
|
||||
void __fastcall TComboBoxComponent::CMMouseEnter(TMessage &Message)
|
||||
{
|
||||
m_IsMouseOver = true;
|
||||
//TGraphicControl::Dispatch(&Message);
|
||||
CBCapButton::DefaultHandler(&Message);
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::CMMouseLeave(TMessage &Message)
|
||||
{
|
||||
m_IsMouseOver = false;
|
||||
//TGraphicControl::Dispatch(&Message);
|
||||
}
|
||||
*/
|
||||
void __fastcall TComboBoxComponent::MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TGraphicControl::MouseDown(Button, Shift, X, Y);
|
||||
|
||||
if(Button != 0) return;
|
||||
|
||||
if(m_ClickStat == 3) return;
|
||||
|
||||
m_DropListView->ItemHeight = FItemHeight;
|
||||
m_DropListView->Width = Width;
|
||||
|
||||
TPoint var_Client(0, Height);
|
||||
TPoint var_Screen = ClientToScreen(var_Client);
|
||||
|
||||
m_DropListView->Left = var_Screen.X;
|
||||
|
||||
m_DropListView->ShowItemsCount = FShowItemCount;
|
||||
|
||||
if(ShowMode == TComboBoxMode(cbShowUp))
|
||||
{
|
||||
// 上方显示
|
||||
m_DropListView->Top = var_Screen.Y - Height - m_DropListView->ListHeight;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 下方显示
|
||||
m_DropListView->Top = var_Screen.Y;
|
||||
}
|
||||
|
||||
m_DropListView->Show();
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y)
|
||||
{
|
||||
TGraphicControl::MouseUp(Button, Shift, X, Y);
|
||||
|
||||
if(Button != 0) return;
|
||||
|
||||
if(m_ClickStat == 3) m_ClickStat = 0;
|
||||
}
|
||||
|
||||
int __fastcall TComboBoxComponent::GetDefaultItem()
|
||||
{
|
||||
return m_DropListView->DefItemIndex;
|
||||
}
|
||||
|
||||
int __fastcall TComboBoxComponent::GetItemsCount()
|
||||
{
|
||||
return m_DropListView->ItemsCount;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::RemoveItem(int Index)
|
||||
{
|
||||
int var_Count = m_DropListView->ItemsCount;
|
||||
if(Index < var_Count && Index >= 0)
|
||||
{
|
||||
m_DropListView->RemoveItem(Index);
|
||||
}
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetDefaultItem(int Value)
|
||||
{
|
||||
int var_Count = m_DropListView->ItemsCount;
|
||||
|
||||
if(Value >= var_Count || Value < 0)
|
||||
{
|
||||
Value = -1;
|
||||
Caption = "";
|
||||
}
|
||||
else if(var_Count > 0)
|
||||
{
|
||||
TComboBoxItem *var_Item = m_DropListView->GetItem(Value);
|
||||
if(var_Item != NULL)
|
||||
{
|
||||
Caption = var_Item->Caption;
|
||||
}
|
||||
}
|
||||
|
||||
m_DropListView->DefItemIndex = Value;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetItemHeight(int Value)
|
||||
{
|
||||
FItemHeight = Value;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetShowMode(TComboBoxMode Value)
|
||||
{
|
||||
FShowMode = Value;
|
||||
}
|
||||
|
||||
void __fastcall TComboBoxComponent::SetShowItemCount(int Value)
|
||||
{
|
||||
FShowItemCount = Value;
|
||||
}
|
||||
Reference in New Issue
Block a user