关于ListView显示问题

荒村归来 2011-10-08 11:04:18
下面这段代码对ListView显示有影响?
我把这段代码注销了显示就正常了,郁闷中。。。
谢谢各位啦~~~~~~~

void __fastcall TfrmCompare::FormCreate(TObject *Sender)
{
this->l1 = ListView1->WindowProc;
this->l2 = ListView2->WindowProc;
ListView1->WindowProc = MyProcList1;
ListView2->WindowProc = MyProcList2;
}
//---------------------------------------------------------------------------
void __fastcall TfrmCompare::MyProcList1(TMessage &message)
{
l1(message);
if(message.Msg == WM_VSCROLL || message.Msg == SB_VERT)
{
l2(message);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmCompare::MyProcList2(TMessage &message)
{
l2(message);
if(message.Msg == WM_VSCROLL || message.Msg == SB_VERT)
{
l1(message);
}
}
...全文
86 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2011-10-14
  • 打赏
  • 举报
回复
我的代码中,只是响应滚动条的消息,用鼠标滚轮时,产生的消息是WM_MOUSEWHEEL,你自己处理一下。
荒村归来 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ccrun 的回复:]
那段代码的解决方法不是很完美。我后来不是给你写了一段RichEdit的同步滚动代码么?略修改一下就可以在ListView上用。
[/Quote]
你给我的那段代码我试了下感觉 效果也不是很好(可能是我自己没改好~)依然是用鼠标滚轮时无法同步,不知道怎么回事,我刚学BCB不久 所以很多东东不是很清楚
妖哥 麻烦你帮我看看这个贴呗:http://topic.csdn.net/u/20111014/10/b402d6d6-abdf-4e76-add7-837e8c88a656.html?64192
ccrun.com 2011-10-14
  • 打赏
  • 举报
回复
那段代码的解决方法不是很完美。我后来不是给你写了一段RichEdit的同步滚动代码么?略修改一下就可以在ListView上用。
荒村归来 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zzbinfo 的回复:]
终于找到了以前看过的这个帖子,你看看.估计对你有帮助http://topic.csdn.net/t/20021228/21/1309053.html
[/Quote]
谢谢 zzbinfo 这段代码妖哥已经帮我转成BCB 语言了 可惜效果很不好 哎~不知道什么原因
荒村归来 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ccrun 的回复:]
我的代码中,只是响应滚动条的消息,用鼠标滚轮时,产生的消息是WM_MOUSEWHEEL,你自己处理一下。
[/Quote]
关键是我是不知道鼠标滚轮的响应事件是哪个事件,网上查的资料显示自由鼠标的单击、双击、按下、释放等事件,对于ListView这样的控件貌似 不写关于滚轮的响应事件,其编写的应用程序也有相应的功能,不知道是怎么设计的~
后来我有想通过截取Windows 消息来实现接管滚动条,可惜貌似消息截取失败;我是参照下面的文章做的:http://wenku.baidu.com/view/f162325177232f60ddcca109.html
此方法失败后,我又想使用Timer控件实现,可惜还是失败了 快郁闷死我了(使用Timer的时候我使用的时用如下语句同步:
ListView2->Items->Item[ListView1->TopItem->Index]->MakeVisible(true);
奇怪的是每次向下滚动时,ListView2总是落后一个显示屏高度的条数,例如listView2能显示10条记录,那么就落10条记录,原因也是没弄清楚)
再后来,还是用Timer,改成如下语句:
ListView2->Items->Item[ListView1->TopItem->Index]->MakeVisible(true);
ListView1->Items->Item[ListView2->TopItem->Index]->MakeVisible(true);

这次实现了同步,但是无论如无都无法将滚动条滑到底部,大约有一个屏幕高度条数的记录无法查看

说了一堆废话,麻烦妖哥了~
zzbinfo 2011-10-09
  • 打赏
  • 举报
回复
终于找到了以前看过的这个帖子,你看看.估计对你有帮助http://topic.csdn.net/t/20021228/21/1309053.html
荒村归来 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
你是想同步滚动了吧,你试着想一想这个循环,当ListView1滚动的时候,被告知了ListView2滚动,当2滚动的时候,又告知1滚动,可是1滚动的时候又告知2滚动。。。。这样就无限滚动去了。这两个窗口陷入死循环鸟,哪有时间去显示界面。
[/Quote]
可是ListView能显示数据 只是不正常
ccrun.com 2011-10-08
  • 打赏
  • 举报
回复
你是想同步滚动了吧,你试着想一想这个循环,当ListView1滚动的时候,被告知了ListView2滚动,当2滚动的时候,又告知1滚动,可是1滚动的时候又告知2滚动。。。。这样就无限滚动去了。这两个窗口陷入死循环鸟,哪有时间去显示界面。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧