2016-08-25 7 views
1

TDBGrid의 일부 셀에서 마우스 클릭을 시뮬레이션하는 방법은 무엇입니까?TDBGrid의 셀에 대한 마우스 클릭 시뮬레이션

+1

@RBA : OP의 특정 지점에 대답하지 않는 것 같습니까? – MartynA

+0

왜 셀을 클릭하여 시뮬레이션해야합니까? 수행 할 행과 열을 알고 있다면 코드를 작성하여 수행하십시오. 그런 다음 셀을 실제로 클릭 할 때 같은 일이 발생하게하려면 OnCellClick 핸들러에서 해당 코드를 호출하면됩니다. 아니면 어떻게하는지 확신 할 수 없습니까? – MartynA

+0

@MartynA 때로는 레코드를 제거하려고 할 때 문제가 발생합니다. 그러나 현재 행의 일부 셀을 선택하면 제거가 수행됩니다! .. – userPro

답변

2

업데이트 :

이 코드는 당신이 원하는 것 무엇을 수행해야합니다

type 
    TMyDBGrid = class(TDBGrid); 

function TForm1.GetCellRect(ACol, ARow : Integer) : TRect; 
begin 
    Result := TmyDBGrid(DBGrid1).CellRect(ACol, ARow); 
end; 

procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: 
    TShiftState; X, Y: Integer); 
var 
    Coords : TGridCoord;  
begin 
    Coords := DBGrid1.MouseCoord(X, Y); 
    Caption := Format('Col: %d, Row: %d', [Coords.X, Coords.Y]); 
end; 

procedure TForm1.SimulateClick(ACol, ARow : Integer); 
type 
    TCoords = packed record 
    XPos : SmallInt; 
    YPos : SmallInt; 
    end; 
var 
    ARect : TRect; 
    Coords : TCoords; 
begin 
    ARect := GetCellRect(ACol, ARow); 
    Coords.XPos := ARect.Left; 
    Coords.YPos := ARect.Top; 
    DBGrid1.Perform(WM_LButtonUp, 0, Integer(Coords)); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    SimulateClick(StrToInt(edX.Text), StrToInt(edY.Text)); 
end; 

을 TDBGrid의 MouseCoord 함수는 열 번호로 좌표 (X, Y)의 한 쌍의 변환 (TGridCoord .X) 및 행 번호 ((TGridCoord.Y)

OnMouseUp 이벤트는 X & Y 입력 자료에 DBGrid1.MouseCoord를 호출 한 결과를 표시합니다 ents.

SimulateClick은 그리드 셀의 클릭을 시뮬레이션합니다. GetCellRect를 사용하여 지정된 셀의 최상위 요소의 좌표 (DBGrid에서)를 가져온 다음 DBGrid에서 Perform (WM_LButtonUp, ...)를 호출하고 LParam 인수에 좌표를 전달합니다.

마지막으로 Button1Click은 한 쌍의 TEd에서 Col 및 Row 값을 사용하여 SimulateClick을 호출합니다. 이로 인해 OnMouseUp 이벤트가 발생하고 Col 및 Row 번호가 표시되므로 해당 셀을 마우스로 클릭 할 때와 동일한 효과를 얻을 수 있습니다.

+0

고마워요 !! – userPro

+0

'UP'전에 DBGrid1.Perform (WM_LButtonDown, 0, Integer (Coords));를 사용하면 필요한 부분을 얻습니다. _Coords_가있는 셀이 선택되고 '집중'됩니다 .. thx! – userPro

+0

@userPro : 다행스럽게 생각해 냈습니다. 실제로, 나는 당신의 q에 기록 삭제에 관하여 가고, 우리가 그것을 해결할 수 있는지보기를 원한다. 나는 q에 관한 몇 가지 제안/질문과 함께 나의 대답에 당신을 게시 할 것이다. – MartynA

관련 문제