我们在应用程序中遇到问题,用户双击几乎所有内容,包括按钮。在某些情况下,这会导致用户不希望发生的事情,因为它会在按钮上触发两次 OnClick 事件。提出了一个防止整个应用程序出现这种情况的想法,我想知道使用它是否有任何陷阱。
添加一个TApplicationEvents
并实现OnMessage
设置Handled
为WM_LBUTTONDBLCLK
on TButton
to True
。
像这样的东西:
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;
一个明显的缺点是,如果您遇到用户实际上想要匆忙单击同一个按钮的情况。在这个特定的应用程序中是否是这种情况仍有待调查。