델마당에 팁으로 올린 내용인데.
제목 그대로 입니다.
일반 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;

최신 댓글