只能截消息,没有事件。
当发生改变时,ListView会向其父窗口发通知消息:WM_Notify,在LParam参数中会带有一个TNMHdr记录的指针,如果其code值为LVN_ITEMCHANGED。
将LParam转换为TNMListView记录型的指针,检查其uOldState和uNewState的高四位值,如果不相等,则表示CheckBox改变了。关于LVN_ITEMCHANGED请查阅MSDN。在Delphi中截获消息的一个简单办法是声明一个下列格式的方法:
procedure MessageHandler(var msg: TMessage);
然后在FormCreate或FormShow中把控制的WindowProc属性替换为它,记住先找个变量保存原来的值,以便执行默认的操作和恢复。源程序示范如下:procedure TForm1.WMNotify(var msg: TMessage);
var
iOldState, iNewState: Integer;
begin
FOldHandler(msg);
if (msg.msg <> WM_Notify) or (csLoading in ComponentState) then
Exit; with TWMNotify(msg) do
begin
if NMHdr^.code = LVN_ITEMCHANGED then
with PNMListView(NMHdr)^ do
begin
iOldState := uOldState and $F000;
iNewState := uNewState and $F000;
if (iOldState > 0) and (iOldState <> iNewState) then
begin
// 这里加入你的处理
end;
end;
end;
end;
当发生改变时,ListView会向其父窗口发通知消息:WM_Notify,在LParam参数中会带有一个TNMHdr记录的指针,如果其code值为LVN_ITEMCHANGED。
将LParam转换为TNMListView记录型的指针,检查其uOldState和uNewState的高四位值,如果不相等,则表示CheckBox改变了。关于LVN_ITEMCHANGED请查阅MSDN。在Delphi中截获消息的一个简单办法是声明一个下列格式的方法:
procedure MessageHandler(var msg: TMessage);
然后在FormCreate或FormShow中把控制的WindowProc属性替换为它,记住先找个变量保存原来的值,以便执行默认的操作和恢复。源程序示范如下:procedure TForm1.WMNotify(var msg: TMessage);
var
iOldState, iNewState: Integer;
begin
FOldHandler(msg);
if (msg.msg <> WM_Notify) or (csLoading in ComponentState) then
Exit; with TWMNotify(msg) do
begin
if NMHdr^.code = LVN_ITEMCHANGED then
with PNMListView(NMHdr)^ do
begin
iOldState := uOldState and $F000;
iNewState := uNewState and $F000;
if (iOldState > 0) and (iOldState <> iNewState) then
begin
// 这里加入你的处理
end;
end;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货