/*.h*/
private:
TPanel* tPanel[50];
void __fastcall BitPanelClick(TObject *Sender);
void AddPanel();
void RefshListView();
__published:
void __fastcall Timer1Timer(TObject *Sender);
/*.CPP*/
void TFrmMain::AddPanel()
{
TListColumn *NewColumn;
NewColumn=ListView1->Columns->Add();
NewColumn->Caption=ini->ReadString(m_strLanguage,"Head1","序号");
NewColumn->Width=123;
NewColumn=ListView1->Columns->Add();
NewColumn->Caption=ini->ReadString(m_strLanguage,"Head2","Panel");
NewColumn->Width=80;
for(int i=0;i<50;i++)
{
ListItem->Caption=IntToStr(i);
TListColumn *NewColumn=ListView1->Columns->Items[2];
int nleft=Rect.Right-NewColumn->Width;
tPanel[i]=new TPanel(ListView1);
tPanel[i]->Parent=ListView1;
tPanel[i]->Left=nleft+1;
tPanel[i]->Top=ListItem->Top;
tPanel[i]->Height=22;
tPanel[i]->Width=NewColumn->Width-2;
tPanel[i]->Color=ListView1->Color;
tPanel[i]->BevelOuter=bvNone;
tPanel[i]->Tag=i;
tPanel[i]->OnClick=BitPanelClick;
tPanel[i]->Visible=true;
ListItem->Data=tPanel[i];
}
}
void TFrmMain::RefshListView()
{
int i=0;
if(ListView1->TopItem!=NULL)
{
i=ListView1->TopItem->Index;
for(int j=0;j<ListView1->TopItem->Index;j++)
{
TListItem *li=ListView1->Items->Item[j];
if(li->Data!=NULL)
tPanel[j]->Hide();
}
}
TListColumn *NewColumn=ListView1->Columns->Items[2];
for(;i<ListView1->Items->Count;i++)
{
TListItem *ListItem=ListView1->Items->Item[i];
TRect Rect;
Rect=ListItem->DisplayRect(drBounds);//获取Item显示的区域
if(ListItem->Data!=NULL)
{
int nleft=Rect.Right-NewColumn->Width;
if((tPanel[i]->Left!=nleft)||(tPanel[i]->Top!=Rect.Top)||tPanel[i]->Width!=NewColumn->Width)
{
tPanel[i]->Left=nleft+1;
tPanel[i]->Width=NewColumn->Width-2;
tPanel[i]->Top=Rect.Top;
}
tPanel[i]->Show();
}
}
}
void __fastcall TFrmMain::Timer1Timer(TObject *Sender)
{
RefshListView();
}
void __fastcall TFrmMain::BitPanelClick(TObject *Sender)
{
TPanel*p=dynamic_cast<TPanel*>(Sender);
if(p==NULL)
return;
ListView1->ItemIndex=p->Tag;
}