<< 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.

