如何实现鼠标在stringgrid上移动时,当鼠标移动到某一个单元格上时(不按鼠标键),这个单元格就得到焦点, 请问如何实现???

解决方案 »

  1.   

    bt的要求procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      var T:Tstringgrid;
          i,j:integer;
    begin
        t:=Tstringgrid(dbgrid1);
        for i:=0 to t.ColCount-1 do
          for j:=0 to t.RowCount-1 do
          begin
             if (t.CellRect(i,j).Left<x) and  (t.CellRect(i,j).Right>x)
             and (t.CellRect(i,j).Top<y)
             and (t.CellRect(i,j).Bottom>y)
             then
             begin
               t.Col:=i;
               t.Row:=j;
            end;
        end;
    end;不过你的dbgrid最好不要滚动,数量尽量少
      

  2.   

    private
        fCol, fRow : Integer;//定义两个全局变量记录位置
    //给变量初始化
    procedure TForm1.StringGrid1Enter(Sender: TObject); 
    begin
      fCol := StringGrid1.Col;
      fRow := StringGrid1.Row;
    end;//判断内容是否合法
    procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean); 
    begin
      CanSelect := True;
      try
        if ((fCol = 3) and (ACol <> 3)) or
           ((ARow <> fRow) and (ACol = fCol) and (ACol = 3)) then
          if StringGrid1.Cells[fCol, fRow] <> '' then
            if StrToInt(StringGrid1.Cells[fCol, fRow]) > 1 then//判断单元格内容是否合法
            begin
              ShowMessage('Error');
              CanSelect := False;
              Exit;
            end;
      except
        CanSelect := False;
        Exit;
      end;  fCol := ACol;
      fRow := ARow;
    end;
    这段代码的意思是:
    如果单元格内容不合法的话,当用鼠标选择别的单元格时,能自动让刚才的单元格获得焦点
      

  3.   

    jinjazz(三个小时上下班) 你的程序有很多问题????