2016-11-21 6 views
6

TPanelコンポーネントからカスタムボタンを作成しようとしています。このために、onmousedownイベントとonmouseupイベントのオーバーライドを提供しました(いくつかの描画を行うために)、私はクリックを処理するためにonclickイベントを使用しました。onmousedown、onmouseup、およびclickイベントを使用しているときに、すべてのクリックを捕捉できない

残念ながら、パネルをすばやくクリックすると、他のクリックはすべて「失われています」が、わかりません。

この点でも最も簡単な例でさえも失敗します。私は、新しい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 

エトセトラ...各二クリックが無視されますしかし、私は理由を知らない。

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

答えて

9

あなたが急にクリックすると、パネルはダブルクリックを処理しています。ダブルクリックをクリックにマップするには、

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

を使用します。 (あなたのカスタムコントロールでは、そのコンストラクタにControlStyleを設定します)。

csDoubleClicks制御は、受信し メッセージをダブルクリックに応答することができます。それ以外の場合は、ダブルクリックをクリックにマッピングします。

TControl.ControlStyle

関連する問題