1

javascript の Facebook スクロールバーに関するこの質問があります: Facebook の新しいチャット サイドバーのように、スクロールバーを非表示にしてホバー時に表示します。また、この質問はユーザーからの素晴らしい回答で自問しました: <div> のスタイル付きスクロール バーを作成するにはどうすればよいですかマウスホイール感知

とにかく、Facebookのスクロールバーのように、私たちのデルフィプログラムのために、マウスオーバーしたときにそのようなスクロールバーをよりスタイリッシュで生き生きとさせる方法はありますか?

編集1:

スタイルの問題は、フォームのスタイルを変更することで解決できるものです。スクロール バーを非表示にして、ユーザーがマウス オーバーしたときに表示できるという事実だけでも素晴らしいことです。

4

1 に答える 1

1

TListbox から派生したコンポーネントを作成し、スクロールバーの表示を処理します。挿入されたクラスと同じコード例。

外観は、独自のスタイルを設計して適合させることができます (新しい 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 に答える