我有外部对象实例,我希望“手动”检查组件的属性。我知道组件流以及如何将输出转换为文本格式,但问题是- TCustomActionList (我知道我的实例是TActionManager)不会流它的操作。有什么办法让它这样做吗?
UPD:现在通过创建TDataModule (作为容器/所有者)、迭代遍历操作、创建TAction实例和执行赋值来实现这一点。解决方案仍然是不关心TAction后代的问题。
发布于 2011-06-20 14:29:28
简单的例子,不会做任何棘手的事情。
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;https://stackoverflow.com/questions/6412667
复制相似问题