Página 1 de 1
ProgressBar y labels
Publicado: Vie Feb 01, 2013 1:48 pm
por Bingen Ugaldebere
Buenas Xailer Team.
Dado que las Progressbar que utilizamos no parecen admitir texto, he
decidido poner un label justo encima, pero éste ni se muestra ni se
actualiza, haga un refresh sleep(x) ni nada por el estilo.
Alguna idea?
Gracias.
ProgressBar y labels
Publicado: Vie Feb 01, 2013 2:40 pm
por joselalinf
Bingen,
> Alguna idea?
Es muy difícil hacer lo que quieres pero se me ocurre que podríamos irnos
al Caribe y lo miramos allí con calma.

Si prefieres solucinarlo desde
aquí mira en el ZIP a ver si te sirve.
Crea la barra en el OnInitialize() del formulario:
WITH OBJECT ::oProgress := TProgressBarEx():New( Self )
:SetBounds( ... )
:cText := "Copiando %i"
:nClrText := clBlack
:Create()
END
Si la usas en muchos sitios y prefieres una DLL, para poder crear la barra
desde el IDE en vez de a mano, no tienes más que decirlo.
Saludos,
José Lalín
--
ProgressBar y labels
Publicado: Vie Feb 01, 2013 2:59 pm
por XeviCOMAS
Bingen,
a mi tampoco me "refresca" un label (por mas que fuerze
ProcessMessages())... en un bucle repetitivo y que muestro una ProgressBar.
Lo que hago, es utilizar un TEdit con lBorder .F., lEnabled .F.,
nClrPaneDisabled clBtnFace, nClrTextDisabled clWindowText
Vaya, que utilizo un TEdit de Label... y la misma rutina SI QUE SE
REFRESCA!!!
No se en que actualización/revisión de Xailer dejó de funcionar, pero se que
hace ya un tiempo.
Un Saludo,
Xevi.
"Bingen Ugaldebere" ha escrit al missatge:510bb9a0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Buenas Xailer Team.
Dado que las Progressbar que utilizamos no parecen admitir texto, he
decidido poner un label justo encima, pero éste ni se muestra ni se
actualiza, haga un refresh sleep(x) ni nada por el estilo.
Alguna idea?
Gracias.
ProgressBar y labels
Publicado: Lun Feb 04, 2013 11:45 am
por Bingen Ugaldebere
Curioso Xevi, gracias pero he optado por la solución anterior.
Salu2
El 01/02/2013 14:59, Xevi escribió:
> Bingen,
>
> a mi tampoco me "refresca" un label (por mas que fuerze
> ProcessMessages())... en un bucle repetitivo y que muestro una ProgressBar.
>
> Lo que hago, es utilizar un TEdit con lBorder .F., lEnabled .F.,
> nClrPaneDisabled clBtnFace, nClrTextDisabled clWindowText
> Vaya, que utilizo un TEdit de Label... y la misma rutina SI QUE SE
> REFRESCA!!!
>
> No se en que actualización/revisión de Xailer dejó de funcionar, pero se
> que hace ya un tiempo.
>
>
> Un Saludo,
> Xevi.
>
>
> "Bingen Ugaldebere" ha escrit al missatge:510bb9a0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>
> Buenas Xailer Team.
>
> Dado que las Progressbar que utilizamos no parecen admitir texto, he
> decidido poner un label justo encima, pero éste ni se muestra ni se
> actualiza, haga un refresh sleep(x) ni nada por el estilo.
>
> Alguna idea?
>
> Gracias.
ProgressBar y labels
Publicado: Lun Feb 04, 2013 11:46 am
por Bingen Ugaldebere
Hola José
A lo de ir al caribe si que me apunto, allí se ven las cosas más claras
¿será la luz del sol que por aquí por el norte no abunda?

) Aunque
tampoco se ven mal las cosas por tu tierra con un pulpo y unos
albariños. ;·)
Casi, con esto no va:
>
> WITH OBJECT ::oProgress := TProgressBarEx():New( Self )
> :SetBounds( ... )
> :cText := "Copiando %i"
> :nClrText := clBlack
> :Create()
> END
Para que funcione Hay que cambiarlo por.
WITH OBJECT ::oProgress := TProgressBarEx():New( Self )
:SetBounds( ... )
:Create()
:cText := "Copiando %i"
:nClrText := clBlack
END
Y así si que va correctamente.
Al final he optado por sobrecargar la clase que me parece más limpio y
espero que más correcto:
//---------------------------------------------------------- --------------------
// Sobrecarga a ProgressBar para que pueda contener un texto con un
numerador
Class TProgressBar From XProgressBar
PROPERTY cText INIT "" //Si se quiere usar un numerador
junto con un texto "Procesando registro %i"
PROPERTY nClrText INIT clWindowText EDITOR PE_Color
METHOD WMPaint()
EndClass
//---------------------------------------------------------- ----------------
METHOD WMPaint( hDC ) CLASS TProgressBar
LOCAL cText
hDC := ::BeginPaint( hDC )
PrevWindowProc( ::Handle, WM_PAINT, hDC, 0 )
IF !Empty( ::cText )
cText := StrTran( ::cText, "%i", AllTrim( ToString( ::nValue ) ) )
SetBkMode( hDC, TRANSPARENT )
SetTextColor( hDC, ::nClrText )
DrawText( hDC, cText, GetClientRect( ::Handle ), nOR( DT_CENTER,
DT_VCENTER, DT_SINGLELINE ) )
ENDIF
Super:WmPaint()
RETURN ::EndPaint( hDC )
//---------------------------------------------------------- ----------------
Gracias y saludos.
ProgressBar y labels
Publicado: Lun Feb 04, 2013 12:11 pm
por Bingen Ugaldebere
Un último cambio por si se quiere usar un índice y un total junto con un
texto "Procesando registro %1 de %2"
//---------------------------------------------------------- --------------------
// Sobrecarga a ProgressBar para que pueda contener un texto y
opcionalmente un indice de progreso y un total
Class TProgressBar From XProgressBar
PROPERTY cText INIT "" //Si se quiere usar un numerador
junto con un texto "Procesando registro %1 de %2"
PROPERTY nClrText INIT clWindowText EDITOR PE_Color
METHOD WMPaint()
EndClass
//---------------------------------------------------------- ----------------
METHOD WMPaint( hDC ) CLASS TProgressBar
LOCAL cText
hDC := ::BeginPaint( hDC )
PrevWindowProc( ::Handle, WM_PAINT, hDC, 0 )
IF !Empty( ::cText )
cText := StrTran( ::cText, "%1", AllTrim( ToString( ::nValue ) ) )
cText := StrTran( cText, "%2", AllTrim( ToString( ::nMax ) ) )
SetBkMode( hDC, TRANSPARENT )
SetTextColor( hDC, ::nClrText )
DrawText( hDC, cText, GetClientRect( ::Handle ), nOR( DT_CENTER,
DT_VCENTER, DT_SINGLELINE ) )
ENDIF
Super:WmPaint()
RETURN ::EndPaint( hDC )
//---------------------------------------------------------- ----------------
ProgressBar y labels
Publicado: Lun Feb 04, 2013 3:31 pm
por zeasoftware
o igual lo sobrecargue sobre TProgressBar, pero no me funciona...
Hace rato que buscaba igual como poner el numero de % de avance...
Saludos
Ramón Zea
Móvil.: 993-231.62.29
Tel./Fax: 993-353-46-73
www.zeasoftware.com.mx
soporte@zeasoftware.com.mx
zeasoftware@hotmail.com
Aliado FACTURAXION
"Bingen Ugaldebere" escribió en el mensaje de
noticias:[email=510f9759@svctag-j7w3v3j....]510f9759@svctag-j7w3v3j....[/email]
Un último cambio por si se quiere usar un índice y un total junto con un
texto "Procesando registro %1 de %2"
//---------------------------------------------------------- --------------------
// Sobrecarga a ProgressBar para que pueda contener un texto y
opcionalmente un indice de progreso y un total
Class TProgressBar From XProgressBar
PROPERTY cText INIT "" //Si se quiere usar un numerador
junto con un texto "Procesando registro %1 de %2"
PROPERTY nClrText INIT clWindowText EDITOR PE_Color
METHOD WMPaint()
EndClass
//---------------------------------------------------------- ----------------
METHOD WMPaint( hDC ) CLASS TProgressBar
LOCAL cText
hDC := ::BeginPaint( hDC )
PrevWindowProc( ::Handle, WM_PAINT, hDC, 0 )
IF !Empty( ::cText )
cText := StrTran( ::cText, "%1", AllTrim( ToString( ::nValue ) ) )
cText := StrTran( cText, "%2", AllTrim( ToString( ::nMax ) ) )
SetBkMode( hDC, TRANSPARENT )
SetTextColor( hDC, ::nClrText )
DrawText( hDC, cText, GetClientRect( ::Handle ), nOR( DT_CENTER,
DT_VCENTER, DT_SINGLELINE ) )
ENDIF
Super:WmPaint()
RETURN ::EndPaint( hDC )
//---------------------------------------------------------- ----------------
ProgressBar y labels
Publicado: Lun Feb 04, 2013 8:22 pm
por Martin Del Angel
On 2/1/2013 7:59 AM, Xevi wrote:
> Bingen,
>
> a mi tampoco me "refresca" un label (por mas que fuerze
> ProcessMessages())... en un bucle repetitivo y que muestro una ProgressBar.
>
> Lo que hago, es utilizar un TEdit con lBorder .F., lEnabled .F.,
> nClrPaneDisabled clBtnFace, nClrTextDisabled clWindowText
> Vaya, que utilizo un TEdit de Label... y la misma rutina SI QUE SE
> REFRESCA!!!
>
> No se en que actualización/revisión de Xailer dejó de funcionar, pero se
> que hace ya un tiempo.
>
>
> Un Saludo,
> Xevi.
>
>
> "Bingen Ugaldebere" ha escrit al missatge:510bb9a0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>
> Buenas Xailer Team.
>
> Dado que las Progressbar que utilizamos no parecen admitir texto, he
> decidido poner un label justo encima, pero éste ni se muestra ni se
> actualiza, haga un refresh sleep(x) ni nada por el estilo.
>
> Alguna idea?
>
> Gracias.
Xevi:
Puedes mostrar la fracción de código de programa donde muestras el Label !
A mi siempre me ha refrescado el Label en todas las versiones de Xailer.
Quizas estamos hablando de cosas diferentes
Saludos...
ProgressBar y labels
Publicado: Lun Feb 04, 2013 9:29 pm
por XeviCOMAS
Martin,
::oLabel1:lVisible := ::oLabel2:lVisible := ::oLblContador:lVisible :=
::oCkboxlProces1a1:lChecked
::oProgressBar1:nValue := 0
While .T.
::oBtnCancelar:SetFocus()
If ::lCancelar
Exit
EndIf
ProcessMessages()
cLectura := FReadStr( nHandle, nLenData )
If cLectura = Chr(26) .or. Empty( cLectura )
::oLblReferencia:cText := cRefe
Exit
EndIf
*LOGDEBUG(CLECTURA)
::oProgressBar1:nValue ++
::oLblContador:cText := Transform( ::oProgressBar1:nValue, "@E
999,999" )
If (AppData:lCitroen .and. Asc( Right( cLectura, 1 ) ) # 10) .or.;
(!AppData:lCitroen .and. (::oProgressBar1:nValue <
::oProgressBar1:nMax .and. Asc( Right( cLectura, 1 ) ) # 10))
xMsgDlg( ::aIdioma[19,AppData:nIdioma],
::aIdioma[16,AppData:nIdioma], mbOK,, IDI_ERROR )
Exit
EndIf
cRefe := ""
cRemp := ""
If AppData:lCitroen
For n:=2 to 14
If SubStr( cLectura, n, 1 ) # " "
cRefe += SubStr( cLectura, n, 1 )
EndIf
Next
cRefe := PadR( cRefe, 13 )
If ::oCkboxlProces1a1:lChecked //::oProgressBar1:nValue % 50 == 0
::oLblReferencia:cText := cRefe
EndIf
....
Un Saludo,
Xevi.
"Martin Del Angel" ha escrit al missatge:51100a67$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
On 2/1/2013 7:59 AM, Xevi wrote:
> Bingen,
>
> a mi tampoco me "refresca" un label (por mas que fuerze
> ProcessMessages())... en un bucle repetitivo y que muestro una
> ProgressBar.
>
> Lo que hago, es utilizar un TEdit con lBorder .F., lEnabled .F.,
> nClrPaneDisabled clBtnFace, nClrTextDisabled clWindowText
> Vaya, que utilizo un TEdit de Label... y la misma rutina SI QUE SE
> REFRESCA!!!
>
> No se en que actualización/revisión de Xailer dejó de funcionar, pero se
> que hace ya un tiempo.
>
>
> Un Saludo,
> Xevi.
>
>
> "Bingen Ugaldebere" ha escrit al missatge:510bb9a0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>
> Buenas Xailer Team.
>
> Dado que las Progressbar que utilizamos no parecen admitir texto, he
> decidido poner un label justo encima, pero éste ni se muestra ni se
> actualiza, haga un refresh sleep(x) ni nada por el estilo.
>
> Alguna idea?
>
> Gracias.
Xevi:
Puedes mostrar la fracción de código de programa donde muestras el Label !
A mi siempre me ha refrescado el Label en todas las versiones de Xailer.
Quizas estamos hablando de cosas diferentes
Saludos...
ProgressBar y labels
Publicado: Lun Feb 04, 2013 10:11 pm
por Martin Del Angel
On 2/4/2013 2:29 PM, Xevi wrote:
> Martin,
>
>
> ::oLabel1:lVisible := ::oLabel2:lVisible := ::oLblContador:lVisible
> := ::oCkboxlProces1a1:lChecked
> ::oProgressBar1:nValue := 0
> While .T.
> ::oBtnCancelar:SetFocus()
> If ::lCancelar
> Exit
> EndIf
> ProcessMessages()
>
> cLectura := FReadStr( nHandle, nLenData )
> If cLectura = Chr(26) .or. Empty( cLectura )
> ::oLblReferencia:cText := cRefe
> Exit
> EndIf
> *LOGDEBUG(CLECTURA)
> ::oProgressBar1:nValue ++
> ::oLblContador:cText := Transform( ::oProgressBar1:nValue, "@E
> 999,999" )
> If (AppData:lCitroen .and. Asc( Right( cLectura, 1 ) ) # 10) .or.;
> (!AppData:lCitroen .and. (::oProgressBar1:nValue <
> ::oProgressBar1:nMax .and. Asc( Right( cLectura, 1 ) ) # 10))
> xMsgDlg( ::aIdioma[19,AppData:nIdioma],
> ::aIdioma[16,AppData:nIdioma], mbOK,, IDI_ERROR )
> Exit
> EndIf
>
> cRefe := ""
> cRemp := ""
> If AppData:lCitroen
> For n:=2 to 14
> If SubStr( cLectura, n, 1 ) # " "
> cRefe += SubStr( cLectura, n, 1 )
> EndIf
> Next
> cRefe := PadR( cRefe, 13 )
>
> If ::oCkboxlProces1a1:lChecked //::oProgressBar1:nValue % 50 == 0
> ::oLblReferencia:cText := cRefe
> EndIf
> ...
>
>
> Un Saludo,
> Xevi.
>
>
>
> "Martin Del Angel" ha escrit al missatge:51100a67$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>
> On 2/1/2013 7:59 AM, Xevi wrote:
>> Bingen,
>>
>> a mi tampoco me "refresca" un label (por mas que fuerze
>> ProcessMessages())... en un bucle repetitivo y que muestro una
>> ProgressBar.
>>
>> Lo que hago, es utilizar un TEdit con lBorder .F., lEnabled .F.,
>> nClrPaneDisabled clBtnFace, nClrTextDisabled clWindowText
>> Vaya, que utilizo un TEdit de Label... y la misma rutina SI QUE SE
>> REFRESCA!!!
>>
>> No se en que actualización/revisión de Xailer dejó de funcionar, pero se
>> que hace ya un tiempo.
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Bingen Ugaldebere" ha escrit al missatge:510bb9a0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>>
>> Buenas Xailer Team.
>>
>> Dado que las Progressbar que utilizamos no parecen admitir texto, he
>> decidido poner un label justo encima, pero éste ni se muestra ni se
>> actualiza, haga un refresh sleep(x) ni nada por el estilo.
>>
>> Alguna idea?
>>
>> Gracias.
>
> Xevi:
>
> Puedes mostrar la fracción de código de programa donde muestras el Label !
>
> A mi siempre me ha refrescado el Label en todas las versiones de Xailer.
>
> Quizas estamos hablando de cosas diferentes
>
>
> Saludos...
Xevi:
Agrega estas 2 lineas despues de
::oLblContador:cText := Transform( ::oProgressBar1:nValue, "@E 999,999" )
::oLblContador:Adjust()
::oLblContador:Update()
con eso debe de funcionar
Saludos...
ProgressBar y labels
Publicado: Lun Feb 04, 2013 11:26 pm
por XeviCOMAS
Martin,
Funcionó!!!
Gracias.
Un Saludo,
Xevi.
"Martin Del Angel" ha escrit al missatge:51102415$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
On 2/4/2013 2:29 PM, Xevi wrote:
> Martin,
>
>
> ::oLabel1:lVisible := ::oLabel2:lVisible := ::oLblContador:lVisible
> := ::oCkboxlProces1a1:lChecked
> ::oProgressBar1:nValue := 0
> While .T.
> ::oBtnCancelar:SetFocus()
> If ::lCancelar
> Exit
> EndIf
> ProcessMessages()
>
> cLectura := FReadStr( nHandle, nLenData )
> If cLectura = Chr(26) .or. Empty( cLectura )
> ::oLblReferencia:cText := cRefe
> Exit
> EndIf
> *LOGDEBUG(CLECTURA)
> ::oProgressBar1:nValue ++
> ::oLblContador:cText := Transform( ::oProgressBar1:nValue, "@E
> 999,999" )
> If (AppData:lCitroen .and. Asc( Right( cLectura, 1 ) ) # 10)
> .or.;
> (!AppData:lCitroen .and. (::oProgressBar1:nValue <
> ::oProgressBar1:nMax .and. Asc( Right( cLectura, 1 ) ) # 10))
> xMsgDlg( ::aIdioma[19,AppData:nIdioma],
> ::aIdioma[16,AppData:nIdioma], mbOK,, IDI_ERROR )
> Exit
> EndIf
>
> cRefe := ""
> cRemp := ""
> If AppData:lCitroen
> For n:=2 to 14
> If SubStr( cLectura, n, 1 ) # " "
> cRefe += SubStr( cLectura, n, 1 )
> EndIf
> Next
> cRefe := PadR( cRefe, 13 )
>
> If ::oCkboxlProces1a1:lChecked //::oProgressBar1:nValue % 50 == 0
> ::oLblReferencia:cText := cRefe
> EndIf
> ...
>
>
> Un Saludo,
> Xevi.
>
>
>
> "Martin Del Angel" ha escrit al missatge:51100a67$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>
> On 2/1/2013 7:59 AM, Xevi wrote:
>> Bingen,
>>
>> a mi tampoco me "refresca" un label (por mas que fuerze
>> ProcessMessages())... en un bucle repetitivo y que muestro una
>> ProgressBar.
>>
>> Lo que hago, es utilizar un TEdit con lBorder .F., lEnabled .F.,
>> nClrPaneDisabled clBtnFace, nClrTextDisabled clWindowText
>> Vaya, que utilizo un TEdit de Label... y la misma rutina SI QUE SE
>> REFRESCA!!!
>>
>> No se en que actualización/revisión de Xailer dejó de funcionar, pero se
>> que hace ya un tiempo.
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Bingen Ugaldebere" ha escrit al missatge:510bb9a0$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>>
>> Buenas Xailer Team.
>>
>> Dado que las Progressbar que utilizamos no parecen admitir texto, he
>> decidido poner un label justo encima, pero éste ni se muestra ni se
>> actualiza, haga un refresh sleep(x) ni nada por el estilo.
>>
>> Alguna idea?
>>
>> Gracias.
>
> Xevi:
>
> Puedes mostrar la fracción de código de programa donde muestras el Label !
>
> A mi siempre me ha refrescado el Label en todas las versiones de Xailer.
>
> Quizas estamos hablando de cosas diferentes
>
>
> Saludos...
Xevi:
Agrega estas 2 lineas despues de
::oLblContador:cText := Transform( ::oProgressBar1:nValue, "@E 999,999" )
::oLblContador:Adjust()
::oLblContador:Update()
con eso debe de funcionar
Saludos...