Embarcadero Discussion Forumsで投稿されていた質問「XE4 Firemonkey HD ApplicationでのScrollBarのOnClickやOnMouseDownなどのイベントが効かない!」を調べてみました。
スクロールバー(TScrollBar)はボタン(TCustomButton)とトラックバー(TCustomTrack)から構成されていて、トラックバーの部分をクリックしたときは、スクロールバーのOnClickイベントではなく、トラックバーのOnClickイベントが呼ばれるようです。
スクロールバーの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) {}
};
ちょっと試してみたところ、これで動作しているようです。
あとでフォーラムに投稿します。