General information
Category:
Coding, syntax & commands
>>>I build a shape based on some data. I would like to have another copy of the shape. Is there a quick way to copy all the layout properties of an object or do I have to code each property indivually -- shp2.top = shp1.top, shp2.left = shp1.left, etc...? There are actually dozens of shapes I need to copy, so this could be a big time saver. Thanks for any feedback.
>>>
>>
>>You can use AMEMBERS(object name,1) to create an array of properties, instantiate a new instance of the class, and then spin through the array copying the value from one to the other. Some properties are read-only at runtime, so you'd need to trap errors resulting from trying to write to a read-only property...
>>
>>>Marcus.
>
>here is a routine to do just that that I had stowed away somewhere...
>
>LPARA o1, o2
>
>IF TYPE('o1.Name') <> "C" OR TYPE('o2.Name') <> "C"
> RETURN .F.
>ENDIF
>
>AMEMBERS(aProps, o1)
>
>FOR i = 1 TO ALEN(aProps)
> IF !ALLTRIM(UPPER(aProps(i)))$"CLASS:PARENTCLASS:BASECLASS:NAME"
> uVal = GETPEM(o1,aProps(i)) && Value of property in source
> IF PEMSTATUS(o2,aProps(i),5) && Does property exist in the second object?
> IF !PEMSTATUS(o2,aProps(i),1) && Is the property readonly?
> IF !PEMSTATUS(o2,aProps(i),2) && Is the property protected?
> o2.WriteExpression(aProps(i), uVal)
> ENDIF
> ENDIF
> ENDIF
> ENDIF
>ENDFOR
Thanks Erik and Ed. This is a real time saver!
Marcus.
Previous
Reply
View the map of this thread
View the map of this thread starting from this message only
View all messages of this thread
View all messages of this thread starting from this message only