ユーザーがボタンを含むほぼすべてのものをダブルクリックすると、アプリケーションで問題が発生します。状況によっては、ボタンで OnClick イベントが 2 回発生するため、ユーザーが意図していない事態が発生することがあります。アプリケーション全体でこれを防ぐための 1 つのアイデアが提起されました。これを使用する際の落とし穴があるかどうかを知りたいです。
に を追加し、onの設定にTApplicationEvents
実装します。OnMessage
Handled
WM_LBUTTONDBLCLK
TButton
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;
明らかな欠点の 1 つは、ユーザーが実際に同じボタンを急いでクリックしたい状況がある場合です。それがこの特定のアプリケーションに当てはまるかどうかは、まだ調査されていません。