gpt4 book ai didi

delphi - 防止双击 TButton

转载 作者:行者123 更新时间:2023-12-02 08:31:15 33 4
gpt4 key购买 nike

我们在应用程序中遇到问题,用户双击几乎所有内容(包括按钮)。在某些情况下,这会导致用户不希望出现的情况,因为它会触发按钮上的 OnClick 事件两次。有人提出了一个想法来防止整个应用程序出现这种情况,我想知道使用它是否存在任何陷阱。

添加TApplicationEvents并实现OnMessage设置Handled对于 WM_LBUTTONDBLCLKTButtonTrue .

类似这样的事情:

function GetWindowClassName(Handle: HWND): String;
var
Buffer: array[0..255] of Char;
begin
if GetClassName(Handle, @Buffer, 255) = 0 then
RaiseLastOSError;
Result := Buffer;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if Msg.message = WM_LBUTTONDBLCLK then
Handled := (GetWindowClassName(msg.hwnd) = 'TButton');
end;

一个明显的缺点是,如果您遇到用户实际上想要匆忙单击同一按钮的情况。在此特定应用中是否存在这种情况还有待调查。

最佳答案

为了避免这种情况,请在 OnClickEvent 中使用常量:

 procedure TMyForm.Button1OnClick(sender:TObject);
const
{$J+}
IsInside:Boolean=False;
{$J-}
begin
if IsInSide then Exit;
IsInside:=True;
try
do your code;
finally
IsInside:=False;
end;
end;

如果您有很多按钮,我建议对这些按钮使用 TActionList 并捕获 ActionList 事件的 OnActionExecute。未经测试,请参阅 TActionList 获取帮助。我以前用过它。

procedure TMyForm.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
const
{$J+}
IsInside:Boolean=False;
{$J-}
begin
if IsInSide then Exit;
IsInside:=True;
try
ActionList1.ExecuteAction(Action);
finally
IsInside:=False;
end;
end;

关于delphi - 防止双击 TButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293618/

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