gpt4 book ai didi

delphi - TSpeedButton 卡在向下外观中

转载 作者:行者123 更新时间:2023-12-02 03:01:39 34 4
gpt4 key购买 nike

我使用设置了 Flat 属性的 TSpeedButton。当我按下它时,它会生成异常,它仍处于按下状态。下图中的第一张图片是按下按钮之前的图片,第二张图片是按下按钮期间的图片,以及异常时保持在该位置的图片。

enter image description here

使用了两个事件:OnMouseDown 和 OnMouseUp。事件处理程序的代码是:

procedure TVector_Choice.Button_Down (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FStart_X := X;
FStart_Y := Y;
FSelected := True;
end; // MouseDown //

procedure TVector_Choice.Button_Up (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Application.ProcessMessages;
if Assigned (FOnSelect) and FSelected then
begin
FOnSelect (Sender);
FSelected := False;
end; // if
end; // MouseUp //

异常发生在FOnSelect (Sender); 中的过程Button_Up 中。该异常是通过 try..finally 处理的,以便重置鼠标指针。我不知道如何重置“按下”状态,它不是我上面尝试过的“按下”状态。我无法在小型测试程序中重现此行为。我使用Delphi XE。

我应该怎样做才能将此按钮自动重置为未按下状态?

最佳答案

您的代码有一些问题

为了能够在单个速度按钮上设置按下状态,您需要设置
A:AllowAllUp:= true
B:groupindex <> 0 .
只有这样C才会:down属性允许将其本身用作复选框。

enter image description here

当满足这些条件时,您可以只使用普通 TSpeedButton 的 OnClick 事件。

procedure TForm2.btn2Click(Sender: TObject);
begin
case btn2.Down of
true: //do stuff when down
false: //do stuff when up
end; {case}
end;

无需复杂的自定义消息处理。

如果AllowAllUp:= false然后 2 个或更多具有相同所有者和相同 groupindex 的快速按钮像一组单选按钮一样一致行动。

代码注释
最后,您的代码似乎使用了从 TSpeedButton 继承的自定义控件,但没有 inherited关键字在眼前,当您禁用继承的行为时,您希望按钮如何操作?

除此之外,您的代码还有许多其他问题,但主要问题是,如果您必须从标准控件继承,因为您需要一些特殊行为,请确保重用尽可能多的行为尽可能尝试并始终调用 inherited在您重写的任何代码中(除非您想完全禁用继承行为)

关于delphi - TSpeedButton 卡在向下外观中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451216/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com