본문 바로가기
삽질

delphi - dbgrid double click 시 col, row 번호 구하기

by rokwha 2021. 7. 20.

기본 TDbGrid 는 잘 쓰지 않아서 오랫만에 쓸려고 하니 한개도 생각 안남..

 

TDbGrid 에서 더블클릭 이벤트 는 셀 단위가 아니기 때문에 구현이 안되어 있나봄

 

보통 TDrawGrid 나 TStringGird 로 타입캐스팅 해서 col , row 프로프티 를 사용하거나 TCustomGrid 에 있는 MouseCoord를 이용해서 구하면 된다.

 

procedure TForm1.DBGrid1DblClick(Sender: TObject);
  var
    nCol: integer;
    nRow: integer;

    nGC: TGridCoord;
    nPT: TPoint;
begin
  //TStringGrid or TDrawGrid cast
  nCol:= TStringGrid(Sender).Col;
  nRow:= TStringGrid(Sender).Row;

  //use MouseCoord.
  GetCursorPos( nPT );
  nPT:= (Sender as TDbGrid).ScreenToClient( nPT );   // 좌표계 변환.
  nGC:= (Sender as TDbGrid).MouseCoord(nPT.X, nPT.Y);
  nCol:= nGC.X; //그리드에서 타이틀 빼고 좌상단 부터 1,1 로 계산됨 취향에 맞춰서 사용하자
  nRow:= nGC.Y;
end;

 

* row 번호는 화면상에 보이는 번호이며 실제 레코드의 번호 (recno) 와는 다르다.

 

* TDbGrid.SelectedField, TDbGrid.SelectedIndex 로 col 번호 및 필드, 컬럼을 확인할수 있다.

반응형