Tstringgrid控件中,当鼠标移到某一Cell[i,j],能不能显示showhint,每一Cell[],显示的内容不一样

解决方案 »

  1.   

    实现你的要求是完全可以的,不过你必须添加自己的代码了,设属性是不可能的!
    当鼠标移动到stringgrid上的时候,你判断行列,改变你的hint就可以了
      

  2.   

    StringGrid1的ShowHint属性设置为True;
    StringGrid1.Hint:=StringGrid1.Cells[StringGrid1.row,StringGrid1.col];
      

  3.   

    怎么计算出鼠标所在的行和列啊,MouseMove事件中,在TstringGrid中有几列的宽度我设为-1的
      

  4.   

    你可以先定义封装了hint信息和其他必要信息的类,tstringgrid的objects[i,j]可以用来存储这些信息。
      THintInfor=class
        public:
          constructor Create(hint:string);
          Hint:string;
      end;
      TForm1.Create(AOwner);
      var
      i,j:integer;
      begin
        for i:=0 to tstringgrid1.rowcount-1 do
          for j:=0 to tstringgrid1.colcount-1 do
             tstringgrid1.objects[i,j]:=thintinfor.create('Row:'+inttostr(i)+'Col:'+inttostr(j));
      end;
      tform1.stringgrid1mousemover(X,Y:integer);
    var
      temp:THintInfor;
    begin
      temp:=Tstringgrid1.Objects[tsringgrid1.mousetocell(x,y).x,tsringgrid1.mousetocell(x,y).y];
      if assigned(temp) then stringgrid.hint:=temp.hint;
    end;
    最后别忘了在程序退出的时候释放全部的thintinfor.上面的代码是我随手写的,估计有一些小错,见谅。
      

  5.   

    计算鼠标所在的行列可以用“OnMouseMove”:1、在TStringGrid所在的Form中定义:
       保存当前鼠标位置的变量MouseX,MouseY:Integer;
       当前鼠标选中的行和列:AtRow,AtCol: Integer;2、设置TStringGrid的OnMouseMove处理:procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    Begin
      MouseX:=X;
      MouseY:=Y;
    End;3、设置TStringGrid的OnClick处理(或OnMouseDown、OnMouseUp,根据需要):procedure TForm1.StringGrid1Click(Sender: TObject);
    begin
      StringGrid1.MouseToCell(MouseX,MouseY,AtRow,AtCol);
      {AtRow,AtCo就是选中的Cell}
    end;
      

  6.   

    procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    var
      ARow,ACol:Intger;
    begin
      StringGrid1.MouseToCell(X,Y,ARow,ACol);
      StringGrid1.Hint:=HintString[ARow,ACol];
    end;