Delphi Tips 
-----------------------------

0019  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2003/06/25 osamu 編集
OnDblClick発生時にOnMouseDownはいらない!

ダブルクリック発生をOnDblClickで捕まえたいのに、1度目のクリックでOnMouseDownが発生してしまう。
ダブルクリックとシングルクリックの両方を捕まえるにはどうするか?

procedure TForm1.FormMouseDown(Sender: TObject;
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var t:LongInt;
begin
    //
    // シングル/ダブルクリックの判定
    //
    if ssDouble in Shift then begin
        DoubleClickOccurred[Button]:=True;
    end else begin
        DoubleClickOccurred[Button]:=False;
        t:=GetTickCount+GetDoubleClickTime;
        while GetTickCount<t do begin
            Application.ProcessMessages;
            if DoubleClickOccurred[Button] then
                Exit;
        end;
    end;

    if ssDouble in Shift then begin
      case Button of
      mbLeft:   ;
      mbMiddle: ;
      mbRight:  ;
      end;
    end else begin
      case Button of
      mbLeft:   ;
      mbMiddle: ;
      mbRight:  ;
      end;
    end;
end;

ここで、
    DoubleClickOccurred:array [TMouseButton] of Boolean;
は、TForm1のメンバ変数です。
シングルクリックの際の動作でチョット遅れた感じがするのはしかたないですね。
参照: [Delphi-ML:7386] [Delphi-ML:7392] [Delphi-ML:7457] <コンポーネント > <その他コンポーネント関連>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp