Randall Lee Reetz wrote:
In your script, it appears that a custom prop is dynamically declared just by setting it's value? Is this all you have to do? In SuperCard, one has to specifically declare a "user" property with a "define" statement before ever setting it's value.

Yeah, and that extra line needed to declare every custom property used to drive me crazy. I submitted a request to change that back when Gary Poppitz was SC's lead engineer, but he felt strongly about it so it never happened. I was sure tickled to find it in Rev.

Gary's thinking was that he wanted to avoid having requests for props that didn't exist, but in practice that's rarer than assigning them so the tradeoff doesn't buy you any additional productivity.

When you try to access a property that doesn't exist in Rev, it just returns empty. So how do you know whether it's not there or perhaps there but merely empty? In such cases you can query the customKeys property:

  get the customKeys of btn 1

This returns a return-delimited list of all custom props in the current property set. Keep in mind that you can have any number of property sets in an object, and switch between then with:

  set the customPropertySet of btn 1 to "UserData"

This can be especially handy when you have lots of different data for which it would be useful to use a single key.

For example, if you had some info about users you could do this:

  put "bob" into tName
  put "Age,Rank,Serial" into tSets
  repeat for each item tPropSet in tSets
     set the customPropertSet to tPropSet
     put the tName of this stack into fld tName
  end repeat

Lots of tricky things can be done with property arrays.


Now kindly allow me to blow your mind:

How many times have you wanted to replicate an object, but using copy and paste seemed cumbersome and you didn't want to muck with the user's clipboard?

In Rev, you can use "copy...to...", e.g.:

  copy btn 1 of stack "templates" to this cd

This copies the object into the current stack, and using the "to" form of "copy" leaves the clipboard alone.

But it gets better:

Just as you can get all of the customKeys of an object's property set as I noted above, you can even get all of the modifiable built-in properties as well, returned to you in a convenient array - try this, which also combines the array elements into a list for easy viewing:

    put the properties of this stack into tmp
    combine tmp with cr and tab
    put tmp

So you can get and set all modifiable properties in a single line.

But if that's not convenient enough, you can also transfer all built-in properties from any object to any other of the same type in one line:

  set the properties of btn 1 to the properties of btn 2


Let's take this one step further:

Suppose you needed to create a hundred graphics on the fly, each with specific properties. You could create them and then assign their properties, but Rev also gives us template objects, virtual objects from which anything created with the "Create" command will adopt all their properties.

So you could make those graphics like this:

   --  Just set up the template object...
   set the properties of the templateGraphic to \
     the properties of grc "MyTemplate"
   --
   -- ...and create the objects as normal:
   repeat with i = 1 to 100
      create grc
   end repeat


Ah, the limitless possibilities....

:)


Rev's associative arrays and property sets are so useful that I recommend everyone take at least half a day just to play with them. Once you get a good feel for them a great many solutions become quick and easy, and often fun.

--
 Richard Gaskin
 Managing Editor, revJournal
 _______________________________________________________
 Rev tips, tutorials and more: http://www.revJournal.com
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to