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