【问题标题】:How do i detect new columns added to a list-view control?如何检测添加到列表视图控件的新列?
【发布时间】:2013-05-16 04:18:29
【问题描述】:

我正在编写一个从 TListView 派生的组件,我想知道使用该组件的开发人员何时添加一列以便我做出反应。如何检测何时添加了新列?有活动吗?

【问题讨论】:

  • 对此感到抱歉...现在由 RobKennedy 编辑。谢谢。

标签: delphi events listview


【解决方案1】:

没有这样的事件,但是由于您是组件编写者,因此无论如何您都不能参加事件。事件适用于使用您的组件的开发人员。

通过发送控制lvm_InsertColumn 消息来添加列。在后代控件中覆盖该消息处理程序:

procedure LVMInsertColumn(var Msg: TMessage); message lvm_InsertColumn;

实现它以调用继承的处理程序,然后做任何你想做的事情。

procedure TListViewDescendant.LVMInsertColumn(var Msg: TMessage);
begin
  inherited;
  // TODO: custom handling
end;

【讨论】:

  • 将被称为 columncount + 1 次。如果 MSG.WParam + 1 = Columns.Count then // TODO: custom handling 可以减少到两个调用
  • 这种方式的问题是发送LVM_INSERTCOLUMN消息,然后更新列顺序,设置列数据等等。当UpdateColumns 完成执行时,您确实想看看,但是TListView 的设计不适合@user 尝试做的事情。
  • @user2025830 请记住,这仅适用于列插入。它不适用于列的删除、修改或重新排序。
【解决方案2】:

Delphi TListView 控件不提供此类事件,并且底层 Windows 控件不提供通知。原因是您的程序员负责添加列。只能通过在 Delphi 中调用 Columns.Add 或向底层窗口发送 LVM_INSERTCOLUMN 消息来添加列。

因此,您负责添加列,大概是通过调用Columns.Add 来完成的。通过调用Columns.Add 的方法路由所有添加列的代码,并在该点添加任何特殊处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多