Delphi XE5/C++Builder XE5でFireMonkeyのTScrollBarコンポーネントのOnClickやOnMouseDownなどのイベントが効かない

Embarcadero Discussion Forumsで投稿されていた質問「XE4 Firemonkey HD ApplicationでのScrollBarのOnClickやOnMouseDownなどのイベントが効かない!」を調べてみました。

スクロールバー(TScrollBar)はボタン(TCustomButton)とトラックバー(TCustomTrack)から構成されていて、トラックバーの部分をクリックしたときは、スクロールバーのOnClickイベントではなく、トラックバーのOnClickイベントが呼ばれるようです。

TScrollBar

スクロールバーのOnClickイベントをトラックバーのOnClickイベントに割り当ててみました。

スクロールバーのApplyStyleメソッドでトラックバーのインスタンスが生成されているようなので、次のようにしてみました。

Delphi XE5の場合

type
  TScrollBar = class(FMX.StdCtrls.TScrollBar)
  protected
    procedure ApplyStyle; override;
  end;

procedure TScrollBar.ApplyStyle;
begin
  inherited;
  if Assigned(Self.Track) then
  begin
    Self.Track.OnClick := Self.OnClick;
    Self.Track.OnMouseDown := Self.OnMouseDown;
  end;
end;

C++Builder XE5の場合

class TScrollBar2 : public TScrollBar {
protected:
    virtual void __fastcall ApplyStyle(void) {
    TScrollBar::ApplyStyle();
    if (this->Track) {
      this->Track->OnClick = this->OnClick;
      this->Track->OnMouseDown = this->OnMouseDown;
    }
  }
public:
    __fastcall virtual TScrollBar2(System::Classes::TComponent* AOwner) : TScrollBar(AOwner) {}
};

ちょっと試してみたところ、これで動作しているようです。

あとでフォーラムに投稿します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください