![]() |
ListView scrollen???
Hallo!
Wie kann ich es so machen, dass ListView scrollt, wenn ich die Maustase drucke und den Mauszeiger nach unten bzw. nach oben ziehe? |
Re: ListView scrollen???
Entweder so:
Delphi-Quellcode:
oder so:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); const Speed = 3; begin if (ssLeft in Shift) then begin if (Y - Pos.Y > 3) then begin ListView1.Perform(WM_VSCROLL, SB_LINEDOWN, 0); Pos.Y := Y; end else if (Y - Pos.Y < -3) then begin ListView1.Perform(WM_VSCROLL, SB_LINEUP, 0); Pos.Y := Y; end; end; end; procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Pos.Y := Y; end;
Delphi-Quellcode:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin Now.Y := Y; end; procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Pos.Y := Y; Timer1.Enabled := True; end; procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled := False; end; procedure TForm1.Timer1Timer(Sender: TObject); const Speed = 3; var i: Integer; begin for i := 1 to ((Now.Y - Pos.Y) div Speed) do ListView1.Perform(WM_VSCROLL, SB_LINEDOWN, 0); for i := -1 downto ((Now.Y - Pos.Y) div Speed) do ListView1.Perform(WM_VSCROLL, SB_LINEUP, 0); end; |
Re: ListView scrollen???
Was sind dabei Pos und Now?
|
Re: ListView scrollen???
Das sind Elemente vom Typ TPoint.
|
Re: ListView scrollen???
@Stevie
Danke für die Hilfe! Es funktioniert aber irgendwie ungenau. Die ListView scrollt bereits, bevor den Mauszeiger den untensten oder obersten Item erreicht hat. Ich habe auf einer russischen Seite eine Funktion gefunden.
Code:
Funktioniert super. Nur wenn ich ListView.MultiSelect auf True setze, scrollt es nur nach oben. Wie kann ich die obere Code so optimieren, dass es bei MultiSelect := true auch genauso gut funktioniert? Danke!
var
d: integer = 0; procedure Move; var NewIndex: integer; begin with Form1.ListView1 do if Assigned(Selected) then begin NewIndex := Selected.Index + d; if NewIndex < 0 then NewIndex := 0 else if NewIndex >= Items.Count then NewIndex := Items.Count - 1; if NewIndex <> Selected.Index then begin Selected := Items[NewIndex]; ItemFocused := Selected; Selected.MakeVisible(true); end; end; end; procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin SetCapture(ListView1.Handle); end; procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var li: TListItem; begin if ssLeft in Shift then with ListView1 do begin li := GetItemAt(10, Y); if Assigned(li) then begin Timer1.Enabled := false; Selected := li; ItemFocused := ListView1.Selected; end else begin if Y >= ListView1.ClientHeight then d := (Y - ListView1.ClientHeight) div 20 + 1 else d := Y div 20 - 1; if Timer1.Enabled = false then begin Move; Timer1.Enabled := true; end; end; end; end; procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled := false; ReleaseCapture; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Move; end; |
Re: ListView scrollen???
Zitat:
Zitat:
|
Re: ListView scrollen???
[quote="Stevie"]Ist ja auch klar, weil ich überhaupt nicht festgelegt habe, dass er das machen soll! (War ja auch nicht nach gefragt, gell?) :zwinker:[quote]
Aso... Und wie kann ich den die Werte festlegen??? Danke! |
Re: ListView scrollen???
Dafür musst du meine zweite Lösung heranziehen:
Delphi-Quellcode:
Wenn du in den Bereich der unteren oder oberen 25 Pixel kommst, dann wird gescrollt.
procedure TForm1.Timer1Timer(Sender: TObject);
const Area = 25; begin if Now.Y < Area then ListView1.Perform(WM_VSCROLL, SB_LINEUP, 0); if (ListView1.Height - Now.Y) < Area then ListView1.Perform(WM_VSCROLL, SB_LINEDOWN, 0); end; |
Re: ListView scrollen???
Danke! Probiere ich gleich aus. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz