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