<<
How does one access sub-properties
I tried this for fun

getproperty xx FrameSides 'vTmp'
-- gets a list of sides that are true, i.e.  sdRight,SdLeft

getproperty xx FrameSides|sdRight 'vTmp'
-- gets nothing, is there a syntax for referencing just the one sub-property?
>>

Well, I wrote a whole long message about how this wont work, because R:Base 
can't understand Delphi enumerations and sets.  Then, on a lark, I tried it, 
and 
it appears RBTI is one step (at least) ahead of me.  I've left the original 
message below because it contains interesting information notwithstanding that 
it is, factually, wrong.  Wrong, wrong, wrong.

Basically, there IS no sdRight property.  There is only a FrameSides property 
which is a set "containing" 0 or more of the values sdRight, sdLeft, sdTop, and 
sdBottom.  (In reality, it's a set of four bit flags, each representing one of 
the possible values being on or off in the set, but that's not important.)

R:Base converts the set into a comma delimited list when you read it and (this 
is too cool) it decodes a comma-delimited list and updates the property:

PROPERTY xx FRAMESIDES 'sdRight,sdLeft'

will set the control to have the frame only on the left and right.
--
Larry

ORIGINAL (WRONG, WRONG, WRONG) ANSWER:

That's a bit harder.

There are all kinds of compound properties and R:Base needs to supply special 
proxy properties for us to be able to access them from R:Base. 

For example, the Delphi font property for any control is an instance of TFont, 
which has, among others, a Style property which is a set of one or more of 
fsBold, fsStrikethrough, fsUnderline, and fsItalic (which themselves are part 
of 
a Delphi enumeration, they map to integer values).  Because R:Base has no 
concept of enumerations or sets, RBTI has thoughtfully supplied proxy 
properties 
name Font_Bold, Font_Strikethrough, Font_Underline, and Font_Italic that can be 
set to boolean values (actually, pseudo-boolean text values, since R:Base 
doesn't support BOOL directly).

What's happening when you read or write the proxy property is that R:Base 
contains code to read or write the underlying Delphi type.  But this only works 
if they've taken the trouble to create a proxy for the property you're 
interested in.

In the case you cited, there's no "sdRight" property to read, since sdRight is 
simply an enumeration value that's been added to the set-type property 
FrameSides.  In order for you as an R:Base programmer to read or write the 
various sides, RBTI would have to create proxy properties like FrameSide_Left, 
FrameSide_Right and so on and internally handle the mapping between those 
proxies and "real" properties.  Alternatively, they could override the property 
the way they've done with Anchors, which accepts a comma-delimited list.  In 
any 
event, I find it hard to imagine that they've done it for an obscure issue like 
frame sides.

Reply via email to