일반 DBGrid의 내용을 마우스로 누르지 않고 마우스 포인터위치로 Cell 이동하기 및 값 가져오기 입니다.

델마당에 팁으로 올린 내용인데.
제목 그대로 입니다.
일반 DBGrid의 내용을 마우스로 누르지 않고 마우스 포인터위치로 Cell 이동하기 및 값 가져오기 입니다.

 

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  DBGrid : TDBGrid;
  gc : TGridCoord;
  iStartX, iStartY : Integer;

  Function ColumnName( X, Y : Integer ) : String ;
  begin
    result := '';
    gc := TStringGrid(DBGrid).MouseCoord(x,y);
    if dgIndiCator in DBGrid.Options Then
      iStartX := 0
    else
      iStartX := -1;

    if dgTitles in DBGrid.Options Then
      iStartY := 0
    else
      iStartY := -1;

    if ( gc.X > iStartX ) and ( gc.Y > iStartY ) then
      Result := DBGrid.Columns[ gc.X - (1 + iStartX ) ].DisplayName;
  end;

  procedure SetColumn2MousePos;
  var
    i : Integer;
    iMoveRecordY : Integer;
  begin
    DBGrid.SelectedIndex := gc.X - (1 + iStartX );
    iMoveRecordY := gc.Y - TStringGrid( DBGrid ).Row;
    If iMoveRecordY > 0 Then
      for i := 1 to iMoveRecordY do DBGrid.DataSource.DataSet.Next
    else If iMoveRecordY < 0 Then
      for i := iMoveRecordY to -1 do DBGrid.DataSource.DataSet.Prior;
  end;
begin
  DBGrid := TDBGrid( Sender );
  If ColumnName( X, Y ) <> '' Then
  begin
    DBGrid.Cursor := CrHandPoint;
    SetColumn2MousePos;
  end
  else
    DBGrid.Cursor := crDefault;

end;

 

Author: yyjksw