Delphi中自动取消选中按钮的执行操作

发布于 2024-07-06 17:26:27 字数 260 浏览 8 评论 0原文

我想在按下 TSpeedButton 时执行一项操作,而在“未按下”同一按钮时执行另一项操作。 我知道没有 onunpress 事件,但是有没有简单的方法可以让我在按下不同的按钮时执行操作?

procedure ActionName.ActionNameExecute(Sender: TObject);
begin
  PreviousActionName.execute(Sender);
  //
end;

看起来太笨重了。

I have one action I want to perform when a TSpeedButton is pressed and another I want to perform when the same button is "unpressed". I know there's no onunpress event, but is there any easy way for me to get an action to execute when a different button is pressed?

procedure ActionName.ActionNameExecute(Sender: TObject);
begin
  PreviousActionName.execute(Sender);
  //
end;

Seems too clunky.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

祁梦 2024-07-13 17:26:27

根据您的描述,我想您将快速按钮与 GroupIndex <>0 一起使用,但同一组中没有其他按钮,或者至少不作为 RadioButtons (AllowAllUp True) 工作。

您只有 1 个 onClick 事件用于按下按钮,但如果按钮具有 GroupIndex,执行操作取决于按钮的状态。
因此,您必须在 onClick 事件处理程序中测试 Down 是否为 False,因为 Down 在 onClick 处理程序触发之前已更新。

前任:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  with Sender as TSpeedButton do
  begin
    if Down then
      showmessage('pressing')
    else
      showmessage('unpressing');
  end;
end;

From what you describe, I suppose you use your speedbutton with a GroupIndex <>0 but no other buttons in the same group, or at least not working as RadioButtons (AllowAllUp True).

You only have 1 onClick event for pressing the button, but what to do depends on the state of the button if it has a GroupIndex.
So, you have to test for Down being False in your onClick event handler, as Down is updated before the onClick Handler is fired.

ex:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  with Sender as TSpeedButton do
  begin
    if Down then
      showmessage('pressing')
    else
      showmessage('unpressing');
  end;
end;
万水千山粽是情ミ 2024-07-13 17:26:27

没有unpress,但是可以查询Down属性。

该示例进行了一些肮脏的转换,但它对于操作和 OnClick 都有效。

procedure Form1.ActionExecute(Sender: TObject);
var
  sb : TSpeedButton;
begin
  if Sender is TSpeedButton then
    sb := TSpeedButton(Sender)
  else if (Sender is TAction) and (TAction(Sender).ActionComponent is TSpeedButton) then
    sb := TSpeedButton(TAction(Sender).ActionComponent)
  else 
    sb := nil;

  if sb=nil then
    DoNormalAction(Sender)
  else if sb.Down then
    DoDownAction(sb)
  else 
    DoUpAction(sb);
end;

There is no unpress, but you can query the Down property.

The example took some dirty casts, but it works both for the action and for the OnClick.

procedure Form1.ActionExecute(Sender: TObject);
var
  sb : TSpeedButton;
begin
  if Sender is TSpeedButton then
    sb := TSpeedButton(Sender)
  else if (Sender is TAction) and (TAction(Sender).ActionComponent is TSpeedButton) then
    sb := TSpeedButton(TAction(Sender).ActionComponent)
  else 
    sb := nil;

  if sb=nil then
    DoNormalAction(Sender)
  else if sb.Down then
    DoDownAction(sb)
  else 
    DoUpAction(sb);
end;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文