DBGridでダブルクリックイベントがあると思うのですが実際にデータが表示されている行とタイトルの行で区別したいです。
ダブルクリックした場所がタイトル行だったときは除外した処理があるのですが、
なにか方法はあるでしょうか。わかる方いましたら教えてほしいです。
前提が伝わらないけど
マウスダブルクリックイベント内で押されたのが固定行か知りたいけど
カレント行を示すRowは固定行に移動出来ないから値を取得出来ない。
って事なのかなぁ
DBGridはあんまり触らないけどTDrawGridからの継承だったら
MouseToCellでマウス座標から ColとRowを取得する方法ってどうかな?
TDrawGrid(DBGrid1).MouseToCell(DBGrid1.Left + X, DBGrid1.Top + Y, Col, Row);
脳内ソースなので座標計算が適当
この辺を参考に
http://komatumoto.blog55.fc2.com/blog-entry-24.html
うまく伝えれず申し訳ありません!
DBGridのタイトル行(固定行)以外のデータ行でダブルクリックしたときのみ、その行のデータを取得するという挙動にしたいです。
最初はRecNoで
DBGrid_Base1Ex.DataSource.DataSet.RecNo
のようにしてタイトル行かどうかを判定しようと思いましたが、この方法だと固定行でもデータ行の一行目でも両方 '1'がRecNoとして扱われるので
ダメでした。。
やっぱりマウスの位置で判定するしかないですよね。
参考にしてみます。ありがとうございます。
procedure TForm4.DBGrid1DblClick(Sender: TObject);
begin
DBC := True;
end;
procedure TForm4.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
MC: TGridCoord;
begin
if DBC = True then
begin
MC :=DBGrid1.MouseCoord(X,Y);
if (MC.X <> 0) and (MC.Y <> 0) then
begin
end;
end;
DBC := False;
end;
かな
DBGridのダブルクリックイベントで
下記のようにコントロールのマウスポジションを取得することによって、実現できました。
var
pt: TPoint;
begin
pt := Mouse.CursorPos;
pt := DodgyControl1.ScreenToClient(pt);
end;
take様、AAA様 回答いただきありがとうございました。