6

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 回目のクリックは無視されますが、その理由はわかりません。

誰でもこれを説明できますか?

4

1 に答える 1

9

パネルをすばやくクリックすると、パネルはダブルクリックを処理しています。使用する:

Panel1.ControlStyle := Panel1.ControlStyle - [csDoubleClicks]

ダブルクリックをクリックにマッピングします。ControlStyle(コンストラクターに設定されたカスタムコントロール内)。

csDoubleClicks コントロールは、ダブルクリック メッセージを受信して​​応答できます。それ以外の場合は、ダブルクリックをクリックにマップします。

見るTControl.ControlStyle

于 2016-11-21T11:53:10.573 に答える