delphi - 平滑地滚动鼠标移动

时间:2017-06-13 13:17:29

标签: user-interface delphi scroll scrollbar freepascal

我有一个带水平滚动条的表单,但我想通过在表单上使用鼠标移动(水平)来移除滚动条作为滚动方式。 我希望随着鼠标的移动,我的表单将滚动但没有延迟和平滑,当我到达结束时它停止滚动。 所以,如果有人能帮助我,那将是一个巨大的帮助。 在此先感谢。

1 个答案:

答案 0 :(得分:0)

只要你不隐藏滚动条,屏幕就会在10.1柏林上移动得很好。文档建议如果你隐藏滚动条应该可以工作,所以也许在早期版本的Delphi上它会。

使用OnMouseDown,OnMouseMove和OnMouseUp,以及3个局部变量。

unit Unit10;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.StrUtils, Vcl.Mask;

type
  TForm10 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    fIsDown : boolean;
    fX, fY : integer;
  public
    { Public declarations }
  end;

var
  Form10: TForm10;

implementation

{$R *.dfm}

procedure TForm10.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Shift = [ssLeft] then  // if ONLY left down
  begin
    // Save co-ordinates
    fIsDown := TRUE;
    fX := X;
    fY := Y;
  end;
end;

procedure TForm10.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Shift = [ssLeft] then  // if ONLY left down
  begin
    if fIsDown then
    begin
      HorzScrollBar.Position := HorzScrollBar.Position + fX - X;
      VertScrollBar.Position := VertScrollBar.Position + fY - Y;
    end
    else
    begin
      fIsDown := TRUE;
    end;
    fX := X;
    fY := Y;
  end
  else
  begin
    fIsDown := FALSE;
  end;
end;

procedure TForm10.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fIsDown := FALSE; // regardless of shift state!
end;

end.

如果隐藏滚动条适用于XE8,请告诉我们,因为这对未来的读者有用。