dxdbgrid的列没有与水平滚动条同步移动的有关问题

dxdbgrid的列没有与水平滚动条同步移动的问题
二个dxdbgird,列 相同,
使用api函数getscrollpos和setscrollpos,实现了移动grid的水平滚动条时,grid2的水平滚动条也同步移动
但问题是,grid2的列没有与滚动条同步移动,该如何解决呢?
------解决方案--------------------

type
  WParameter=Word;
  LParameter=LongInt;
var
  OldWindowProc:Pointer;
  function NewWindowProc(WindowHandle:hWnd;TheMessage:WParameter;ParamW:WParameter;ParamL:LParameter):LongInt stdcall;
var
  intScrollBarPos,intScrollBarPos2,intScrollBarPos2_old:integer;
  i:Integer;
begin
  if TheMessage=WM_HSCROLL then
  begin
    intScrollBarPos := GetScrollPos(form1.dxdbgrd_1.Handle,SB_HORZ);
    intScrollBarPos2:= GetScrollPos(form1.dxdbgrd_2.Handle,SB_HORZ);

    SetScrollPos(form1.dxdbgrd_2.Handle,SB_HORZ,intScrollBarPos,true);

    intScrollBarPos2_old:=0;
    if intScrollBarPos2<intScrollBarPos then
    begin
      while intScrollBarPos2<=intScrollBarPos-1  do
      begin
        sendMessage(form1.dxdbgrd_2.Handle,WM_hSCROLL,SB_LINERIGHT,1);
        intScrollBarPos:= GetScrollPos(form1.dxdbgrd_1.Handle,SB_HORZ);
        intScrollBarPos2:= GetScrollPos(form1.dxdbgrd_2.Handle,SB_HORZ);
        if intScrollBarPos2_old=intScrollBarPos2 then
        begin
          break;
        end
        else
        begin
          intScrollBarPos2_old:=intScrollBarPos2;
        end;
      end;
    end
    else if intScrollBarPos2>intScrollBarPos then
    begin
      while intScrollBarPos2>=intScrollBarPos+1  do
      begin
        sendMessage(form1.dxdbgrd_2.Handle,WM_hSCROLL,SB_LINEleft,1);
        intScrollBarPos:= GetScrollPos(form1.dxdbgrd_1.Handle,SB_HORZ);
        intScrollBarPos2:= GetScrollPos(form1.dxdbgrd_2.Handle,SB_HORZ);
        if intScrollBarPos2_old=intScrollBarPos2 then
        begin
          break;
        end
        else
        begin
          intScrollBarPos2_old:=intScrollBarPos2;
        end;
      end;
    end;
  end
  else if TheMessage=WM_VSCROLL then
  begin
    intScrollBarPos := GetScrollPos(form1.dxdbgrd_1.Handle,SB_VERT);
    intScrollBarPos2:= GetScrollPos(form1.dxdbgrd_2.Handle,SB_VERT);

    SetScrollPos(form1.dxdbgrd_2.Handle,SB_VERT,intScrollBarPos,true);

    intScrollBarPos2_old:=0;
    if intScrollBarPos2<intScrollBarPos then
    begin
      while intScrollBarPos2<=intScrollBarPos-1  do
      begin
        sendMessage(form1.dxdbgrd_2.Handle,WM_VSCROLL,SB_LINEDOWN ,1);
        intScrollBarPos:=  GetScrollPos(form1.dxdbgrd_1.Handle,SB_VERT);
        intScrollBarPos2:= GetScrollPos(form1.dxdbgrd_2.Handle,SB_VERT);
        if intScrollBarPos2_old=intScrollBarPos2 then
        begin
          break;
        end
        else
        begin
          intScrollBarPos2_old:=intScrollBarPos2;
        end;
      end;
    end
    else if intScrollBarPos2>intScrollBarPos then
    begin
      while intScrollBarPos2>=intScrollBarPos+1  do
      begin
        sendMessage(form1.dxdbgrd_2.Handle,WM_vSCROLL,SB_LINEUP,1);
        intScrollBarPos:= GetScrollPos(form1.dxdbgrd_1.Handle,SB_VERT);
        intScrollBarPos2:= GetScrollPos(form1.dxdbgrd_2.Handle,SB_VERT);