1

有一个关于 javascript 的 facebook 滚动条的问题:hide scrollbar and show on hover like facebook's new chat sidebar还有这个问题我问自己一个很好的回答来自用户:我们如何为 <div> 制作样式滚动条鼠标滚轮敏感

无论如何,有没有一种方法可以让我们的 delphi 程序在鼠标悬停时让这种滚动条更加时尚和生动,就像 facebook 的滚动条一样?

编辑1:

样式问题是可以通过更改表单样式来安排的。只是我们可以隐藏滚动条,然后在用户鼠标悬停时显示它们,这已经很棒了!

4

1 回答 1

1

创建一个从 TListbox 派生的组件并处理 scollbar 的显示。示例代码就像插入的类一样。

外观可以通过设计和自己的风格进行调整(使用较新的 Delphi 版本)。

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TListBox = Class(StdCtrls.TListBox)
    Constructor Create(AOwner: TComponent); override;
  private
    FHiddenScrollbar: Boolean;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
  published
  public
    Property HiddenScrollbar: Boolean Read FHiddenScrollbar;
  End;

  TForm3 = class(TForm)
    ListBox1: TListBox;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}
{ TListBox }

constructor TListBox.Create;
begin
  inherited;
  FHiddenScrollbar := true;
end;

procedure TListBox.CreateParams(var Params: TCreateParams);
VAR
  Style: Integer;
BEGIN
  inherited;
  if FHiddenScrollbar then
    Params.Style := Params.Style AND not WS_VSCROLL
  else
    Params.Style := Params.Style or WS_VSCROLL;
end;

procedure TListBox.WMMouseMove(var Message: TWMMouseMove);
var
  p: TPoint;
begin
  inherited;
  GetCursorPos(p);
  p := ScreenToClient(p);
  if p.X > (Width - 20) then
  begin
    if FHiddenScrollbar then
    begin
      FHiddenScrollbar := false;
      RecreateWnd;
    end;
  end
  else
  begin
    if not FHiddenScrollbar then
    begin
      FHiddenScrollbar := true;
      RecreateWnd;
    end;
  end;
end;

end.

在此处输入图像描述

于 2013-04-22T09:43:31.480 回答