2012-12-18 4 views
5

Delphi 2010에서는 dgRowSelect이 True로 설정되어있을 때 어떤 셀을 클릭했는지 감지 할 수있는 방법이 있습니까?dgRowSelect가 True로 설정된 경우 TDBGrid에서 클릭 된 셀을 감지합니까?

일반적으로 OnCellClick(Column: TColumn) 이벤트 처리기를 사용하지만 예상대로 작동하지 않습니다. dgRowSelect = False으로이 프로 시저는 클릭 된 열을 전달 받지만, dgRowSelect = True을 사용하면 클릭 한 열에 관계없이이 프로 시저가 첫 번째 열을 전달합니다.

TColumn 매개 변수를 전달하는 코드가 OnCellClick 인 코드가 어디에서 작동하지 않을 수 있습니다.이 이상한 동작을 수정하는 방법을 알아낼 수 있습니다.

답변

13

마우스 좌표를 사용하여 열을 가져올 수 있습니다. TDBGrid.MouseCoord를 호출 한 후에 반환 TGridCoord.X는 열 번호를 포함하고 Y은 (물론, 당신이 이미 가지고) 행이 들어 다음 documentationTGridCoord

procedure TForm1.DBGrid1CellClick(Column: TColumn); 
var 
    Pt: TPoint; 
    Coord: TGridCoord; 
    ClickCol: Integer; 
begin 
    Pt := DBGrid1.ScreenToClient(Mouse.CursorPos); 
    Coord := DBGrid1.MouseCoord(Pt.X, Pt.Y); 
    ClickCol := Coord.X; 
    ShowMessage('You clicked column ' + IntToStr(ClickCol)); 
end; 

더 많은 정보를.

your previous question에 대한 내 답변에 사용 된 것과 동일한 앱을 사용하여 테스트되었습니다.

+0

완벽한 답변. 나에게 필요한 것을 정확히 알려준다. 다른 사람들이 데이터베이스 필드의 이름을 알려주는 데 도움이된다면; DBGrid1.Columns [ClickCol - 1]. Field.FieldName – srayner

+0

+1이 답변은 나에게 도움이되었지만 속성의 이름이 잘못 되었나요? 일반적으로 마우스 좌표는 화면 상대 위치로 인식됩니다. –

+0

ScreenToClient가 변환을 수행 할 수 있습니다. 맞습니까? –

관련 문제