在我正在处理的应用程序中,表单中有TListView
和TRichEdit
。
当用户点击TListView
中的项目时,它会加载TRichEdit
文字。当文本长度超过TRichEdit
的高度时,会出现问题。
如果我真的快速滚动鼠标滚轮并且即使滚动条位于底部我继续滚动,那么我点击TListview
中的另一个项目(使TRichEdit->Text
更改),滚动有时会在新加载的文本上继续。
我的假设是有某种Windows消息尚未处理,当我点击另一个项目时,会读取滚动消息并继续滚动?!
我已经尝试禁用然后启用TRichEdit
MouseLeave上的TRichEdit
但没有成功(当我更改TListView的选定项目时滚动继续)。
我想知道是否有人有任何想法?
[编辑]
好的,所以我正在尝试使用Remy的解决方案,但PeekMessage()
没有抓住任何WM_VSCROLL
,WM_HSCROLL
,WM_MOUSEWHEEL
。我试图在函数DescriptionChanged();
之前和之后捕获它,但它们都没有捕获滚动消息。
void __fastcall TfrmJob::lvDescriptionSelectItem(TObject *Sender, TListItem *Item, bool Selected)
{
//Function where ListView load item into RichEdit->Text
DescriptionChanged();
MSG msg;
//Loop while there is messages ("If no messages are available, the return value is zero")
while (PeekMessage(&msg, NULL /*reDocDetail->Handle*/ /*lvDescription->Handle*/, 0, 0, PM_REMOVE | PM_QS_INPUT) > 0)
{
//Trying to catch Scroll message
if(msg.message == WM_VSCROLL || msg.message == WM_HSCROLL || msg.message == WM_MOUSEWHEEL)
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
}