B、通过StringGrid1.MouseToCell()函数获得 直接获得当前鼠标位置所在单元格。 示例 procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var iCol,iRow:integer; begin StringGrid1.MouseToCell(x,y,icol,irow); //...... begin
又学一些,感谢 ymxxm(ymxxm);我补了些代码: procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i, j: Integer; begin StringGrid1.MouseToCell(X, Y, i, j); if (i >= 0) and (j >= 0) then {若移到没有的地方都是-1} Edit1.Text := StringGrid1.Cells[i, j]; end;
TGRIDRECT成员 Left, Top, Right, Bottom分别表示左上右下四个坐标。
B、通过StringGrid1.MouseToCell()函数获得
直接获得当前鼠标位置所在单元格。
示例
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
iCol,iRow:integer;
begin
StringGrid1.MouseToCell(x,y,icol,irow);
//......
begin
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i, j: Integer;
begin
StringGrid1.MouseToCell(X, Y, i, j);
if (i >= 0) and (j >= 0) then {若移到没有的地方都是-1}
Edit1.Text := StringGrid1.Cells[i, j];
end;
我们一起交流!下面是我的原码:
procedure TForm_SetUser.StringGrid1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
Arow,Acol:integer;
anchor_id :integer;
begin
inherited;
TStringGrid( Sender ).ShowHint := false;
StringGrid1.MouseToCell(x,y,Acol,Arow);
if ( ACol = 0 ) and ( ARow > 1 ) then //第0列是标题,第0列是ID,第0,1行也是标题,
begin
anchor_id := StrToInt( Trim( TStringGrid( Sender ).Cells[2,ARow] ) );
AdoQuery_task.Locate('id',anchor_id,[loCaseInsensitive]);
TStringGrid(Sender).Hint :='姓 名'+AdoQuery_task.fieldbyname('name').AsString+#10+
'部 门:'+ AdoQuery_task.fieldbyname('DEPARTMENT').AsString+#10+
'职 务:'+ AdoQuery_task.fieldbyname('DUTY').AsString+#10+
'施工等级:'+ AdoQuery_task.fieldbyname('RANK').AsString;
TStringGrid( Sender ).ShowHint := true;
end;
end;