我需要对TTreeViewItem的扩展/折叠用户操作做出反应。但似乎Firemonkey的TTreeView / TTreeViewItem缺少这些事件。所有可用的方法TTreeViewItem都是私有的,并不是虚拟的,所以我无法挂钩。 我尝试了MokeyStyler's blog中描述的解决方案,但至少在Delphi XE7中它有奇怪的副作用:
我正在使用Delphi XE7
有什么建议吗? :)
答案 0 :(得分:2)
我错过了在XE6及更高版本中有SetIsExpanded方法的事实,这是虚拟的。所以我的解决方案有点微不足道:
TTreeViewItem = class(FMX.TreeView.TTreeViewItem)
private
FOnChangeExpanded,
FOnChangeCollapsed: TNotifyEvent;
protected
procedure SetIsExpanded(const Value: Boolean); override;
published
property OnChangeExpanded: TNotifyEvent read FOnChangeExpanded write FOnChangeExpanded;
property OnChangeCollapsed: TNotifyEvent read FOnChangeCollapsed write FOnChangeCollapsed;
end;
...
procedure TTreeViewItem.SetIsExpanded(const Value: Boolean);
var
LWasExpanded: boolean;
begin
LWasExpanded := IsExpanded;
inherited;
if (IsExpanded) AND (LWasExpanded = false) then
if Assigned(OnChangeExpanded) then
OnChangeExpanded(Self)
else
else
if Assigned(OnChangeCollapsed) then
OnChangeCollapsed(Self);
end;
就是这样:))
I posted a QC for enhancement,因为我认为这缺乏基本功能。