首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TCustomActionList后代的内容转储为人类可读的形式

将TCustomActionList后代的内容转储为人类可读的形式
EN

Stack Overflow用户
提问于 2011-06-20 14:20:00
回答 1查看 151关注 0票数 2

我有外部对象实例,我希望“手动”检查组件的属性。我知道组件流以及如何将输出转换为文本格式,但问题是- TCustomActionList (我知道我的实例是TActionManager)不会流它的操作。有什么办法让它这样做吗?

UPD:现在通过创建TDataModule (作为容器/所有者)、迭代遍历操作、创建TAction实例和执行赋值来实现这一点。解决方案仍然是不关心TAction后代的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-20 14:29:28

简单的例子,不会做任何棘手的事情。

代码语言:javascript
复制
function  TMyThing.SaveComponent(a:TComponent):String;
var
  Stream2: TStringStream;
  Stream1: TMemoryStream;
begin
  Stream1 := TMemoryStream.Create;
  Stream2 := TStringStream.Create;
  try
    Stream1.WriteComponent(a);
    Stream1.position := 0;
    ObjectBinaryToText(Stream1, Stream2);
    result := Stream2.DataString;
  finally
    Stream1.Free;
    Stream2.Free;
  end;
end;

procedure TMyThing.Dump;
var
 n:Integer;
 a:TContainedAction;
 s:String;
begin
  for n := 0 to ActionManager1.ActionCount-1 do begin
      a := ActionManager1.Actions[n];
      s := '----- '+a.Category+' '+a.Name+' '+a.ClassName+':';
      // crude manual way
      if a is TAction then begin
          s := s+ ' '+TAction(a).Caption;
          s := s+ ' '+TAction(a).Hint;

      end;
      // RTTI stream in DFM text format
      s := s+ SaveComponent(a);
      Memo1.Lines.Add(s);
  end;
end;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6412667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档