2012-08-01

【Delphi】讓滑鼠在 DBGrid title 按 2 下也不引發 double click

DBGridOnDblClick event 是針對整個 grid, 所以即使您在 title 處按 2 下滑鼠也會觸發. 可是有時候我們也在 OnTitleClick 撰寫自己的程式碼, 例如做指定欄位的排序, 若稍微按快些就會觸發 OnDblClick 而不是 OnTitleClick, 此時就得在 OnDblClick 加入判別滑鼠在按 2 下時的位置是不是在 title, 若是在 title, 就不執行 OnDblClick 中自己撰寫的程式段 ----

procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
    pt: TGridcoord;
    pMouse: TPoint;
begin
    pMouse := TControl(Sender).ScreenToClient(Mouse.CursorPos);
    pt := TDBGrid(Sender).MouseCoord(pMouse.X, pMouse.Y);
    // pt.X 是點擊的 DBGrid 的欄
    // pt.Y 是點擊的 DBGrid 的列
    // 當記錄數不多, 記錄未填滿 DBGrid 時
    // 點擊在 DBGrid 的空白區域, pt.X = -1, pt.Y = -1
    if ((pt.Y>0) and (pt.X>0)) and (TDBGrid(Sender).DataSource.DataSet.RecordCount>0) then
    begin
        // 滑鼠 double click 時要做的事
        ...
        ...
    end;
end;