Browse Source

+ Initial check-in

michael 21 years ago
parent
commit
0819ba0411
1 changed files with 1507 additions and 0 deletions
  1. 1507 0
      docs/typinfo.xml

+ 1507 - 0
docs/typinfo.xml

@@ -0,0 +1,1507 @@
+<?xml version="1.0" encoding="ISO8859-1"?>
+<fpdoc-descriptions>
+<!--  
+
+   $Id$ 
+   This file is part of the FPC documentation. 
+   Copyright (C) 1997, by Michael Van Canneyt 
+ 
+   The FPC documentation is free text; you can redistribute it and/or 
+   modify it under the terms of the GNU Library General Public License as 
+   published by the Free Software Foundation; either version 2 of the 
+   License, or (at your option) any later version. 
+ 
+   The FPC Documentation is distributed in the hope that it will be useful, 
+   but WITHOUT ANY WARRANTY; without even the implied warranty of 
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+   Library General Public License for more details. 
+ 
+   You should have received a copy of the GNU Library General Public 
+   License along with the FPC documentation; see the file COPYING.LIB.  If not, 
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
+   Boston, MA 02111-1307, USA. 
+ -->
+<package name="rtl">
+<module name="typinfo">
+<short>The TYPINFO unit</short>
+<!-- \FPCexampledir{typinfex} -->
+<descr>
+<p>
+The <file>TypeInfo</file> unit contains many routines which can be used for
+the querying of the Run-Time Type Information (RTTI) which is generated
+by the compiler for classes that are compiled under the <var>{$M+}</var>
+switch. This information can be used to retrieve or set property values
+for published properties for totally unknown classes. In particular, it
+can be used to stream classes. The <var>TPersistent</var> class in the 
+<file>Classes</file> unit is compiled in the <var>{$M+}</var> state and serves
+as the base class for all classes that need to be streamed.
+</p>
+<p>
+The unit should be compatible to the Delphi 5 unit with the same name. 
+The only calls that are still missing are the Variant calls, since Free Pascal
+does not support the variant type yet.
+</p>
+<p>
+The examples in this chapter use a <file>rttiobj</file> file, which contains
+an object that has a published property of all supported types. It also
+contains some auxiliary routines and definitions.
+</p>
+</descr>
+
+<topic name="ExaminePropInfo">
+<short>Examining published property information</short>
+<descr>
+<p>
+Functions for retrieving or examining property information
+</p>
+<table>
+<th><td>Name</td><td>Description</td></th>
+<tr><td><link id="FindPropInfo"/></td><td>Getting property type information, With error checking.</td></tr>
+<tr><td><link id="GetPropInfo"/></td><td>Getting property type information, No error checking.</td></tr>
+<tr><td><link id="GetPropInfos"/></td><td>Find property information of a certain kind</td></tr>
+<tr><td><link id="GetObjectPropClass"/></td><td>Return the declared class of an object property </td></tr>
+<tr><td><link id="GetPropList"/></td><td>Get a list of all published properties</td></tr>
+<tr><td><link id="IsPublishedProp"/></td><td>Is a property published</td></tr>
+<tr><td><link id="IsStoredProp"/></td><td>Is a property stored</td></tr>
+<tr><td><link id="PropIsType"/></td><td>Is a property of a certain kind</td></tr>
+<tr><td><link id="PropType"/></td><td>Return the type of a property</td></tr>
+</table>
+</descr>
+</topic>
+
+<topic name="ManipulatePropValues">
+<short>Getting or setting property values</short>
+<descr>
+<p>
+Functions to set or set a property's value.
+</p>
+<table>
+<th><td>Name</td><td>Description</td></th>
+<tr><td><link id="GetEnumProp"/></td><td>Return the value of an enumerated type property</td></tr>
+<tr><td><link id="GetFloatProp"/></td><td>Return the value of a float property</td></tr>
+<tr><td><link id="GetInt64Prop"/></td><td>Return the value of an Int64 property</td></tr>
+<tr><td><link id="GetMethodProp"/></td><td>Return the value of a procedural type property</td></tr>
+<tr><td><link id="GetObjectProp"/></td><td>Return the value of an object property</td></tr>
+<tr><td><link id="GetOrdProp"/></td><td>Return the value of an ordinal type property</td></tr>
+<tr><td><link id="GetPropValue"/></td><td>Return the value of a property as a variant</td></tr>
+<tr><td><link id="GetSetProp"/></td><td>Return the value of a set property</td></tr>
+<tr><td><link id="GetStrProp"/></td><td>Return the value of a string property</td></tr>
+<tr><td><link id="GetVariantProp"/></td><td>Return the value of a variant property</td></tr>
+<tr><td><link id="SetEnumProp"/></td><td>Set the value of an enumerated type property</td></tr>
+<tr><td><link id="SetFloatProp"/></td><td>Set the value of a float property</td></tr>
+<tr><td><link id="SetInt64Prop"/></td><td>Set the value of an Int64 property</td></tr>
+<tr><td><link id="SetMethodProp"/></td><td>Set the value of a procedural type property</td></tr>
+<tr><td><link id="SetObjectProp"/></td><td>Set the value of an object property</td></tr>
+<tr><td><link id="SetOrdProp"/></td><td>Set the value of an ordinal type property</td></tr>
+<tr><td><link id="SetPropValue"/></td><td>Set the value of a property trhough a variant</td></tr>
+<tr><td><link id="SetSetProp"/></td><td>Set the value of a set property</td></tr>
+<tr><td><link id="SetStrProp"/></td><td>Set the value of a string property</td></tr>
+<tr><td><link id="SetVariantProp"/></td><td>Set the value of a variant property</td></tr>
+</table>
+</descr>
+</topic>
+
+<topic name="AuxiliaryTypinfo">
+<short>Auxiliary functions</short>
+<descr>
+<p>
+Other typinfo related functions.
+</p>
+<table>
+<th><td>Name</td><td>Description</td></th>
+<tr><td><link id="GetEnumName"/></td><td>Get an enumerated type element name</td></tr>
+<tr><td><link id="GetEnumValue"/></td><td>Get ordinal number of an enumerated tye, based on the name.</td></tr>
+<tr><td><link id="GetTypeData"/></td><td>Skip type name and return a pointer to the type data</td></tr>
+<tr><td><link id="SetToString"/></td><td>Convert a set to its string representation</td></tr>
+<tr><td><link id="StringToSet"/></td><td>Convert a string representation of a set to a set</td></tr>
+</table>
+</descr>
+</topic>
+
+
+<element name="BooleanIdents">
+<short>Names for boolean values</short>
+</element>
+
+<element name="DotSep">
+<short>Name separator character</short>
+</element>
+
+<element name="ptField">
+<short>Property acces directly from field</short>
+</element>
+
+<element name="ptStatic">
+<short>Property acces via static method</short>
+</element>
+
+<element name="ptVirtual">
+<short>Property acces via virtual method</short>
+</element>
+
+<element name="ptConst">
+<short>Constant used in acces method</short>
+</element>
+
+<element name="tkAny">
+<short>Any property type</short>
+</element>
+
+<element name="tkMethods">
+<short>Only method properties. (event handlers)</short>
+</element>
+
+<element name="tkProperties">
+<short>Real properties. (not methods)</short>
+</element>
+
+<element name="PShortString">
+<short>Pointer to shortstring</short>
+</element>
+
+<element name="PByte">
+<short>Pointer to byte</short>
+</element>
+
+<element name="PWord">
+<short>Pointer to Word</short>
+</element>
+
+<element name="PLongint">
+<short>Pointer to longint</short>
+</element>
+
+<element name="PBoolean">
+<short>Pointer to boolean</short>
+</element>
+
+<element name="PSingle">
+<short>Pointer to single</short>
+</element>
+
+<element name="PDouble">
+<short>Pointer to double</short>
+</element>
+
+<element name="PExtended">
+<short>Pointer to extended</short>
+</element>
+
+<element name="PComp">
+<short>Pointer to comp</short>
+</element>
+
+<element name="PFixed16">
+<short>Pointer to Fixed16</short>
+</element>
+
+<element name="Variant">
+<short>Dummy type. Do not use.</short>
+</element>
+
+<element name="TTypeKind">
+<short>Type of a property.</short>
+</element>
+
+<element name="tkString">
+<short>Alias for the <var>tsSString</var> enumeration value</short>
+</element>
+
+
+<element name="TTypeKind.tkUnknown">
+<short>Unknown property type.</short>
+</element>
+
+<element name="TTypeKind.tkInteger">
+<short>Integer property.</short>
+</element>
+
+<element name="TTypeKind.tkChar">
+<short>Char property.</short>
+</element>
+
+<element name="TTypeKind.tkEnumeration">
+<short>Enumeration type property.</short>
+</element>
+
+<element name="TTypeKind.tkFloat">
+<short>Float property.</short>
+</element>
+
+<element name="TTypeKind.tkSet">
+<short>Set property.</short>
+</element>
+
+<element name="TTypeKind.tkMethod">
+<short>Method property.</short>
+</element>
+
+<element name="TTypeKind.tkSString">
+<short>Shortstring property.</short>
+</element>
+
+<element name="TTypeKind.tkLString">
+<short>Longstring property.</short>
+</element>
+
+<element name="TTypeKind.tkAString">
+<short>Ansistring property.</short>
+</element>
+
+<element name="TTypeKind.tkWString">
+<short>Widestring property.</short>
+</element>
+
+<element name="TTypeKind.tkVariant">
+<short>Variant property.</short>
+</element>
+
+<element name="TTypeKind.tkArray">
+<short>Array property.</short>
+</element>
+
+<element name="TTypeKind.tkRecord">
+<short>Record property.</short>
+</element>
+
+<element name="TTypeKind.tkInterface">
+<short>Interface property.</short>
+</element>
+
+<element name="TTypeKind.tkClass">
+<short>Class property.</short>
+</element>
+
+<element name="TTypeKind.tkObject">
+<short>Object property.</short>
+</element>
+
+<element name="TTypeKind.tkWChar">
+<short>Widechar property.</short>
+</element>
+
+<element name="TTypeKind.tkBool">
+<short>Boolean property.</short>
+</element>
+
+<element name="TTypeKind.tkInt64">
+<short>Int64 property.</short>
+</element>
+
+<element name="TTypeKind.tkQWord">
+<short>QWord property.</short>
+</element>
+
+<element name="TTypeKind.tkDynArray">
+<short>Dynamical array property.</short>
+</element>
+
+<element name="TTypeKind.tkInterfaceRaw">
+<short>Raw interface property.</short>
+</element>
+
+<element name="TTOrdType">
+<short>Size and sign of ordinal property type.</short>
+<descr>
+If the property is and ordinal type, then <var>TTOrdType</var> determines
+the size and sign of the ordinal type:
+</descr>
+</element>
+
+<element name="TTOrdType.otSByte">
+<short>Signed byte</short>
+</element>
+
+<element name="TTOrdType.otUByte">
+<short>Unsigned byte</short>
+</element>
+
+<element name="TTOrdType.otSWord">
+<short>Signed word</short>
+</element>
+
+<element name="TTOrdType.otUWord">
+<short>Unsigned word</short>
+</element>
+
+<element name="TTOrdType.otSLong">
+<short>Signed longint</short>
+</element>
+
+<element name="TTOrdType.otULong">
+<short>Unsigned longing (Cardinal)</short>
+</element>
+
+<element name="TFloatType">
+<short>The size of a float type.</short>
+</element>
+
+<element name="TFloatType.ftSingle">
+<short>Single-sized float</short>
+</element>
+
+<element name="TFloatType.ftDouble">
+<short>Double-sized float</short>
+</element>
+
+<element name="TFloatType.ftExtended">
+<short>Extended-size float</short>
+</element>
+
+<element name="TFloatType.ftComp">
+<short>Comp-type float</short>
+</element>
+
+<element name="TFloatType.ftCurr">
+<short>Currency-type float</short>
+</element>
+
+<element name="TFloatType.ftFixed16">
+<short>16-bit float type</short>
+</element>
+
+<element name="TFloatType.ftFixed32">
+<short>32-bit float type.</short>
+</element>
+
+<element name="TMethodKind">
+<short>Method type description</short>
+</element>
+
+<element name="TMethodKind.mkProcedure">
+<short>Procedure method.</short>
+</element>
+
+<element name="TMethodKind.mkFunction">
+<short>Function method</short>
+</element>
+
+<element name="TMethodKind.mkConstructor">
+<short>Class constructor</short>
+</element>
+
+<element name="TMethodKind.mkDestructor">
+<short>Class Desctructor</short>
+</element>
+
+<element name="TMethodKind.mkClassProcedure">
+<short>Class procedure</short>
+</element>
+
+<element name="TMethodKind.mkClassFunction">
+<short>Class function</short>
+</element>
+
+<element name="TParamFlags">
+<short>The kind of parameter for a method</short>
+</element>
+
+<element name="TParamFlags.pfVar">
+<short>Parameter passed by reference</short>
+</element>
+
+<element name="TParamFlags.pfConst">
+<short>Parameter passed as const (reference)</short>
+</element>
+
+<element name="TParamFlags.pfArray">
+<short>Array parameter</short>
+</element>
+
+<element name="TParamFlags.pfAddress">
+<short>Address is passed</short>
+</element>
+
+<element name="TParamFlags.pfReference">
+<short>Reference passed</short>
+</element>
+
+<element name="TParamFlags.pfOut">
+<short>Out (by reference)</short>
+</element>
+
+<element name="TIntfFlag">
+<short>Type of interface.</short>
+</element>
+
+<element name="TIntfFlags">
+<short>Set of <link id="TIntfFlag"/>.</short>
+</element>
+
+<element name="TIntfFlagsBase">
+<short>Set of <link id="TIntfFlag"/>.</short>
+</element>
+
+<element name="TIntfFlag.ifHasGuid">
+<short>Interface has GUID identifier</short>
+</element>
+
+<element name="TIntfFlag.ifDispInterface">
+<short>Interface is a dual dispatch interface</short>
+</element>
+
+<element name="TIntfFlag.ifDispatch">
+<short>Interface is a dispatch interface</short>
+</element>
+
+<element name="TTypeKinds">
+<short>Set of <link id="TTypeKind"/> enumeration.</short>
+</element>
+
+<element id="TTypeInfo">
+<short>Type information record</short>
+<descr>
+<p>
+The <var>TypeInfo</var> function returns a pointer to a <var>TTypeInfo</var>
+record.
+</p>
+<p>
+Note that the Name field is stored with as much bytes as needed to store the name,
+it is not padded to 255 characters. 
+The type data immediatly follows the <var>TTypeInfo</var> record as a <link
+id="TTypeData"/> record.
+</p>
+</descr>
+</element>
+
+<element name="TTypeInfo.Name">
+<short>Type name</short>
+</element>
+
+<element name="TTypeInfo.Kind">
+<short>Type kind</short>
+</element>
+
+<element name="PTypeInfo">
+<short>Pointer to <link id="TTypeInfo"/> record</short>
+</element>
+<element name="PPTypeInfo">
+<short>Pointer to <link id="PTypeInfo"/> pointer</short>
+</element>
+
+<element name="PTypeData">
+<short>Pointer to <link id="TTypeData"/> record.</short>
+</element>
+
+<element name="TTypeData">
+<short>Class properties type data record.</short>
+<descr>
+<p>
+If the typeinfo kind is <var>tkClass</var>, then the property 
+information follows the <var>UnitName</var> string, as an array of <link
+id="TPropInfo"/> records.
+</p>
+</descr>
+</element>
+
+<element name="TPropData">
+<short>Property data record</short>
+<descr>
+The <var>TPropData</var> record is not used, but is provided for completeness and
+compatibility with Delphi.
+</descr>
+</element>
+
+<element name="PPropInfo">
+<short>Pointer to <link id="TPropInfo"/> record</short>
+</element>
+
+<element name="TPropInfo">
+<short>Record describing one published property of a class</short>
+<descr>
+<p>
+The <var>TPropInfo</var> record describes one published property of a class.
+The property information of a class are stored as an array of
+<var>TPropInfo</var> records.
+</p>
+<p>
+The <var>Name</var> field is stored not with 255 characters, but with just as many characters
+as required to store the name.
+</p>
+</descr>
+</element>
+
+<element name="TPropInfo.PropType">
+<short>Property type</short>
+</element>
+<element name="TPropInfo.GetProc">
+<short>Read handler</short>
+</element>
+<element name="TPropInfo.SetProc">
+<short>Write handler</short>
+</element>
+<element name="TPropInfo.StoredProc">
+<short>Procedure pointer for stored keyword.</short>
+</element>
+<element name="TPropInfo.Index">
+<short>Index for array properties</short>
+</element>
+<element name="TPropInfo.Default">
+<short>Default value</short>
+</element>
+<element name="TPropInfo.NameIndex">
+<short>Index for indexed properties</short>
+</element>
+<element name="TPropInfo.PropProcs">
+<short>Flags describing property procedures.</short>
+</element>
+<element name="TPropInfo.Name">
+<short>Property name</short>
+</element>
+
+<element name="TProcInfoProc">
+<short>Property info callback method</short>
+</element>
+
+<element name="TPropList">
+<short>Array of property information pointers</short>
+</element>
+
+<element name="PPropList">
+<short>Pointer to <link id="TPropList"/></short>
+</element>
+
+<element name="EPropertyError">
+<short>Exception raised in case of an error in one of the functions.</short>
+</element>
+
+<element name="FindPropInfo">
+<short>Return property information by property name.</short>
+<descr>
+<p>
+<var>FindPropInfo</var> examines the published property information of a class and
+returns a pointer to the property information for property <var>PropName</var>.
+The class to be examined can be specified in one of two ways:
+</p>
+<dl>
+<dt>AClass</dt><dd> a class pointer.</dd>
+<dt>Instance</dt><dd> an instance of the class to be investigated.</dd>
+</dl>
+<p>
+If the property does not exist, a <var>EPropertyError</var> exception will be
+raised. The <link id="GetPropInfo"/> function has the same function as the
+<var>FindPropInfo</var> function, but returns <var>Nil</var> if the property does not
+exist.
+</p>
+</descr>
+<errors>
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetPropInfo"/>
+<link id="GetPropList"/>
+<link id="GetPropInfos"/>
+</seealso>
+<example file="typinfex/ex14"/>
+</element>
+
+
+<element name="GetEnumName">
+<short>Return name of enumeration constant.</short>
+<descr>
+<p>
+<var>GetEnumName</var> scans the type information for the enumeration type
+described by <var>TypeInfo</var> and returns the name of the enumeration 
+constant for the element with ordinal value equal to <var>Value</var>.
+</p>
+<p>
+If <var>Value</var> is out of range, the first element of the enumeration type
+is returned. The result is lowercased, but this may change in the future.
+</p>
+<p>
+This can be used in combination with <var>GetOrdProp</var> to stream a property
+of an enumerated type.
+</p>
+</descr>
+<errors>
+No check is done to determine whether <var>TypeInfo</var> really points to the 
+type information for an enumerated type. 
+</errors>
+<seealso>
+<link id="GetOrdProp"/>
+<link id="GetEnumValue"/>
+</seealso>
+<example file="typinfex/ex9"/>
+</element>
+
+
+<element name="GetEnumProp">
+<short>Return the value of an enumeration type property.</short>
+<descr>
+<var>GetEnumProp</var> returns the value of an property of an enumerated type
+and returns the name of the enumerated value for the objetc <var>Instance</var>. 
+The property whose value must be returned can be specified by its property 
+info in <var>PropInfo</var> or by its name in <var>PropName</var>
+</descr>
+<errors>
+No check is done to determine whether <var>PropInfo</var> really points to the 
+property information for an enumerated type. 
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetEnumProp"/>
+<link id="GetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetInt64Prop"/>
+<link id="GetMethodProp"/>
+<link id="GetSetProp"/>
+<link id="GetObjectProp"/>
+<link id="GetEnumProp"/>
+</seealso>
+<example file="typinfex/ex2"/>
+</element>
+
+
+<element name="GetEnumValue">
+<short>Get ordinal value for enumerated type by name</short>
+<descr>
+<p>
+<var>GetEnumValue</var> scans the type information for the enumeration type
+described by <var>TypeInfo</var> and returns the ordinal value for the element
+in the enumerated type that has identifier <var>Name</var>. The identifier is
+searched in a case-insensitive manner.
+</p>
+<p>
+This can be used to set the value of enumerated properties from a stream. 
+</p>
+<p>
+For an example, see <link id="GetEnumName"/>.
+</p>
+</descr>
+<errors>
+If <var>Name</var> is not found in the list of enumerated values, then -1 is
+returned. No check is done whether <var>TypeInfo</var> points to the type information
+for an enumerated type. 
+</errors>
+<seealso>
+<link id="GetEnumName"/>
+<link id="SetOrdProp"/>
+</seealso>
+</element>
+
+
+<element name="GetFloatProp">
+<short>Return value of floating point property</short>
+<descr>
+<var>GetFloatProp</var> returns the value of the float property described by 
+<var>PropInfo</var> or with name <var>Propname</var> for the object <var>Instance</var>. 
+All float types are converted
+to extended.
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid float property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetFloatProp"/>
+<link id="GetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetInt64Prop"/>
+<link id="GetMethodProp"/>
+<link id="GetSetProp"/>
+<link id="GetObjectProp"/>
+<link id="GetEnumProp"/>
+</seealso>
+<example file="typinfex/ex4"/>
+</element>
+
+
+<element name="GetInt64Prop">
+<short>return value of an Int64 property</short>
+<descr>
+<remark>
+Publishing of Int64 properties is not yet supported by Free Pascal. This
+function is provided for Delphi compatibility only at the moment.
+</remark>
+<p>
+<var>GetInt64Prop</var> returns the value of the property of type
+<var>Int64</var> that is described by <var>PropInfo</var> or with name <var>Propname</var> 
+for the object <var>Instance</var>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid <var>Int64</var> property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception
+</errors>
+<seealso>
+<link id="SetInt64Prop"/>
+<link id="GetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetFloatProp"/>
+<link id="GetMethodProp"/>
+<link id="GetSetProp"/>
+<link id="GetObjectProp"/>
+<link id="GetEnumProp"/>
+</seealso>
+<example file="typinfex/ex15"/>
+</element>
+
+
+<element name="GetMethodProp">
+<short>Return value of a method property</short>
+<descr>
+<p>
+<var>GetMethodProp</var> returns the method the property described by
+<var>PropInfo</var> or with name <var>Propname</var> for object <var>Instance</var>.
+The return type <var>TMethod</var> is defined in the <file>SysUtils</file> unit as:
+</p>
+<code>
+TMethod = packed record
+  Code, Data: Pointer;
+end;                                                                         
+</code>
+<p>
+<var>Data</var> points to the instance of the class with the method <var>Code</var>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid method property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetMethodProp"/>
+<link id="GetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetFloatProp"/>
+<link id="GetInt64Prop"/>
+<link id="GetSetProp"/>
+<link id="GetObjectProp"/>
+<link id="GetEnumProp"/>
+</seealso>
+<example file="typinfex/ex6"/>
+</element>
+
+
+<element name="GetObjectProp">
+<short>Return value of an object-type property.</short>
+<descr>
+<p>
+<var>GetObjectProp</var> returns the object which the property described by
+<var>PropInfo</var> with name <var>Propname</var> points to for object <var>Instance</var>.
+</p>
+<p>
+If <var>MinClass</var> is specified, then if the object is not descendent of
+class <var>MinClass</var>, then <var>Nil</var> is returned.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid method property of <var>Instance</var>. 
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetMethodProp"/>
+<link id="GetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetFloatProp"/>
+<link id="GetInt64Prop"/>
+<link id="GetSetProp"/>
+<link id="GetObjectProp"/>
+<link id="GetEnumProp"/>
+</seealso>
+<example file="typinfex/ex5"/>
+</element>
+
+
+<element name="GetObjectPropClass">
+<short>Return class of property.</short>
+<descr>
+<p>
+<var>GetObjectPropClass</var> returns the declared class of the property with name 
+<var>PropName</var>. This may not be the actual class of the property value.
+</p>
+<p>
+For an example, see <link id="GetObjectProp"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetMethodProp"/>
+<link id="GetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetFloatProp"/>
+<link id="GetInt64Prop"/>
+</seealso>
+</element>
+
+
+<element name="GetOrdProp">
+<short>Get the value of an ordinal property</short>
+<descr>
+<p>
+<var>GetOrdProp</var> returns the value of the ordinal property described by
+<var>PropInfo</var> or with name <var>PropName</var> for the object <var>Instance</var>. 
+The value is returned as a longint, which should be typecasted to the 
+needed type.
+</p>
+<p>
+Ordinal properties that can be retrieved include:
+</p>
+<dl>
+<dt>Integers and subranges of integers</dt>
+<dd>The value of the integer will be returned.</dd>
+<dt>Enumerated types and subranges of enumerated types</dt>
+<dd>The ordinal value of the enumerated type will be returned.</dd>
+<dt>Sets</dt>
+<dd>If the base type of the set has less than 31 possible values.
+If a bit is set in the return value, then the corresponding element of the
+base ordinal class of the set type must be included in the set.
+</dd>
+</dl>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid ordinal property of <var>Instance</var>
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetOrdProp"/>
+<link id="GetStrProp"/>
+<link id="GetFloatProp"/>
+<link id="GetInt64Prop"/>
+<link id="GetMethodProp"/>
+<link id="GetSetProp"/>
+<link id="GetObjectProp"/>
+<link id="GetEnumProp"/>
+</seealso>
+<example file="typinfex/ex1"/>
+</element>
+
+
+<element name="GetPropInfo">
+<short>Return property type information, by property name.</short>
+<descr>
+<p>
+<var>GetPropInfo</var> returns a pointer to the <var>TPropInfo</var> record for a the 
+<var>PropName</var> property of a class. The class to examine can be specified 
+in one of three ways:
+</p>
+<dl>
+<dt>Instance</dt><dd> An instance of the class.</dd>
+<dt>AClass</dt><dd> A class pointer to the class.</dd>
+<dt>TypeInfo</dt><dd> A pointer to the type information of the class.</dd>
+</dl>
+<p>
+In each of these three ways, if <var>AKinds</var> is specified, if the property 
+has <var>TypeKind</var> which is not included in <var>Akinds</var>, <var>Nil</var> will be
+returned.
+</p>
+<p>
+For an example, see most of the other functions.
+</p>
+</descr>
+<errors>
+If the property <var>PropName</var> does not exist, <var>Nil</var> is returned.
+</errors>
+<seealso>
+<link id="GetPropInfos"/>
+<link id="GetPropList"/>
+</seealso>
+</element>
+
+
+<element name="GetPropInfos">
+<short>Return a list of published properties.</short>
+<descr>
+<var>GetPropInfos</var> stores pointers to the property information of all published
+properties of a class with class info <var>TypeInfo</var> in the list pointed to by
+<var>Proplist</var>. The <var>PropList</var> pointer must point to a memory location that
+contains enough space to hold all properties of the class and its parent classes.
+</descr>
+<errors>
+No checks are done to see whether <var>PropList</var> points to a memory area that 
+is big enough to hold all pointers.
+</errors>
+<seealso>
+<link id="GetPropInfo"/>
+<link id="GetPropList"/>
+</seealso>
+<example file="typinfex/ex12"/>
+</element>
+
+
+<element name="GetPropList">
+<short>Return a list of a certain type of published properties.</short>
+<descr>
+<p>
+<var>GetPropList</var> stores pointers to property information of the class with class
+info <var>TypeInfo</var> for properties of kind <var>TypeKinds</var> in the list pointed to
+by <var>Proplist</var>. <var>PropList</var> must contain enough space to hold all properties.
+</p>
+<p>
+The function returns the number of pointers that matched the criteria and were stored
+in <var>PropList</var>.
+</p>
+</descr>
+<errors>
+No checks are done to see whether <var>PropList</var> points to a memory area that is big enough
+to hold all pointers.
+</errors>
+<seealso>
+<link id="GetPropInfos"/>
+<link id="GetPropInfo"/>
+</seealso>
+<example file="typinfex/ex13"/>
+</element>
+
+
+<element name="GetPropValue">
+<short>Get property value as a string.</short>
+<descr>
+Due to missing <var>Variant</var> support, <var>GetPropValue</var> is not yet implemented. 
+The declaration is provided for compatibility with Delphi.
+</descr>
+<errors>
+</errors>
+<seealso>
+</seealso>
+</element>
+
+<element name="GetSetProp">
+<short>Return the value of a set property.</short>
+<descr>
+<p>
+<var>GetSetProp</var> returns the contents of a set property as a string.
+The property to be returned can be specified by it's name in <var>PropName</var>
+or by its property information in <var>PropInfo</var>.
+</p>
+<p>
+The returned set is a string representation of the elements in the set as
+returned by <link id="SetToString"/>. The <var>Brackets</var> option can be used to 
+enclose the string representation in square brackets.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid ordinal property of <var>Instance</var>
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.                                                 
+</errors>
+<seealso>
+<link id="SetSetProp"/>
+<link id="GetStrProp"/>
+<link id="GetFloatProp"/>
+<link id="GetInt64Prop"/>
+<link id="GetMethodProp"/>
+</seealso>
+<example file="typinfex/ex7"/>
+</element>
+
+
+<element name="GetStrProp">
+<short>Return the value of a string property.</short>
+<descr>
+<var>GetStrProp</var> returns the value of the string property described by
+<var>PropInfo</var> or with name <var>PropName</var> for object <var>Instance</var>. 
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid string property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="SetStrProp"/>
+<link id="GetOrdProp"/>
+<link id="GetFloatProp"/>,
+<link id="GetInt64Prop"/>
+<link id="GetMethodProp"/>
+</seealso>
+<example file="typinfex/ex3"/>
+</element>
+
+
+<element name="GetTypeData">
+<short>Return a pointer to type data, based on type information.</short>
+<descr>
+<var>GetTypeData</var> returns a pointer to the <var>TTypeData</var> record that
+follows after the <var>TTypeInfo</var> record pointed to by <var>TypeInfo</var>.
+It essentially skips the <var>Kind</var> and <var>Name</var> fields in the 
+<var>TTypeInfo</var> record.
+</descr>
+<errors>
+None.
+</errors>
+<seealso>
+</seealso>
+</element>
+
+<element name="GetVariantProp">
+<short>Return the value of a variant property.</short>
+<descr>
+Due to mising Variant support, the <var>GetVariantProp</var> function is not 
+yet implemented. Provided for Delphi compatibility only.
+</descr>
+<errors>
+</errors>
+<seealso>
+<link id="SetVariantProp"/>
+</seealso>
+</element>
+
+<element name="IsPublishedProp">
+<short>Check whether a published property exists.</short>
+<descr>
+<p>
+<var>IsPublishedProp</var> returns true if a class has a published property with
+name <var>PropName</var>. The class can be specfied in one of two ways:
+</p>
+<dl>
+<dt>AClass</dt><dd> A class pointer to the class.</dd>
+<dt>Instance</dt><dd> An instance of the class.</dd>
+</dl>
+</descr>
+<errors>
+No checks are done to ensure <var>Instance</var> or <var>AClass</var> are valid
+pointers. Specifying an invalid property name in <var>PropName</var> will result
+in an <var>EPropertyError</var> exception.                                                 
+</errors>
+<seealso>
+<link id="IsStoredProp"/>
+<link id="PropIsType"/>
+</seealso>
+<example file="typinfex/ex10"/>
+</element>
+
+
+<element name="IsStoredProp">
+<short>Check whether a property is stored.</short>
+<descr>
+<p>
+<var>IsStoredProp</var> returns <var>True</var> if the <var>Stored</var> modifier evaluates
+to <var>True</var> for the property described by <var>PropInfo</var> or with name
+<var>PropName</var> for object <var>Instance</var>. 
+It returns <var>False</var> otherwise. If the function returns
+<var>True</var>, this indicates that the property should be written when
+streaming the object <var>Instance</var>.
+</p>
+<p>
+If there was no <var>stored</var> modifier in the declaration of the property, 
+<var>True</var> will be returned. 
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.                                                 
+</errors>
+<seealso>
+<link id="IsPublishedProp"/>
+<link id="PropIsType"/>
+</seealso>
+<example file="typinfex/ex11"/>
+</element>
+
+
+<element name="PropIsType">
+<short>Check the type of a published property.</short>
+<descr>
+<p>
+<var>PropIsType</var> returns <var>True</var> if the property with name <var>PropName</var>
+has type <var>TypeKind</var>. It returns <var>False</var> otherwise. The class to be
+examined can be specified in one of two ways:
+</p>
+<dl>
+<dt>AClass</dt><dd> A class pointer. </dd>
+<dt>Instance</dt><dd> An instance of the class.</dd>
+</dl>
+</descr>
+<errors>
+No checks are done to ensure <var>Instance</var> or <var>AClass</var> are valid
+pointers.Specifying an invalid property name in <var>PropName</var> will result
+in an <var>EPropertyError</var> exception.                                                 
+</errors>
+<seealso>
+<link id="IsPublishedProp"/>
+<link id="IsStoredProp"/>
+<link id="PropType"/>
+</seealso>
+<example file="typinfex/ex16"/>
+</element>
+
+
+<element name="PropType">
+<short>Return the type of a property</short>
+<descr>
+<p>
+<var>Proptype</var> returns the type of the property <var>PropName</var> for a class.
+The class to be examined can be specified in one of 2 ways:
+</p>
+<dl>
+<dt>AClass</dt><dd>A class pointer.</dd>
+<dt>Instance</dt><dd>An instance of the class.</dd>
+</dl>
+</descr>
+<errors>
+No checks are done to ensure <var>Instance</var> or <var>AClass</var> are valid
+pointers. Specifying an invalid property name in <var>PropName</var> will result
+in an <var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="IsPublishedProp"/>
+<link id="IsStoredProp"/>
+<link id="PropIsType"/>
+</seealso>
+<example file="typinfex/ex17"/>
+</element>
+
+
+<element name="SetEnumProp">
+<short>Set value of an enumerated-type property</short>
+<descr>
+<p>
+<var>SetEnumProp</var> sets the property described by <var>PropInfo</var> or with name
+<var>PropName</var> to <var>Value</var>. <var>Value</var> must be a string with the name
+of the enumerate value, i.e. it can be used as an argument to 
+<link id="GetEnumValue"/>.
+</p>
+<p>
+For an example, see <link id="GetEnumProp"/>.
+</p>
+</descr>
+<errors>
+No checks are done to ensure <var>Instance</var> or <var>PropInfo</var> are valid
+pointers. Specifying an invalid property name in <var>PropName</var> will result
+in an <var>EPropertyError</var> exception.                                           
+</errors>
+<seealso>
+<link id="GetEnumProp"/>
+<link id="SetStrProp"/>
+<link id="SetFloatProp"/>
+<link id="SetInt64Prop"/>
+<link id="SetMethodProp"/>
+</seealso>
+</element>
+
+
+<element name="SetFloatProp">
+<short>Set value of a float property.</short>
+<descr>
+<p>
+<var>SetFloatProp</var> assigns <var>Value</var> to the property described by
+<var>PropInfo</var> or with name <var>Propname</var> for the object <var>Instance</var>.
+</p>
+<p>
+For an example, see <link id="GetFloatProp"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid float property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetFloatProp"/>
+<link id="SetOrdProp"/>
+<link id="SetStrProp"/>,
+<link id="SetInt64Prop"/>
+<link id="SetMethodProp"/>
+</seealso>
+</element>
+
+
+
+<element name="SetInt64Prop">
+<short>Set value of a Int64 property</short>
+<descr>
+<p>
+<var>SetInt64Prop</var> assigns <var>Value</var> to the property of type
+<var>Int64</var> that is described by <var>PropInfo</var> or with name <var>Propname</var> 
+for the object <var>Instance</var>.
+</p>
+<p>
+For an example, see <link id="GetInt64Prop"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid <var>Int64</var> property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetInt64Prop"/>
+<link id="GetMethodProp"/>
+<link id="SetOrdProp"/>
+<link id="SetStrProp"/>
+<link id="SetFloatProp"/>
+</seealso>
+</element>
+
+<element name="SetMethodProp">
+<short>Set the value of a method property</short>
+<descr>
+<p>
+<var>SetMethodProp</var> assigns <var>Value</var> to the method the property described 
+by <var>PropInfo</var> or with name <var>Propname</var> for object <var>Instance</var>.
+</p>
+<p>
+The type <var>TMethod</var> of the <var>Value</var> parameter is defined in the
+<file>SysUtils</file> unit as:
+</p>
+<code>
+TMethod = packed record
+  Code, Data: Pointer;
+end;                                                                         
+</code>
+<p>
+<var>Data</var> should point to the instance of the class with the method <var>Code</var>.
+</p>
+<p>
+For an example, see <link id="GetMethodProp"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid method property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetMethodProp"/>
+<link id="SetOrdProp"/>
+<link id="SetStrProp"/>
+<link id="SetFloatProp"/>
+<link id="SetInt64Prop"/>
+</seealso>
+</element>
+
+<element name="SetObjectProp">
+<short>Set the value of an object-type property.</short>
+<descr>
+<p>
+<var>SetObjectProp</var> assigns <var>Value</var> to the the object property described by
+<var>PropInfo</var> or with name <var>Propname</var> for the object <var>Instance</var>. 
+</p>
+<p>
+For an example, see <link id="GetObjectProp"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid method property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetObjectProp"/>
+<link id="SetOrdProp"/>
+<link id="SetStrProp"/>
+<link id="SetFloatProp"/>
+<link id="SetInt64Prop"/>
+<link id="SetMethodProp"/>
+</seealso>
+</element>
+
+
+<element name="SetOrdProp">
+<short>Set value of an ordinal property</short>
+<descr>
+<p>
+<var>SetOrdProp</var> assigns <var>Value</var> to the the ordinal property described by 
+<var>PropInfo</var> or with name <var>Propname</var> for the object <var>Instance</var>. 
+</p>
+<p>
+Ordinal properties that can be set include:
+</p>
+<dl>
+<dt>Integers and subranges of integers</dt>
+<dd>The actual value of the integer must be passed.</dd>
+<dt>Enumerated types and subranges of enumerated types</dt>
+<dd>The ordinal value of the enumerated type must be passed.</dd>
+<dt>Subrange types</dt>
+<dd>of integers or enumerated types. Here the ordinal value must be passed.</dd>
+<dt>Sets</dt>
+<dd> If the base type of the set has less than 31 possible values. 
+For each possible value; the corresponding bit of <var>Value</var> must be set.</dd>
+</dl>
+<p>
+For an example, see <link id="GetOrdProp"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid ordinal property of <var>Instance</var>. 
+No range checking is performed.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetOrdProp"/>
+<link id="SetStrProp"/>
+<link id="SetFloatProp"/>
+<link id="SetInt64Prop"/>
+<link id="SetMethodProp"/>
+</seealso>
+</element>
+
+
+<element name="SetPropValue">
+<short>Set property value as variant</short>
+<descr>
+Due to missing Variant support, this function is not yet implemented;
+it is provided for Delphi compatibility only.
+</descr>
+<errors>
+</errors>
+<seealso>
+</seealso>
+</element>
+
+<element name="SetSetProp">
+<short>Set value of set-typed property.</short>
+<descr>
+<p>
+<var>SetSetProp</var> sets the property specified by <var>PropInfo</var> or
+<var>PropName</var> for object <var>Instance</var> to <var>Value</var>. <var>Value</var> is a
+string which contains a comma-separated list of values, each value being a
+string-representation of the enumerated value that should be included in
+the set. The value should be accepted by the <link id="StringToSet"/> function.
+</p>
+<p>
+The value can be formed using the <link id="SetToString"/> function.
+</p>
+<p>
+For an example, see <link id="GetSetProp"/>.
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid ordinal property of <var>Instance</var>.
+No range checking is performed.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.                                                 
+</errors>
+<seealso>
+<link id="GetSetProp"/>
+<link id="SetOrdProp"/>
+<link id="SetStrProp"/>
+<link id="SetFloatProp"/>
+<link id="SetInt64Prop"/>
+<link id="SetMethodProp"/>
+<link id="SetToString"/>
+<link id="StringToSet"/>
+</seealso>
+</element>
+
+
+<element name="SetStrProp">
+<short>Set value of a string property</short>
+<descr>
+<p>
+<var>SetStrProp</var> assigns <var>Value</var> to the string property described by
+<var>PropInfo</var> or with name <var>Propname</var> for object <var>Instance</var>. 
+</p>
+<p>
+For an example, see <link id="GetStrProp"/>
+</p>
+</descr>
+<errors>
+No checking is done whether <var>Instance</var> is non-nil, or whether
+<var>PropInfo</var> describes a valid string property of <var>Instance</var>.
+Specifying an invalid property name in <var>PropName</var> will result in an
+<var>EPropertyError</var> exception.
+</errors>
+<seealso>
+<link id="GetStrProp"/>
+<link id="SetOrdProp"/>
+<link id="SetFloatProp"/>,
+<link id="SetInt64Prop"/>
+<link id="SetMethodProp"/>
+</seealso>
+</element>
+
+
+<element name="SetToString">
+<short>Convert set to a string description</short>
+<descr>
+<p>
+<var>SetToString</var> takes an integer representation of a set (as received e.g.
+by <var>GetOrdProp</var>) and turns it into a string representing the elements in
+the set, based on the type information found in the <var>PropInfo</var> property
+information. By default, the string representation is not surrounded by
+square brackets. Setting the <var>Brackets</var> parameter to <var>True</var> will 
+surround the string representation with brackets.
+</p>
+<p>
+The function returns the string representation of the set.
+</p>
+</descr>
+<errors>
+No checking is done to see whether <var>PropInfo</var> points to valid property
+information.
+</errors>
+<seealso>
+<link id="GetEnumName"/>
+<link id="GetEnumValue"/>
+<link id="StringToSet"/>
+</seealso>
+<example file="typinfex/ex18"/>
+</element>
+
+
+<element name="SetVariantProp">
+<short>Set value of a variant property</short>
+<descr>
+Due to missing Variant support, this function is not yet implemented. 
+Provided for Delphi compatibility only.
+</descr>
+<errors>
+</errors>
+<seealso>
+</seealso>
+</element>
+
+
+<element name="StringToSet">
+<short>Convert string description to a set.</short>
+<descr>
+<p>
+<var>StringToSet</var> converts the string representation of a set in <var>Value</var>
+to a integer representation of the set, using the property information found
+in <var>PropInfo</var>. This property information should point to the property
+information of a set property. The function returns the integer
+representation of the set. (i.e, the set value, typecast to an integer)
+</p>
+<p>
+The string representation can be surrounded with square brackets, and must 
+consist of the names of the elements of the base type of the set. The base
+type of the set should be an enumerated type. The elements should be
+separated by commas, and may be surrounded by spaces.
+each of the names will be fed to the <link id="GetEnumValue"/> function.
+</p>
+<p>
+For an example, see <link id="SetToString"/>.
+</p>
+</descr>
+<errors>
+No checking is done to see whether <var>PropInfo</var> points to valid property
+information. If a wrong name is given for an enumerated value, then an
+<var>EPropertyError</var> will be raised.
+</errors>
+<seealso>
+<link id="GetEnumName"/>
+<link id="GetEnumValue"/>
+<link id="SetToString"/>
+</seealso>
+</element>
+
+</module>
+</package>
+</fpdoc-descriptions>