我在程序中用两个listview控件显示数据(数据已经实现对齐),要求拖动左边的listview的滚动条时,右边的listview的也随着滚动,即,左右要记录保持对齐。
怎样才能实现呢?
怎样才能实现呢?
解决方案 »
- 怎样用findwindowex找到QQ界面按钮呢?
- 串口打开,数据发不出去
- 修改注册表怎么过360提示
- 哪個代理我工作?????????
- 如何去掉intraweb的APPLICATION SERVER
- 我已经能够控制MU网络的进出数据,进行了初步的分析,需要帮忙!
- 请教高手QUICKREPORT自定义预览窗口的问题。
- 点击窗口上的小叉和用Close()关闭窗口有什么不同吗?
- 送分,前10位!
- 我用isapi编写的网页,在左下角提示“网页有错误”,这是为何?
- 今天仔细研究FlashGet,发现它好象是有自己的数据库驱动!各位大侠发表一下看法!
- 我要写一个语言翻译的程序 pascal to C ,收集好建议 100 分一个! 有经验的进来踢一脚!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls,CommCtrl;type
TForm3 = class(TForm)
ListView1: TListView;
ListView2: TListView;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
PLVEdWndProc, POldWndProc: Pointer;
procedure LVEdWndProc(var Msg: TMessage); public
{ Public declarations }
end;var
Form3: TForm3;
implementation{$R *.dfm}procedure TForm3.FormCreate(Sender: TObject);
begin
PLVEdWndProc := MakeObjectInstance(LVEdWndProc);
POldWndProc:= Pointer(SetWindowLong(listview1.Handle,GWL_WNDPROC, Integer(PLVEdWndProc)));
end;procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Assigned(PLVEdWndProc) then
begin
SetWindowLong(listview1.Handle,GWL_WNDPROC, Integer(POldWndProc));
FreeObjectInstance(PLVEdWndProc);
end;
end;
procedure TForm3.LVEdWndProc(var Msg: TMessage);
var
si: TScrollInfo;
begin
si.cbSize:=sizeof(si);
si.fMask:=SIF_ALL;
if (Msg.Msg = WM_VSCROLL) then
begin
if(Msg.WParamLo=SB_THUMBTRACK)or(Msg.WParamLo=SB_THUMBPOSITION) then
begin
repeat
GetScrollInfo(listview2.Handle,SB_VERT,si);
if(si.nPos<Msg.WParamHi) then
SendMessage(listview2.Handle,Msg.Msg,SB_LINEDOWN,Msg.LParam)
else if (si.nPos>Msg.WParamHi) then
SendMessage(listview2.Handle,Msg.Msg,SB_LINEUP,Msg.LParam);
until si.nPos=Msg.WParamHi;
end
else
SendMessage(listview2.Handle,Msg.Msg,Msg.WParam,Msg.LParam);
end;
Msg.Result := CallWindowProc(POldWndProc,listview1.Handle, Msg.Msg, Msg.WParam, Msg.LParam);
end;
end.