全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2026
推到 Plurk!
推到 Facebook!

关于两个listview的scroll同步移动的疑惑

 
jorping
一般會員


發表:3
回覆:5
積分:1
註冊:2006-11-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-20 09:38:21 IP:220.112.xxx.xxx 訂閱
各位前辈们:
我现在想使两个listview的scroll同步移动,之前也有参考论坛里的关于这方面的资料,但是小弟在自己的程序中却出现了了点问题.:
BCB 6中,我把代码放在CustomDrawItem事件中,我有看论坛中这方面的资料也是这么做的,但据我测试,在CustomDrawItem这个Event中,
它的VisibleRowCount为0,所以也就不能取它的TopItem->Index,麻烦前辈们指点小弟一下!谢谢:
下面是我的部分Code:
方法一:
void __fastcall SyncScroll(TTntListView *src,TTntListView *dest) //sync scroll
{
if(!src->Focused())
return;

tagRECT r;
::GetWindowRect(src->Handle,&r);
tagPOINT pd;
GetCursorPos(&pd);
if(!(::PtInRect(&r,pd)))
return;
SCROLLINFO scroll;
memset(&scroll,0,sizeof(SCROLLINFO));
scroll.fMask=SIF_ALL;
scroll.cbSize=sizeof(SCROLLINFO);
if(GetScrollInfo(dest->Handle,SB_VERT,&scroll))
{
if((src->TopItem->Index)>(dest->TopItem->Index))
{
for(int i=dest->TopItem->Index;iTopItem->Index;i )
{
SendMessage(dest->Handle,WM_VSCROLL,SB_LINEDOWN,0);
}
}
else if((src->TopItem->Index)<(dest->TopItem->Index))
{
for(int i=src->TopItem->Index;iTopItem->Index;i )
{
SendMessage(dest->Handle,WM_VSCROLL,SB_LINEUP,0);
}
}
else
return;
}
}
方法二:
void __fastcall SyncScrollX(TTntListView *src,TTntListView *dest) //sync scroll -2
{
if(src->VisibleRowCount>=src->Items->Count)
return;
int iTop=src->VisibleRowCount;
if(iTop<=0)
{
//iTop=src->TopItem->Index;
return ;
}
while(src->TopItem->Index!=dest->TopItem->Index)
{
SendMessage(dest->Handle,
WM_VSCROLL,
(src->TopItem->Index>dest->TopItem->Index)? SB_LINEDOWN:SB_LINEUP,
0);
}
}
其实这两种方法都大致相同,也都是参照论坛中的CODE写的.
我把函数放在CustomDrawItem事件中,但,方法一是老是运行出错,方法二是没有效果(两个SCROLL并没有同步移动).
------
Jordan.Jeng
系統時間:2024-05-03 14:48:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!