* bldColSwap.prg Lparameters og As Grid, nCol1, nCol2 *[2005/05/09 14:01:59] ndragan - pass a reference to the grid and * the numbers of columns to swap *[2009/07/07 14:02:36] ndragan - added "bld" to the name Local cName1, cName2 og.AddColumn() og.Columns[og.ColumnCount].Name="coltemp" objclone(og.Columns[nCol1],og.coltemp) objclone(og.Columns[nCol2],og.Columns[nCol1]) objclone(og.coltemp, og.Columns[nCol2]) cName1=og.Columns[nCol1].Name cName2=og.Columns[nCol2].Name og.Columns[nCol1].Name = Sys(2015) og.Columns[nCol2].Name=cName1 og.Columns[nCol1].Name=cName2 og.RemoveObject("coltemp") *--------------------------------------------------- Procedure objclone(o1 As Column, o2 As Column) *-- dn 13/06/04 Local c, o, N, i, l, cCRS, aProp[1,1], omember1 As TextBox, omember2 * reset o2 to default N=Amembers(aProp,o2,1,"UC") For j=1 To N cWhat=aProp[j,2] && what is it - property, method, event, member cWhatName=aProp[j,1] && PEM name Do Case Case cWhat="Property" And Proper(cWhatName)="Name" * do nothing, name is handled outside this procedure Case Inlist(cWhat, "Property", 'Method' , 'Event') * whatever it is, try to remove it, we want the target object to lose personality Try o2.ResetToDefault(cWhatName) Catch * do nothing, really Endtry Case cWhat="Member" Try o2.RemoveObject(cWhatName) Catch * do nothing - it can't be removed because it is added at class level Endtry Endcase Endfor * now copy all from o1 to o2 * members first N=Amembers(aProp,o1,2) For i=1 To N omember1=Evaluate("o1."+aProp[i,1]) If Type("o2."+aProp[i,1])#"O" o2.Newobject(aProp[i,1],omember1.Class, omember1.ClassLibrary) Endif omember2=Evaluate("o2."+aProp[i,1]) objclone(omember1, omember2) Endfor * and now copy all properties and code N=Amembers(aProp,o1,1,"UC") For j=1 To N cWhat=aProp[j,2] && what is it - property, method, event, member cWhatName=aProp[j,1] && PEM name Do Case Case cWhat="Property" And Proper(cWhatName)="Name" * do nothing, name is handled outside this procedure Case Inlist(cWhat, "Property") If PemStatus(o2,cWhatName,5) Store Evaluate("o1."+cWhatName) To ("o2."+cWhatName) Else o2.AddProperty(cWhatName, Evaluate("o1."+cWhatName)) Endif Case Inlist(cWhat, 'Method' , 'Event') * whatever it is, try to convert into a string o2.WriteMethod(cWhatName, o1.ReadMethod(cWhatName)) Case cWhat="Member" * remove it from the source object o1.RemoveObject(cWhatName) Endcase Endfor