30 de marzo de 2015

Usando el CTL32 ProgressBar de FoxyPreviewer

Artículo original: Using the CTL32 ProgressBar from FoxyPreviewer
(http://weblogs.foxite.com/vfpimaging/archive/2011/01/21/13664.aspx)
Autor: VFPIMAGING
Traducido por: Luis Maria Guayán


FoxyPreviewer.App es una colección de clases. En su interior hay varias clases, que se pueden acceder directamente usando VFP.

Recientemente he recibido el requerimiento de mostrar como podria utilizar el CTL32 ProgressBar directamente.

!Eso es realmente simple! El comando es NEWOBJECT(), que nos permite acceder a las clases desde un archivo EXE o APP externo.

En primer lugar el autor de esta joya, el CTL32 ProgressBar es Carlos Alloatti. Para obtener la información completa sobre cómo usarlo, por favor vaya directamente al sitio web de CTL32: www.ctl32.com

Uso:

=Dotherm(90, "Caption", "TitleBar") && Muestra la barra de progreso normal con el 90%



=DoTherm(-1, "Caption", "TitleBar") && El valor -1 en el primer parámetro muestra el efecto de marquesina



=DoTherm() && Desactiva la barra de progreso

Guardar el código de abajo como DOTHERM.PRG

* DOTHERM.PRG
* =DoTherm(90, "Texto label", "Titulo")
* =DoTherm(-1, "Teste2", "Titulo") && Continuo
* =DoTherm() && Desactiva

LPARAMETERS tnPercent, tcLabelText, tcTitleText
IF NOT PEMSTATUS(_SCREEN , "oThermForm", 5)
  _SCREEN.ADDPROPERTY("oThermForm", "")
ENDIF
IF EMPTY(tnPercent)
  TRY
    _SCREEN.oThermForm.RELEASE()
  CATCH
  ENDTRY
  _SCREEN.oThermForm = NULL
  RETURN
ENDIF


IF TYPE("_Screen.oThermForm.Therm") <> "O"
  DO CreateTherm
ENDIF
LOCAL loThermForm AS FORM
loThermForm = _SCREEN.oThermForm
IF NOT EMPTY(tcLabelText)
  loThermForm.ThermLabel.CAPTION = tcLabelText
ENDIF
IF NOT EMPTY(tcTitleText)
  loThermForm.CAPTION = tcTitleText
ENDIF
IF tnPercent = -1
  loThermForm.Therm.Marquee = .T.
ELSE
  IF loThermForm.Therm.Marquee = .T.
    loThermForm.Therm.Marquee = .F.
  ENDIF
  loThermForm.Therm.VALUE = tnPercent
ENDIF
loThermForm.VISIBLE = .T.

RETURN


PROCEDURE CreateTherm
  LOCAL loForm AS FORM
  loForm = CREATEOBJECT("FORM")
  _SCREEN.oThermForm = loForm
  LOCAL lnBorder, liThermHeight, liThermWidth, liThermTop, liThermLeft
  lnBorder = 7
  WITH loForm AS FORM
    .SCALEMODE = 3 && Pixels
    .HEIGHT = 48
    .HALFHEIGHTCAPTION = .T.
    .WIDTH = 300
    .AUTOCENTER = .T.
    .BORDERSTYLE = 3 && Fixed dialog
    .CONTROLBOX = .F.
    .CLOSABLE = .F.
    .MAXBUTTON = .F.
    .MINBUTTON = .F.
    .MOVABLE = .F.
    .ALWAYSONTOP = .T.
    .ALLOWOUTPUT = .F.

    .NEWOBJECT("Therm","ctl32_progressbar", "PR_ctl32_progressbar.vcx", LOCFILE("FoxyPreviewer.app"))
    .NEWOBJECT("ThermLabel", "Label")

    .ThermLabel.VISIBLE = .T.
    .ThermLabel.FONTBOLD = .T.
    .ThermLabel.TOP = 4
    .ThermLabel.WIDTH = .WIDTH - (lnBorder * 2)
    .ThermLabel.ALIGNMENT = 2 && Center
    liThermHeight = .HEIGHT - (lnBorder * 2) - .ThermLabel.HEIGHT
    liThermWidth = .WIDTH - (lnBorder * 2)
    .VISIBLE = .T.
  ENDWITH
  liThermTop = lnBorder + 20
  liThermLeft = lnBorder
  WITH loForm.Therm
    .TOP = liThermTop
    .LEFT = liThermLeft
    .HEIGHT = liThermHeight
    .WIDTH = liThermWidth
    .MarqueeSpeed = 30
    .MarqueeAnimationSpeed = 30
    .VISIBLE = .T.
    .CAPTION = ""
  ENDWITH
ENDPROC

2 comentarios :

  1. Buenas tardes.
    El programa finaliza con un error en la siguiente linea
    NEWOBJECT("Therm","ctl32_progressbar", "PR_ctl32_progressbar.vcx", LOCFILE("FoxyPreviewer.app"))
    Me hace falta esos archivos?

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.