Objetos de un Form

132 views
Skip to first unread message

Vinicio Garcia

unread,
May 13, 2009, 5:18:26 PM5/13/09
to mundovis...@googlegroups.com
Saludos compañeros.
 
He buscado la manera de extraer los nombres de los objetos de un form, esto con el fin de crear una clase la cual me permita colocar el focus al siguiente objeto de una manera dinamica.
 
Con TabIndex  del Form obtengo el número del siguiente objeto al que deseo colocar el focus, pero no he podido obtener el nombre o como asociar este valor para obtenerlo.
 
Alguna idea colegas ?


Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! Try it!

Jose Oscar Vogel

unread,
May 13, 2009, 5:28:31 PM5/13/09
to mundovis...@googlegroups.com
fijate si t esirve lo q te envio, es el codigo de un metodo que utilizo para darle el foco a un objeto en particular
--
Prof. Jose Oscar Vogel
Garuhapé - Misiones
CP 3334
Cel: 03743-15667526
foco.prg

Julio Cesar Rodriguez Dominguez

unread,
May 13, 2009, 5:43:17 PM5/13/09
to mundovis...@googlegroups.com


El 13 de mayo de 2009 16:18, Vinicio Garcia <vinicio...@hotmail.com> escribió:
Saludos compañeros.
 
He buscado la manera de extraer los nombres de los objetos de un form, esto con el fin de crear una clase la cual me permita colocar el focus al siguiente objeto de una manera dinamica.
 
Con TabIndex  del Form obtengo el número del siguiente objeto al que deseo colocar el focus, pero no he podido obtener el nombre o como asociar este valor para obtenerlo.
 
Alguna idea colegas ?

Para obtener el nombre de los objetos de cualquier contenedor puedes usar:

FOR i=1 TO thisform.Objects.count
    WAIT WINDOW thisform.Objects(i).name
ENDFOR

L.S.C. Julio Cesar
Saludos

--
:: God bless you, every day and every night ::

Vinicio Garcia

unread,
May 13, 2009, 6:07:53 PM5/13/09
to mundovis...@googlegroups.com
Gracias a todos.!!!
 

From: jur...@gmail.com
Date: Wed, 13 May 2009 16:43:17 -0500
Subject: [Mundo Visual FoxPro] Re: Objetos de un Form
To: mundovis...@googlegroups.com

Daniel Manuel López

unread,
May 14, 2009, 3:42:32 AM5/14/09
to Zorros verdaeros
Estimado Vinicio,
 
El código ejemplo de José Oscar, es bueno pero está limitado, ya que sólo te indica la
obtención de nombres de un determinado contenedor.
 
El código proporcionado por Julio César Redríguez es más completo y con algunas adiciones te
puede servir, pero aún esta incompleto.
 
El siguiente código que te anexo, es similar al de julio césar, pero con diferentes modificaciones,
ya que él como yo nos basamos en los ejemplos que proporciona microsoft y que modificamos
para diferentes necesidades, ya que Julio Cesar lo utiliza para enfocar objetos, y yo lo utilizo
para para obtener nombres y propiedades para regresar configuraciones individuales de cada
usuario de cualquier formulario de un sistema.
 
Te sugiero que analices el código de Julio Cesar y el mio, pues obtendrás el resultado
que desees.
 
El siguiente código necesita lo siguiente para correr en forma eficiente:
En cualquier formulario crea el método init_properties y pégale el codigo que te anexo,
tambien necesita una propiedad con nombre save_properties que es la que contendrá
el resultado final.
 
El método init_properties lo puedes ejecutar desde el método Init de cualquier formulario,
no necesita de nada más.
 
*-Method Name is init_properties
LPARAMETER oContainer
*--
*-- Checks for General fields
*--
LOCAL i,oControlParent,nCtrlCount
IF PARAMETERS() = 0
   m.oControlParent =
THISFORM
ELSE
   m.oControlParent = m.oContainer
ENDIF
 
DO CASE
   CASE ATC
("Pageframe",m.oControlParent.BaseClass)#0
        nCtrlCount = oControlParent.
PageCount
   CASE ATC
(m.oControlParent.BaseClass,"Optiongroup,Commandgroup")#0
        nCtrlCount = oControlParent.
ButtonCount
   OTHERWISE
        nCtrlCount = oControlParent.ControlCount
   ENDCASE
 
   FOR
i = 1 TO m.nCtrlCount
       DO CASE
          CASE ATC
("Pageframe",m.oControlParent.BaseClass)#0
               THIS.Init_properties(m.oControlParent.Pages[m.i])
 
          CASE ATC("Container",m.oControlParent.Controls[m.i].BaseClass) # 0 OR;
               ATC("Page",m.oControlParent.Controls[m.i].BaseClass) # 0
               THIS.Init_properties(m.oControlParent.Controls[m.i])
 
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Optiongroup,Commandgroup")#0
               Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
               m.oControlParent.
Controls[m.i].Name+".Value = "+;
                            STR(m.oControlParent.Controls[m.i].Value)+CHR(13)
* review lisboxs and grids
*         CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"ListBox,Grid") # 0
*              Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
*              m.oControlParent.Controls[m.i].Name+".Value"+CHR(13)
 
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"ComboBox") # 0
               lcNuloONumerico =
IIF(TYPE("m.oControlParent.Controls[m.i].value")="N",;
                                         STR(m.oControlParent.Controls[m.i].Value),'""')
               Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
                                          m.oControlParent.
Controls[m.i].Name+".Value = "+;
                                          lcNuloONumerico+
CHR(13)
 
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Spinner") # 0
               Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
                                          m.oControlParent.
Controls[m.i].Name+".Value = "+;
                                          STR(m.oControlParent.Controls[m.i].Value)+CHR(13)
 
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Shape") # 0
               Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
                                          m.oControlParent.
Controls[m.i].Name+".BackColor = "+;
                            STR(m.oControlParent.Controls[m.i].BackColor)+CHR(13) && Shape -backcolor-
* revisar a OleBoundControl
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"OleBoundControl") # 0
               Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
                                          m.oControlParent.
Controls[m.i].Name+".Value = "+;
                                          m.oControlParent.
Controls[m.i].Value+CHR(13)
 
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"CheckBox") # 0
               Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
                                          m.oControlParent.
Controls[m.i].Name+".Value = "+;
                                      IIF(m.oControlParent.Controls[m.i].Value=.T.,".T.",".F.")+CHR(13)
 
          CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"TextBox,EditBox") # 0
               lcNuloONumerico =
IIF(TYPE("m.oControlParent.Controls[m.i].value")="N",;
                                 ALLTRIM(STR(m.oControlParent.Controls[m.i].Value)),;
                                          '"'+m.oControlParent.Controls[m.i].Value+'"')
                If ATC("edtproperties",m.oControlParent.Controls[m.i].Name) = 0
                   Thisform.save_properties = Thisform.save_properties+SYS(1272, m.oControlParent)+"."+;
                                              m.oControlParent.
Controls[m.i].Name+".Value = "+;
                                             lcNuloONumerico+
CHR(13)
                endif
          ENDCASE
ENDFOR
*-----------
 
El resultado contenido en save_properties lo coloco en un campo Memo y leo el campo
memo con la siguiente sintaxis:
 
Nota: En mi caso tengo un archivo de nombre CN_CHART (Configuraciones de gráficos), que
contiene 2 campos, uno para una clave de usuario, y el otro para la config. un campo memo
con nombre properties, así dispongo de la configuración por cada usuario y cuando ese usuario
ingresa, se le muestra su última configuración.
 
*-----------
* Extrae la configuración guardada en un campo memo con nombre properties
*
If  SEEK(Thisform.Cnfg_key,"Cn_Chart")
    select Cn_chart
 
    SET MEMOWIDTH TO 100
    STORE MEMLINES(properties) TO gnNumLines && Number of lines in memo field
    STORE 0 TO _MLINE && Reset _MLINE to zero
    FOR count = 1 TO gnNumLines && Loop for # of lines in memo field
        lcMemo = MLINE(properties, 1, _MLINE) && Display each line
        lcMemo = STRTRAN(lcMemo,"form1","Thisform") && Special case
        if ATC(".Value",properties) > 0 OR;
           ATC(".BackColor",properties) > 0
           &lcMemo     && contiene la linea leida del campo memo
        endif
    NEXT
ENDIF
*---------
Puedes reemplazar las siguientes lineas

    if ATC(".Value",properties) > 0 OR;
       ATC(".BackColor",properties) > 0
por
    if ATC(".Name",properties) > 0 
si sólo deseas obtener el nombre del objeto
 
Dedicale un rato al análisis del código y obtendrás buenos beneficios.
 
Atte
Daniel López desde México D.F.
 
 

From: vinicio...@hotmail.com
To: mundovis...@googlegroups.com

Subject: [Mundo Visual FoxPro] Re: Objetos de un Form
Date: Wed, 13 May 2009 22:07:53 +0000
</html

Vinicio Garcia

unread,
May 14, 2009, 9:27:18 AM5/14/09
to mundovis...@googlegroups.com
Excelente!!!
 
Gracias por tu completa aportación.
 

From: dman...@hotmail.com

To: mundovis...@googlegroups.com
Subject: [Mundo Visual FoxPro] Re: Objetos de un Form
Date: Thu, 14 May 2009 02:42:32 -0500
</html

Cristobal

unread,
May 14, 2009, 3:09:57 PM5/14/09
to mundovis...@googlegroups.com
 

SYS

(1272, This)

 


Sent: Wednesday, May 13, 2009 4:18 PM
Reply all
Reply to author
Forward
0 new messages