Page 1 of 1

Asignar Value a control label

Posted: Thu Jul 16, 2015 6:10 pm
by edufloriv
Saludos amigos,

Se me ha encargado realizar un módulo para cubicar el almacén de la empresa. Se me pide que represente cada espacio de almacenamiento del almacén en pantalla asi que escribí esto:

Code: Select all

#include <hmg.ch>

FUNCTION MAIN()

PUBLIC nScrW  := GetDesktopWidth()
PUBLIC nScrH  := GetDesktopHeight() - 30
PUBLIC nSpcW  := INT( nScrW / 10 )
PUBLIC nSpcH  := INT( nScrH / 7 )
PUBLIC nSpcX  := INT( nSpcH / 4 )
PUBLIC aSpcs  := {'Spc01','Spc02','Spc03','Spc04'}
PUBLIC aCoos  := { {10,10},{10+nSpcH,10},{10+(nSpcH*2),10},{10+(nSpcH*3),10} }
PUBLIC aUbis  := {'D1A1','D1A2','D1B1','D1B2'}

   DEFINE WINDOW Win_Main ;
      AT 0 , 0 ;
      WIDTH nScrW HEIGHT nScrH ;
      TITLE "Almacenes" ;
      FONT "Arial" SIZE 9 ;
      MAIN

      FOR nSpcs = 1 TO LEN(aSpcs)

         cSpE := aSpcs[nSpcs]+'E'
         cSpU := aSpcs[nSpcs]+'U'
         cSpD := aSpcs[nSpcs]+'D'
         cSpC := aSpcs[nSpcs]+'C'

         @aCoos[nSpcs,1],aCoos[nSpcs,2] LABEL &cSpE ;
         WIDTH nSpcW ;
         HEIGHT nSpcX ;
         VALUE aUbis[nSpcs] ;
         ACTION RackClick() ;
         FONTCOLOR {255,255,000} ;
         BACKCOLOR {105,105,105} ;
         CENTERALIGN

         @aCoos[nSpcs,1]+nSpcX,aCoos[nSpcs,2] LABEL &cSpU ;
         WIDTH nSpcW ;
         HEIGHT nSpcX ;
         FONTCOLOR {255,255,000} ;
         BACKCOLOR {255,000,000} ;
         CENTERALIGN

         @aCoos[nSpcs,1]+(nSpcX*2),aCoos[nSpcs,2] LABEL &cSpD ;
         WIDTH nSpcW ;
         HEIGHT nSpcX ;
         FONTCOLOR {255,255,255} ;
         BACKCOLOR {038,139,034} ;
         CENTERALIGN

         @aCoos[nSpcs,1]+(nSpcX*3),aCoos[nSpcs,2] LABEL &cSpC ;
         WIDTH nSpcW ;
         HEIGHT nSpcX ;
         FONTCOLOR {255,255,000} ;
         BACKCOLOR {105,105,105} ;
         CENTERALIGN

      NEXT

   END WINDOW

   ACTIVATE WINDOW Win_Main

RETURN


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC AlmacenIniciar()


RETURN


*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC RackClick()

LOCAL cEspacio := This.Value
LOCAL nEspacio := ASCAN( aUbis , cEspacio )
LOCAL cControl := aSpcs[nEspacio]+'U'

   MsgInfo( 'Espacio: '+cEspacio+chr(13)+'Control: '+cControl )
   cLabel := 'Win_Main.'+cControl+'.Value'
   &cLabel := '25m3'

RETURN
La idea es no tener que dibujar cada espacio de almacenamiento en el código fuente, como pueden ver metí el diseño de un espacio en un buclé. Después de diseñar todo el almacén como asigno los valores a cada control label sabiendo solo el nombre del control.

Mucho agradeceré su ayuda.


Reciban mis cordiales saludos.

Re: Asignar Value a control label

Posted: Thu Jul 16, 2015 7:33 pm
by andyglezl
Hola Eduardo

Prueba así:

Code: Select all

PROC RackClick()
	LOCAL cEspacio := This.Value
	LOCAL nEspacio := ASCAN( aUbis , cEspacio )
	LOCAL cControl := aSpcs[nEspacio]+'U'
	
	MsgInfo( 'Espacio: '+cEspacio+chr(13)+'Control: '+cControl )
	*cLabel := 'Win_Main.'+cControl+'.Value'
	*&cLabel := '25m3'
	Win_Main.&cControl..Value := '25m3'		//    <=============
RETURN

Re: Asignar Value a control label

Posted: Thu Jul 16, 2015 9:29 pm
by edufloriv
Andrés,

Amigo, mil gracias, funcionó !!

Un cordial saludo, gracias por tu tiempo.