DBGridのダブルクリックイベントでタイトル行は除外したい

解決


kaden  2020-02-12 04:12:37  No: 148550  IP: 192.*.*.*

DBGridでダブルクリックイベントがあると思うのですが実際にデータが表示されている行とタイトルの行で区別したいです。
ダブルクリックした場所がタイトル行だったときは除外した処理があるのですが、
なにか方法はあるでしょうか。わかる方いましたら教えてほしいです。

編集 削除
take  2020-02-12 05:57:11  No: 148552  IP: 192.*.*.*

前提が伝わらないけど
マウスダブルクリックイベント内で押されたのが固定行か知りたいけど
カレント行を示す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

編集 削除
kaden  2020-02-12 06:44:39  No: 148553  IP: 192.*.*.*

うまく伝えれず申し訳ありません!
DBGridのタイトル行(固定行)以外のデータ行でダブルクリックしたときのみ、その行のデータを取得するという挙動にしたいです。
最初はRecNoで
DBGrid_Base1Ex.DataSource.DataSet.RecNo 
のようにしてタイトル行かどうかを判定しようと思いましたが、この方法だと固定行でもデータ行の一行目でも両方 '1'がRecNoとして扱われるので
ダメでした。。
やっぱりマウスの位置で判定するしかないですよね。
参考にしてみます。ありがとうございます。

編集 削除
AAA  2020-02-12 09:01:05  No: 148554  IP: 192.*.*.*

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;

かな

編集 削除
kaden  2020-02-17 01:12:17  No: 148569  IP: 192.*.*.*

DBGridのダブルクリックイベントで
下記のようにコントロールのマウスポジションを取得することによって、実現できました。
var
  pt: TPoint;
begin
  pt := Mouse.CursorPos;
  pt := DodgyControl1.ScreenToClient(pt);
end;
take様、AAA様 回答いただきありがとうございました。

編集 削除