【发布时间】:2013-05-16 04:18:29
【问题描述】:
我正在编写一个从 TListView 派生的组件,我想知道使用该组件的开发人员何时添加一列以便我做出反应。如何检测何时添加了新列?有活动吗?
【问题讨论】:
-
对此感到抱歉...现在由 RobKennedy 编辑。谢谢。
我正在编写一个从 TListView 派生的组件,我想知道使用该组件的开发人员何时添加一列以便我做出反应。如何检测何时添加了新列?有活动吗?
【问题讨论】:
没有这样的事件,但是由于您是组件编写者,因此无论如何您都不能参加事件。事件适用于使用您的组件的开发人员。
通过发送控制lvm_InsertColumn 消息来添加列。在后代控件中覆盖该消息处理程序:
procedure LVMInsertColumn(var Msg: TMessage); message lvm_InsertColumn;
实现它以调用继承的处理程序,然后做任何你想做的事情。
procedure TListViewDescendant.LVMInsertColumn(var Msg: TMessage);
begin
inherited;
// TODO: custom handling
end;
【讨论】:
LVM_INSERTCOLUMN消息,然后更新列顺序,设置列数据等等。当UpdateColumns 完成执行时,您确实想看看,但是TListView 的设计不适合@user 尝试做的事情。
Delphi TListView 控件不提供此类事件,并且底层 Windows 控件不提供通知。原因是您的程序员负责添加列。只能通过在 Delphi 中调用 Columns.Add 或向底层窗口发送 LVM_INSERTCOLUMN 消息来添加列。
因此,您负责添加列,大概是通过调用Columns.Add 来完成的。通过调用Columns.Add 的方法路由所有添加列的代码,并在该点添加任何特殊处理。
【讨论】: