Files
2026-06-13 00:05:19 +08:00

110 lines
3.1 KiB
C++

// ---------------------------------------------------------------------------
#ifndef ListPanelH
#define ListPanelH
#include <vcl.h>
#include "SkinScrollBarUnit.h"
// ---------------------------------------------------------------------------
class TListPanel;
class TListPanelItem;
/* 定义下拉列表项点击事件 */
typedef void __fastcall(__closure * TListPanelItemClick)(TListPanel *Sender, int Index);
class TListPanelItem : public TObject {
private:
int FTag;
String FCaption;
TListPanelItemClick FOnItemClick;
void __fastcall SetCaption(String Caption);
public:
__fastcall TListPanelItem(String Caption, TListPanelItemClick OnItemClick);
void __fastcall DrawItem(TCanvas *Canvas, TRect Rect, int flag);
__published:
__property String Caption = {read = FCaption, write = FCaption};
__property int Tag = {read = FTag, write = FTag};
__property TListPanelItemClick OnItemClicked = {read = FOnItemClick, write = FOnItemClick};
};
class TListPanel : public TPanel {
private:
int FItemHeight,
FSelectedItemIndex;
bool m_IsLButtonDown;
TRect m_ItemArea;
TList //*m_ItemRectList,
*m_ItemList;
TSkinScrollBar *m_ScrollBar;
int m_BeginIndex,
m_EndIndex,
m_CurrentItemIndex,
m_ShowCount,
m_RealShowCount,
m_MouseX,
m_MouseY,
m_ItemWidth;
void __fastcall DoKeyUpDown(int Index);
void __fastcall DoShowItemsChange();
void __fastcall SetItemStatus(int Index, int flag);
void __fastcall SetSelectedItemIndex(int Index);
int __fastcall GetItemsCount();
// TRect *__fastcall GetItemRect(int Index);
MESSAGE void __fastcall WMSize(Winapi::Messages::TWMSize &Message);
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
MESSAGE void __fastcall WMMouseWheel(TWMMouseWheel &Message);
MESSAGE void __fastcall CMMouseLeave(TMessage &Message);
MESSAGE void __fastcall WMVScroll(TWMScroll &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
MESSAGE_HANDLER(WM_MOUSEWHEEL, TWMMouseWheel, WMMouseWheel)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
MESSAGE_HANDLER(WM_VSCROLL, TWMScroll, WMVScroll)
END_MESSAGE_MAP(TPanel)
protected:
virtual void __fastcall CreateWnd();
virtual void __fastcall Paint();
DYNAMIC void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseMove(TShiftState Shift, int X, int Y);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);
public:
__fastcall TListPanel(TComponent *Owner);
__fastcall ~TListPanel();
void __fastcall AddItem(TListPanelItem* Item);
void __fastcall Clear();
TListPanelItem *__fastcall GetItem(int Index);
void __fastcall ScrollPos(int Pos);
int __fastcall TextWidth(String text);
void __fastcall ResetScroll();
// void __fastcall SetTextFontSize(int sz);
void __fastcall SetTextFont(String name, int size);
__published:
__property int ItemHeight = {write = FItemHeight, read = FItemHeight, default = 16};
__property int SelectedItemIndex = {read = FSelectedItemIndex, write = SetSelectedItemIndex};
__property int ItemsCount = {read = GetItemsCount};
};
#endif