我这里有一个显示时时刷新的信息的StringGrid
每行显示一条,这样就可以把最新的到的信息及时的显示出来。但是怎么才能让它自动滚动呢?
好象PostMessage(StringGrid1.handle,.....
可以。
可是我不会写.请帮忙...
另外.StringGrid好象不能在上面插入行,只能通过编写程序,先在下面增加一行.然后把每行顺序向下移动,然后再显示上面的行...能不能直接通过一个简单Insert操作,使新的行在上面插入,而不是在下面。
因为我想让最新的信息显示在上面....而不是最下面...

解决方案 »

  1.   

    首先使用SetScrollInfo来设定Scroll的信息,
    其次调用PostMessage(StringGrid1.handle, WM_SCROLL, 0, 0)
    如:
    横向:if SetScrollRange(DBCtrlGrid1.Handle,SB_HORZ, 1,10, TRUE) then
        SendMessage(DBCtrlGrid1.Handle,WM_HSCROLL,0,0)
    直向:if SetScrollRange(DBCtrlGrid1.Handle,SB_VERT, 1,10, TRUE) then 
      SendMessage(DBCtrlGrid1.Handle,WM_VSCROLL,0,0)
      

  2.   

    //try
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      vMsg: TWMHScroll;
    begin
      vMsg.ScrollCode := SB_LINEDOWN;
      vMsg.Pos := 1;
      SendMessage(StringGrid1.Handle, WM_VSCROLL, TMessage(vMsg).WParam, TMessage(vMsg).LParam);
    end;
      

  3.   

    //try
    type
      TStringGridEx = class(TStringGrid)
      protected
        procedure RowMoved(FromIndex, ToIndex: Longint); override;
      end;{ TStringGridEx }procedure TStringGridEx.RowMoved(FromIndex, ToIndex: Integer);
    begin
      inherited;
    end;procedure TFormWin.Button1Click(Sender: TObject);
    begin
      StringGrid1.RowCount := StringGrid1.RowCount + 1;
      StringGrid1.Cells[0, StringGrid1.RowCount - 1] := IntToStr(StringGrid1.RowCount);
      TStringGridEx(StringGrid1).RowMoved(StringGrid1.RowCount - 1, 1);
    end;
      

  4.   

    to ChinaOk: 你测试过没有?~~
    //看VCL代码
    procedure TSparseList.Move(CurIndex, NewIndex: Integer);
    var
      Item: Pointer;
    begin
      if CurIndex <> NewIndex then
      begin
        Item := Get(CurIndex);
        Delete(CurIndex); //删除当前行,也就是最后一行~~
        Insert(NewIndex, Item); //这不就插了?~~
      end;
    end;