2011-12-06 14 views
1

TDBGridの子孫があり、複数の行を選択できます。TDbGridのガター(左余白)のクリックを検出しますか?

グリッターの中をクリックするとこのモードがオンになり、グリッドのセルをクリックするとオフになります。

OnMouseDownイベントハンドラで、クリックしている場所を検出できますか?

+2

「OnMouseDown」では難しいです。あなたは座標を得ることができますが、それらの座標の下の列を追跡し、それが正しいかどうかを確認する必要があります。しかし、代わりに 'TDBGrid.OnCellClick'が動作するはずです。 'OnColEner'を見ることもできます。 –

+0

ここでのテスト:OnCellClick(名前が示すように)は、セルのクリックでのみ発生しますので、その1/2の必要があります。マルチセレクトをオフにすることができます。 しかし、私はまだガターをクリックするかどうかを検出する方法が必要なので、オンにすることができます。私は、単に列0の左の境界線の左にクリックしているかどうかを知る必要があります。 – Tom

+0

OnCellClickは機能しません。ガターでは発火しません。 OnMouseDownは機能しますが、それはタイトル行(ガターを含む)でのみ発生するように見えます。実際にクリックされたセルを取得するにはいくつかの作業が必要です。私はあなたが、Ctrlキーを押しながらクリックすると、Shiftキーを押しながらクリックするだけで、マルチ選択のための標準的なキーを使用するより良いと思う - Windowsの他のすべてのアプリケーションと同様。 :) –

答えて

2

OnMouseDownは難しい。ときOnMouseDownだけTDBGridのために発射しているようです、しかし

var 
    Coord: TGridCoord; 
begin 
    Coord := TCustomGrid(DBGrid1).MouseCoord(X, Y); 
    if Coord.X = 0 then 
    // We're in the "gutter" 
end; 

:あなたは祖先TCustomGridだそれにTDBGridを型キャストすることで、イベントにXYパラメータを経由して座標を取得し、行と列に変換することができますヘッダー行がクリックされます。

OnCellClickは実際のセル(​​ガターとヘッダー行を除く)でのみ発生するため、動作しません。どちらもしたくないときは起動しないので、どちらもOnColEnterになりません。

あなたの最良のオプションは複数選択し、Windowsの他のすべてのアプリのよう、あなたの複数選択を行うには、マウスの左ボタンで標準Ctrlキーシフトに修飾子を使用することであろうように見えます。

関連する問題