As example this enumerates all attributes of certain type for any public or
published member (function, field, or property) for a component:
for LMember in TRTRtti.GetType( Component.ClassType() ).GetMembers(
[mvPublic, mvPublished] ) do
for LAtrribute in LMember.GetAttributes( TMyCustomAttributeType, True ) do
You can see how much can be achieved with almost no code :-D and this is
just the tip of the iceberg ;-) . It supports filtering with lambdas, and in
general is designed in the principles of functional programming, so you can
as example filter like this:
AAttributes := TRTRtti.GetType(
Component.ClassType() ).GetCustomAttributes(
TVLCommonFilterHostedPreviewAttribute, True );
for AAttribute in AAttributes do
if( AAttribute is TLPComponentEditorAttribute ) then
begin
AAttrItem := GComponentEditorAttributeList.Find(
function( AItem : IComponentEditorAttributeItem ) :
Boolean
var
AAttributes : IRTAttributes;
AAttributeClass : TCustomAttributeClass;
begin
AAttributeClass :=
AItem.GetInstance().AttributeClass;
AAttributes := TRTRtti.GetType(
Component.ClassType() ).GetCustomAttributes( TLPSuppressAttributeAttribute,
True );
if( AAttributes.Find(
function ( ASupressAttribute :
TCustomAttribute ) : Boolean
begin
Result := ( AAttributeClass =
TLPSuppressAttributeAttribute( ASupressAttribute ).Attribute );
end
) <> NIL ) then
Exit( False );
Result := ( AAttribute is AAttributeClass );
end
);
Exit( AAttrItem.GetInstance().ComponentEditor.Create( Component,
Designer ));
end;
This actually is a real piece of code from a place we use the new RTTI ;-)
With best regards,
Boian Mitov
-------------------------------------------------------
Mitov Software
www.mitov.com
-------------------------------------------------------
-----Original Message-----
From: Boian Mitov
Sent: Monday, February 18, 2013 11:49 AM
To: FPC developers' list
Subject: Re: [fpc-devel] State of extended RTTI
Hi Sven,
It is an abstraction API that on the low side is 100% compatible with the
Delphi API, as it uses it to access the information, but on the user side
presents extremely easy to use API. It is probably better than anything
available in the world at the moment, and light years ahead of both the
Microsoft .NET RTTI API and the Embarcadero RTTI API. Being abstraction
layer it also can be hooked on anything you have on the back end without
breaking the code.
With best regards,
Boian Mitov
-------------------------------------------------------
Mitov Software
www.mitov.com
-------------------------------------------------------
-----Original Message-----
From: Sven Barth
Sent: Monday, February 18, 2013 11:37 AM
To: fpc-***@lists.freepascal.org
Subject: Re: [fpc-devel] State of extended RTTI
On 18.02.2013 20:30, Boian Mitov wrote:
How compatible to Delphi's API is your API? If it is not compatible,
then it would not be of much use to us. Please note that we would in any
case only use the API itself, as we might not implement the binary
layout of the RTTI necessarily the same as Delphi did.
_______________________________________________
fpc-devel maillist - fpc-***@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel