4
我正在使用具有拖放功能的TListView
將一個或多個項目拖動到另一個項目中,作爲合併的一種形式。當您將項目拖到控件的頂部或底部時,我需要它自動向上或向下滾動,但不是。這同樣適用於在某些視圖樣式中向右或向左滾動。我怎樣才能讓它自動滾動到用戶拖動項目的方向?如何在向上或向下拖動項目的同時滾動列表視圖?
PS:我有VCL主題啓用以及
我正在使用具有拖放功能的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, Source: TObject; X, Y: Integer);
begin
Timer1.Enabled := False;
end;
如果工作正常,您也可以合併水平滾動。
+1和謝謝,我還修改了它,通過設置定時器間隔,可以更快地滾動鼠標,使鼠標遠離邊緣。奇蹟般有效。 –
不客氣! –