2011-12-06 3 views
1

TDBGrid의 하위 항목이있어 여러 행을 선택할 수 있습니다.TDbGrid의 거터 (왼쪽 여백)에서 클릭을 감지합니까?

거터를 클릭하면이 모드가 켜지고 그리드의 셀을 클릭하면이 모드가 켜지고 싶습니다.

OnMouseDown 이벤트 처리기에서 클릭하는 위치를 감지 할 수 있습니까?

+2

'OnMouseDown'에서는 어렵습니다. 당신은 좌표를 얻을 수 있지만 그 좌표 아래의 열을 추적하고 그것이 올바른지 확인해야합니다. 그러나 'TDBGrid.OnCellClick'이 대신 작동해야합니다. 'OnColEner'도보실 수 있습니다. –

+0

여기에서 테스트 : OnCellClick (이름에서 알 수 있듯이)은 셀 클릭에 대해서만 실행되므로 절반은 필요합니다. 다중 선택을 해제 할 수 있습니다. 그러나 나는 그들이 시궁창을 클릭하는지 탐지 할 방법이 필요하므로, 조사 할 수 있습니다. 난 그들이 단순히 0 열의 왼쪽 경계를 클릭하는지 알 필요가 있습니다. – Tom

+0

OnCellClick이 작동하지 않습니다. 그것은 시궁창에 발사되지 않는다. OnMouseDown은 작동하지만 타이틀 행 (시궁랑 포함)에서만 실행되는 것처럼 보입니다. 클릭 한 실제 셀을 검색하려면 몇 가지 작업을 수행해야합니다. 윈도우즈의 다른 모든 응용 프로그램과 마찬가지로'Ctrl + Click'과'Shift + Click' - 다중 선택을위한 표준 키를 사용하는 편이 낫다고 생각합니다. :) –

답변

2

OnMouseDown은 어렵습니다. 당신이 이벤트에 XY 매개 변수를 통해 좌표를 얻고, 그것에 TDBGrid를 타입 캐스팅하여 행과 열을 변환 조상 TCustomGrid의 수 그러나

var 
    Coord: TGridCoord; 
begin 
    Coord := TCustomGrid(DBGrid1).MouseCoord(X, Y); 
    if Coord.X = 0 then 
    // We're in the "gutter" 
end; 

, 그것은 TDBGrid에 대한 OnMouseDown 만 불을 보인다 머리글 행을 클릭합니다.

OnCellClick은 가능한 대안처럼 보이지만 실제 셀 (거터와 머리글 행 제외)에서만 실행되므로 작동하지 않습니다. 어느 쪽을 원할 때도 발사되지 않으므로 OnColEnter도 마찬가지입니다. 당신의 최선의 선택은 다중 선택하지 윈도우의 다른 모든 응용 프로그램처럼, 당신의 복수 선택을 마우스 왼쪽 버튼으로 표준 Ctrl 키Shift 키를 수정을 사용하는 것처럼

는 것 같습니다.

관련 문제