[转载]完全掌控PageControl中的右上方的左右箭头事件!

   单击PageControl中的右上方的左右箭头时,PageControl的执行结果让人很不满意,我想让它执行我的自定义过程!
   下面是ANiDelphi大侠写的组件:
unit Unit1;

interface

uses
  Windows, Messages, Classes, ComCtrls;

type
  TLRClickingEvent = procedure(Sender: TObject; var AllowClick: Boolean) of Object;

  TLRPageControl = class(TPageControl)
  private
    IsLeftBtn: Boolean;
    FOnLeftClick, FOnRightClick: TNotifyEvent;
    FOnLRClicking: TLRClickingEvent;
    procedure WMNotify(var Message: TWMNotify); message WM_NOTIFY;
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure DoLeftClick;
    procedure DoRightClick;
    procedure DoLRClicking(var AllowClick: Boolean);
  published
    property OnLeftClick: TNotifyEvent read FOnLeftClick write FOnLeftClick;
    property OnLRClicking: TLRClickingEvent read FOnLRClicking write FOnLRClicking;
    property OnRightClick: TNotifyEvent read FOnRightClick write FOnRightClick;
  end;

implementation

uses
  CommCtrl;

{ TLRPageControl }

procedure TLRPageControl.DoLeftClick;
begin
  if Assigned(FOnLeftClick) then FOnLeftClick(Self);
end;

procedure TLRPageControl.DoLRClicking(var AllowClick: Boolean);
begin
  if Assigned(FOnLRClicking) then FOnLRClicking(Self, AllowClick);
end;

procedure TLRPageControl.DoRightClick;
begin
  if Assigned(FOnRightClick) then FOnRightClick(Self);
end;

procedure TLRPageControl.WMHScroll(var Message: TWMHScroll);
begin
  inherited;
  if Message.ScrollCode = SB_THUMBPOSITION then
    if IsLeftBtn then DoLeftClick
    else DoRightClick;
end;

procedure TLRPageControl.WMNotify(var Message: TWMNotify);
var
  AllowClick: Boolean;
begin
  inherited;
  with Message do
    if NMHdr^.code = UDN_DELTAPOS then
    begin
      IsLeftBtn := PNMUpDown(NMHdr).iDelta < 0;
      AllowClick := not LongBool(Result);
      DoLRClicking(AllowClick);
      LongBool(Result) := not AllowClick;
    end;
end;

end.
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值