AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView scrollen???

Ein Thema von romber · begonnen am 27. Sep 2004 · letzter Beitrag vom 28. Sep 2004
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

ListView scrollen???

  Alt 27. Sep 2004, 16:10
Hallo!

Wie kann ich es so machen, dass ListView scrollt, wenn ich die Maustase drucke und den Mauszeiger nach unten bzw. nach oben ziehe?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: ListView scrollen???

  Alt 27. Sep 2004, 17:00
Entweder so:
Delphi-Quellcode:
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;
oder so:
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;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: ListView scrollen???

  Alt 27. Sep 2004, 17:44
Was sind dabei Pos und Now?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: ListView scrollen???

  Alt 28. Sep 2004, 07:47
Das sind Elemente vom Typ TPoint.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: ListView scrollen???

  Alt 28. Sep 2004, 13:30
@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:
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;
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!
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: ListView scrollen???

  Alt 28. Sep 2004, 13:44
Zitat von romber:
@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.
Ist ja auch klar, weil ich überhaupt nicht festgelegt habe, dass er das machen soll! (War ja auch nicht nach gefragt, gell?)
Zitat von romber:
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!
Auf den ersten Blick überhaupt nicht, weil diese Methode mit Selected arbeitet, und das bei MultiSelect nicht funktioniert. Ist ja auch klar, welches Element soll denn auch zurückgegeben werden, wenn mehrere ausgewählt sind!?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: ListView scrollen???

  Alt 28. Sep 2004, 14:19
[quote="Stevie"]Ist ja auch klar, weil ich überhaupt nicht festgelegt habe, dass er das machen soll! (War ja auch nicht nach gefragt, gell?) [quote]

Aso... Und wie kann ich den die Werte festlegen??? Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: ListView scrollen???

  Alt 28. Sep 2004, 14:31
Dafür musst du meine zweite Lösung heranziehen:
Delphi-Quellcode:
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;
Wenn du in den Bereich der unteren oder oberen 25 Pixel kommst, dann wird gescrollt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#9

Re: ListView scrollen???

  Alt 28. Sep 2004, 14:39
Danke! Probiere ich gleich aus.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz