如何通过鼠标的坐标,取得此坐标下对应的StringGrid下的某一行!或是Cells啊?鼠标并没有按下任何键,只是移到某行的上方,要实现的是取得这一行的ARow 出来!

解决方案 »

  1.   

    A、通过TStringGrid的Selection可以获得TGridRect对象
      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
      

  2.   

    又学一些,感谢 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;
      

  3.   

    你们的想法和我的一样,我己经搞定,但是还是感谢两们的回答!谢谢!
    我们一起交流!下面是我的原码:
    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;