Information générale
Catégorie:
Codage, syntaxe et commandes
>>>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.
Précédent
Répondre
Voir le fil de ce thread
Voir le fil de ce thread à partir de ce message seulement
Voir tous les messages de ce thread
Voir tous les messages de ce thread à partir de ce message seulement