Thema: Delphi ListView scrollen???

Einzelnen Beitrag anzeigen

romber

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

Re: ListView scrollen???

  Alt 28. Sep 2004, 14: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