2009-09-10 79 views
1

当尝试一个没有文档的新组件时,我需要通过它的方法,属性和事件来试图找出它可以做什么。通过IDE的Object Inspector执行此操作有点繁琐。获取对象的方法,属性和事件列表?

是否有一个实用程序以更易读的格式显示此列表?

谢谢。

回答

-1

RTTI ...

+0

我认为他正在设计时寻找信息。 – 2009-09-10 17:01:54

+0

@Mason Wheeler ......嗯......你的意思是简单地猜测一个组件在做什么? – smok1 2009-09-10 17:08:29

+0

看起来他正在寻找像Object Inspector这样的东西,但是“更具可读性” – 2009-09-10 17:43:39

0

看一下将用于C++ Builder的支持所产生的.HPP。它类似于德尔福单元的接口部分。

+0

(当然,如果你有源代码,这是没有意义的,从你的问题出发,我认为你不需要) – 2009-09-11 08:25:36

3

当我想知道什么是可以做的,我阅读源代码。类声明将包含所有方法和属性的简洁列表,除非有很多继承。定义会告诉你想要的方法。

另一件事是声明一个你感兴趣的类型的变量,输入它的名字和句点,然后按Ctrl +空格来让Class Completion显示你能做的所有事情。

+0

+1。我一直倾向于UTSL方法。 – 2009-09-10 19:04:22

1

您可以使用GExperts附带的类浏览器。
我还建议使用IDE或ModelMaker构建模型图。它有助于看到视觉关系。

+0

感谢您的提示,但是当打开类浏览器时,除了双击右窗格中的对象并将其发送到实例创建的行外,没有什么可以做的了。 我认为类浏览器会显示一个对象提供的方法,属性和事件列表。 – Gulbahar 2009-10-22 07:56:58

1

在奥比万克诺比不朽的语言 - “使用来源”。

阅读和理解组件(或任何东西)的源代码以理解它的功能和功能是没有替代的。

源代码是Lingua Franca的编程。

0

我刚使用代码完成。如果你无法弄清楚组件在属性和方法的名称上做了什么,那么它可能设计得很差,而且最好不要使用它。另外,既然你问了这个问题,我猜你没有来源。如果你不这样做,我再也不会使用这个组件。你只为自己储存麻烦。

2

正如其他人所说,使用来源。另外一个UML工具也会有所帮助。 但是,如果你不想使用它,你可以使用这个程序(你需要德尔福2010年这一点,并且一定要RTTI添加到您的“用途”条款):

procedure DumpProps(aObject: TObject; aList: TStringList); 
var 
    RttiContext: TRttiContext; 
    RttiType: TRttiType; 
    I: Integer; 
    n: integer; 
    props: TArray<TRttiProperty>; 

begin 
    aList.Clear; //it must be <> nil 
    RttiType := RttiContext.GetType(aObject.ClassType); 
    props:=RttiType.GetProperties; 
    with aList do 
    begin 
     Append(''); 
     Append('=========='); 
     Append('Begin Dump'); 
     Append('----------'); 
     for I := Low(props) to High(props) do 
     begin 
     try 
      Append(props[i].Name+': '); //odd construction to see if the Getter blows 
      n:=Count-1; 
      Strings[n]:=Strings[n]+props[i].GetValue(aObject).AsString; 
     except 
      on E: Exception do 
      Strings[n]:=Strings[n]+' >>> ERROR! <<< '+E.Message; 
     end; 
     end; 
    end; 
end; 

以上即可在运行时使用,或者如果您构建菜单向导,则可以在设计时收集信息。

HTH