delphi – 如何在向上或向下拖动项目时滚动列表视图?
发布时间:2020-12-15 04:13:25 所属栏目:大数据 来源:网络整理
导读:我正在使用TListView,它具有拖放功能,可将一个或多个项目拖动到另一个项目中,作为合并的一种形式.当您将项目拖动到控件的顶部或底部时,我需要它自动向上或向下滚动,但它不会.这同样适用于在某些视图样式中向右或向左滚动.如何让它自动滚动到用户拖动项目的方
我正在使用TListView,它具有拖放功能,可将一个或多个项目拖动到另一个项目中,作为合并的一种形式.当您将项目拖动到控件的顶部或底部时,我需要它自动向上或向下滚动,但它不会.这同样适用于在某些视图样式中向右或向左滚动.如何让它自动滚动到用户拖动项目的方向?
PS:我也启用了VCL主题 解决方法
没有测试太多,但下面的尝试启用一个计时器,当一个项目被控制在其父项的控件之外(在示例的情况下,形式),并且计时器事件测试光标位置以找出是否滚动消息应该发送到列表视图.
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := False; Timer1.Interval := 500; end; procedure TForm1.FormDragOver(Sender,Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); begin if Source = ListView1 then Timer1.Enabled := True else Timer1.Enabled := False; end; procedure TForm1.Timer1Timer(Sender: TObject); var Pt: TPoint; begin // Stop timer and exit if not dragging any more if not ListView1.Dragging then begin Timer1.Enabled := False; Exit; end; Pt := ListView1.ScreenToClient(Mouse.CursorPos); if Pt.Y < 0 then ListView1.Perform(WM_VSCROLL,SB_LINEUP,0) else if Pt.Y > ListView1.ClientHeight then ListView1.Perform(WM_VSCROLL,SB_LINEDOWN,0) else Timer1.Enabled := False; end; procedure TForm1.FormDragDrop(Sender,Y: Integer); begin Timer1.Enabled := False; end; 如果它工作正常,您也可以合并水平滚动. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |