How to Use the CloneObject Method

Last reviewed: April 30, 1996
Article ID: Q130725
The information in this article applies to:
  • Microsoft Visual FoxPro for Windows, version 3.0

SUMMARY

You can use the CLONEOBJECT() method to duplicate an object on the Form Designer at form-design time. If you are developing a wizard or builder, you can use CLONEOBJECT to add an object to a form. This article provides an example that illustrates how to use this method.

MORE INFORMATION

Step-by-Step Example

This example runs a modal form that determines the number of controls to be placed on a form. This modal dialog box returns a value to the program. In this code, a command button is created, and the CLONEOBJECT method duplicates the command button. Note that the caption for each of the buttons is blue.

  1. Create a form. Using the following table as a guide, modify the form's properties and methods. Name the form CLONEOBJ.

       Property       What to Type in the Property Sheet
       ------------------------------------------------------------------------
       BackColor      192,192,192
       Caption        Enter Number of Controls
       Unload Event   RETURN nValue        &&This is the value the form returns
       WindowType     1-Modal
    
    

  2. Place a spinner on the form. Using the following table as a guide, modify the spinner's properties:

       Property          Type in the Property Sheet
       ------------------------------------------------------------------------
       ControlSource     nValue
       KeyboardHighvalue 10
       KeyboardLowValue   1
       SpinnerHighValue  10
       SpinnerLowValue    1
    
    

  3. Place a command button on the form. Using the following table as a guide, modify the command button's properties:

       Property          Type in the Property Sheet
       ------------------------------------------------------------------------
       Caption           OK
       Click Event       RELEASE ThisForm
    
    

  4. Copy and paste the following code into a program file (.PRG file), and run it.

          *:   CLONEOBJ
          DO Form CloneObj TO nNumberofControls
    
          CREATE Form test2 NOWAIT
    
          =ASELOBJ(atest,1)       && Place the name of the form in an array.
          atest(1).Caption="See the new controls on the Form"
          atest(1).LockScreen=.T. && Changes are refreshed all at once
          =MESSAGEBOX('There is no control')
    
          * Define the first command button:
          atest(1).AddObject('mycmd1','CommandButton')
          atest(1).mycmd1.ForeColor=RGB(0,0,255)
    
          * Duplicate the first command button, and store the name of the
          * previous command button to position the new control relative to the
          * position of the previous command button:
          FOR I=2 TO nNumberofControls
             OldName='Mycmd'+ALLTRIM(STR(I-1))
             NewName='Mycmd'+ALLTRIM(STR(I))
    
             atest(1).mycmd1.CloneObject(NewName) && Duplicate command button.
             oref=EVALUATE('atest(1).'+NewName)
             oOldref=EVALUATE('atest(1).'+OldName)
             oref.Top=oOldref.Top+35
             oref.Caption=NewName
    
          ENDFOR
          atest(1).SetAll('Visible',.T.,'CommandButton')
          atest(1).Refresh
          =MESSAGEBOX('Now there are '+ ALLTRIM(STR(nNumberofControls))+ ;
          ' controls')
    
    
The above program creates a form called TEST2.SCX with the number of command buttons specified in the first form's spinner. When the program file finishes running, TEST2.SCX remains open for modifications.


Additional reference words: 3.00 VFoxWin
KBCategory: kbtool kbprg kbcode
KBSubcategory: FxtoolFormdes


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: April 30, 1996
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.