TPanel コンポーネントからカスタム ボタンを作成しようとしています。このために、onmousedown および onmouseup イベント (描画を行うため) のオーバーライドを提供し、onclick イベントを使用してクリックを処理しました。
残念ながら、パネルをすばやくクリックすると、1 回おきのクリックが失われますが、その理由はわかりません。
最も簡単な例でさえ、この点では失敗します。新しい VCL アプリケーションを作成し、リストボックスと 1 つのパネルを追加し、次のようにイベントを実装しました。
procedure TForm1.Panel1Click(Sender: TObject);
begin
listbox1.Items.Add('click');
end;
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
listbox1.Items.Add('mouse down');
end;
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
listbox1.Items.Add('mouse up');
end;
結果は次のとおりです。
mouse down
click
mouse up
mouse down
mouse up
など... 2 回目のクリックは無視されますが、その理由はわかりません。
誰でもこれを説明できますか?