TSpeedButton巨难问题!如何捕捉Down/Up状态改变事件,请高手指教! ( 积分: 100 )

  • 主题发起人 主题发起人 dannyr
  • 开始时间 开始时间
D

dannyr

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一组SpeedButton,组成Group,类似RadioButton效果,当按下某个按钮后(down),其他都按钮都是Up状态,我想实现,当按下某个按钮后,原来处于按下(Down)状态的按钮弹起来能收到状态改变事件(从Down状态改为Up状态),我需要在这个状态改变事件里做一些处理。
 
我有一组SpeedButton,组成Group,类似RadioButton效果,当按下某个按钮后(down),其他都按钮都是Up状态,我想实现,当按下某个按钮后,原来处于按下(Down)状态的按钮弹起来能收到状态改变事件(从Down状态改为Up状态),我需要在这个状态改变事件里做一些处理。
 
speenbutton里面好象有一个属性,你好好看看
 
换个思维吧!在SpeedButton的Click事件里处理其他按钮的Up状态;
至于要实现按下一个,其他自己Up,则可将它们的GroupBox设成大于0的同一个数值,然后设置要Down的SpeedButton.Down=True即可。
 
SpeedButton可以分组的,你可以把他们设成同在一个组,然后有个相关属性是专门满足你的要求的,具体哪个属性我也没记,找一下,肯定有的,因为我用过的。
 
可能是我说的不清楚,大家误会了, 实现按下一个,其他自己Up,这个很简单,主要是要在按下其中一个的时候,另外以前按下的按钮弹起来的时候,这个弹起来的按钮自己能捕捉到弹起事件,或者说给这个弹起的按钮发个Message也可以!
 
也就是说,我在按下某个按钮的时候需要知道以前按下的那个按钮的句柄
 
你重新继承个speedbutton就行了,截获原来的speedbutton的这个消息,然后触发一个事件:

procedure TSpeedButton.CMButtonPressed(var Message: TMessage);
var
Sender: TSpeedButton;
begin
if Message.WParam = FGroupIndex then
begin
Sender := TSpeedButton(Message.LParam);
if Sender <> Self then
begin
if Sender.Down and FDown then
begin
FDown := False;
FState := bsUp;
//这里添加按钮抬起事件
if (Action is TCustomAction) then
TCustomAction(Action).Checked := False;
Invalidate;
end;
FAllowAllUp := Sender.AllowAllUp;
end;
end;
end;
 
我怎么没留意这个消息处理,惭愧啊!
给分!
 
后退
顶部