Clase con un medidor circular (gauge) que grafica el porcentaje de un procedimiento con un objeto Shape y la nueva propiedad PolyPoint de Visual FoxPro 9.0.
El siguiente es el código 100% VFP9 para graficar un medidor circular. En el ejemplo se utiliza la imagen "lmGauge.gif" como fondo del medidor. Puede descargar la imagen, la clase y un formulario de ejemplo haciendo clic en el siguiente enlace: lmGauge.zip (14,9 KB)
Imagen del formulario de ejemplo conteniendo la clase lmGauge

PUBLIC goMiForm
goMiForm = CREATEOBJECT("MiForm")
goMiForm.SHOW(1)
RETURN
DEFINE CLASS MiForm AS FORM
HEIGHT = 250
WIDTH = 350
AUTOCENTER = .T.
CAPTION = "Gauge"
NAME = "MiForm"
ADD OBJECT Gauge1 AS lmGauge WITH ;
TOP = 8, ;
LEFT = 16, ;
WIDTH = 220, ;
NAME = "Gauge1"
ADD OBJECT cmdGraficar AS COMMANDBUTTON WITH ;
TOP = 8, ;
LEFT = 248, ;
HEIGHT = 32, ;
WIDTH = 84, ;
CAPTION = "Graficar", ;
NAME = "cmdGraficar"
ADD OBJECT cmdColor AS COMMANDBUTTON WITH ;
TOP = 48, ;
LEFT = 248, ;
HEIGHT = 32, ;
WIDTH = 84, ;
CAPTION = "Color", ;
NAME = "cmdColor"
PROCEDURE cmdGraficar.CLICK
LOCAL ln
THISFORM.SETALL("Enabled",.F.,"CommandButton")
*-- Simulo un proceso del 0 al 100%
FOR ln = 0 TO 100
THISFORM.Gauge1.Grafica(ln)
INKEY(.001,"MH")
ENDFOR
THISFORM.SETALL("Enabled",.T.,"CommandButton")
ENDPROC
PROCEDURE cmdColor.CLICK
THISFORM.Gauge1.shpGauge.BACKCOLOR = ;
GETCOLOR(THISFORM.Gauge1.shpGauge.BACKCOLOR)
ENDPROC
ENDDEFINE
DEFINE CLASS lmGauge AS CONTAINER
WIDTH = 220
HEIGHT = 220
BACKSTYLE = 0
BORDERWIDTH = 0
NAME = "lmGauge"
ADD OBJECT shpGauge AS SHAPE WITH ;
TOP = 0, ;
LEFT = 0, ;
HEIGHT = 220, ;
WIDTH = 220, ;
BORDERWIDTH = 1, ;
BACKCOLOR = RGB(255,255,255), ;
POLYPOINTS = "This.aPoly", ;
NAME = "shpGauge"
ADD OBJECT lblGauge AS LABEL WITH ;
AUTOSIZE = .T., ;
FONTBOLD = .T., ;
FONTNAME = "Arial", ;
FONTSIZE = 9, ;
ALIGNMENT = 2, ;
BACKSTYLE = 0, ;
CAPTION = "100%", ;
HEIGHT = 20, ;
LEFT = 90, ;
TOP = 140, ;
WIDTH = 32, ;
NAME = "lblGauge"
*-- debe existir el archivo grafico "lmGauge.gif"
ADD OBJECT imgGauge AS IMAGE WITH ;
PICTURE = "lmGauge.gif", ;
STRETCH = 2, ;
BACKSTYLE = 0, ;
HEIGHT = 220, ;
LEFT = 0, ;
TOP = 0, ;
WIDTH = 220, ;
NAME = "imgGauge", ;
VISIBLE = FILE("lmGauge.gif")
PROCEDURE Grafica
LPARAMETERS tnGauge
LOCAL lnGauge, lnAng, lnCos, lnSen
lnAng = 0
lnCos = COS(DTOR(lnAng + 135))
lnSen = SIN(DTOR(lnAng + 135))
THIS.shpGauge.aPoly(2,1) = 50 * lnCos + 50
THIS.shpGauge.aPoly(2,2) = 50 * lnSen + 50
lnGauge = MAX(0,MIN(tnGauge,100)) * 0.1
FOR lnI = 3 TO 30
lnAng = (lnGauge) * (lnI - 3)
lnCos = COS(DTOR(lnAng + 135))
lnSen = SIN(DTOR(lnAng + 135))
THIS.shpGauge.aPoly(lnI,1) = 50 * lnCos + 50
THIS.shpGauge.aPoly(lnI,2) = 50 * lnSen + 50
ENDFOR
THIS.lblGauge.CAPTION = TRANSFORM(tnGauge,"999%")
THIS.shpGauge.REFRESH
ENDPROC
PROCEDURE INIT
THIS.Grafica(0)
ENDPROC
PROCEDURE shpGauge.INIT
LOCAL lnI
THIS.HEIGHT = THIS.PARENT.HEIGHT
THIS.WIDTH = THIS.PARENT.WIDTH
THIS.ADDPROPERTY("aPoly[30,2]")
FOR lnI = 1 TO 30
STORE 50 TO ;
THIS.aPoly[lnI,1], ;
THIS.aPoly[lnI,2]
ENDFOR
ENDPROC
PROCEDURE lblGauge.INIT
THIS.TOP = THIS.PARENT.HEIGHT * .75
THIS.LEFT = (THIS.PARENT.WIDTH / 2) - (THIS.WIDTH / 2)
ENDPROC
PROCEDURE imgGauge.INIT
THIS.HEIGHT = THIS.PARENT.HEIGHT
THIS.WIDTH = THIS.PARENT.WIDTH
THIS.STRETCH = 2
ENDPROC
ENDDEFINE
Luis María Guayán
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.