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

解決


kaden  2020-02-12 13:12:37  No: 148550

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


take  2020-02-12 14:57:11  No: 148552

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

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


AAA  2020-02-12 18:01:05  No: 148554

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 10:12:17  No: 148569

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


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加