Jer*_*dge 5 delphi listview drag-and-drop
我正在使用TListView具有拖放功能的拖放功能,将一个或多个项目拖动到另一个项目中,作为合并的一种形式.当您将项目拖动到控件的顶部或底部时,我需要它自动向上或向下滚动,但它不会.这同样适用于在某些视图样式中向右或向左滚动.如何让它自动滚动到用户拖动项目的方向?
PS:我也启用了VCL主题
并没有进行太多测试,但是下面的尝试在将某个项目拖到其父项的控件外部(在本示例中为窗体)时将其启用计时器,并且timer事件测试光标位置以查找是否有滚动消息应该发送到列表视图。
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, Source: TObject; X, Y: Integer);
begin
Timer1.Enabled := False;
end;
Run Code Online (Sandbox Code Playgroud)
如果可以,也可以合并水平滚动。