Usando Label (SAY) como ProgressBar

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Usando Label para trabalhar como ProgressBar
A função TelaDelay( .1 ) é só para simular um processamento qualquer ( skip )
O Label nn% vai centralizando conforme a barra anda, porque foi usado o style ss_center

Código: Selecionar todos


   @ 10,10 CONTAINER  oContainer ;
           SIZE       Thisform:nWidth - 20,20 ;
           STYLE      2;
           BACKCOLOR  hwg_GetSysColor( COLOR_3DFACE ) ; 
           BACKSTYLE  2
             
   @ 00,00 SAY oLabel CAPTION "" ;
               OF oContainer ;
               STYLE SS_CENTER ;
               COLOR hwg_RGB(0, 0, 255) 
  
   ThisForm:oContainer:oLabel:Move( 1, 1, 0, 18)

   nCol   := ThisForm:oContainer:nLeft
        
   nWidth := ThisForm:oContainer:nWidth   //200 //ThisForm:oLabel:nWidth //ThisForm:nWidth

   ThisForm:oContainer:oLabel:SetColor( Hwg_RGB( 0, 0, 255 ), hwg_RGB(255, 255, 0),  .T. ) 
                        
   nTot := 100
                        
   FOR I:=1 TO nTot
      nFinishCol := nCol + 1 + ( ( nWidth - 2 ) * i / nTot )
      ThisForm:oContainer:oLabel:Move( 1, 1, nFinishCol-13, 18 )
      ThisForm:oContainer:oLabel:SetText(  Hb_NtoS ( Int( ( i / nTot ) * 100 ) ) + "%" ) 
      TelaDelay( .1 )
   NEXT
   
FUNCTION TelaDelay( nTime ) 
LOCAL iTime := Seconds()

   DO WHILE Seconds() - iTime < nTime
      hwg_DoEvents()
   ENDDO
    
RETURN Nil  

2019-10-18 11_59_27-Form1.png
2019-10-18 11_59_27-Form1.png (10.07 KiB) Exibido 3940 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

2019-10-18 15_36_37-Form1.png
2019-10-18 15_36_37-Form1.png (9.92 KiB) Exibido 3933 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Para esse último trocar para
Com STYLE 5 fica mais destacado a linha do box

Código: Selecionar todos

@ 10,10 CONTAINER  oContainer ;
	           SIZE       Thisform:nWidth - 20,20 ;
	           STYLE      5;
	           BACKCOLOR  hwg_GetSysColor( COLOR_3DFACE ) ;
	           BACKSTYLE  2
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usando Label (SAY) como ProgressBar

Mensagem por JoséQuintas »

Gostei.

E pra quem não percebeu:

Acaba sendo praticamente como criar um controle do usuário.
Já comentei muito sobre isso: a LIB não precisa ter controles sofisticados, basta permitir que se criem novos controles a partir dos existentes!!!
Não lembro disso em outra LIB.

Gostei mesmo, abre muitas possibilidades.

É no estilo da GTWVG, em OOP...
Depois do MySQL, pode ser minha próxima migração.
Misturando com GTWVG, lógico, porque não vou querer perder recursos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Dentro do WITH OBJECT, gosto muito desse recurso do harbour

Código: Selecionar todos

   WITH OBJECT ThisForm:oContainer
      :oLabel:Move( 1, 1, 0, 18 )
      nCol   := :nLeft
      nWidth := :nWidth  
      :oLabel:SetColor( N_BLACK, N_CYAN,  .T. ) 
      *
      FOR I:=1 TO nTot
         nFinishCol := nCol + 1 + ( ( nWidth - 2 ) * i / nTot )
         IF Mod( i, 100 ) = 0
            :oLabel:Move( 1, 1, nFinishCol-13, 18 )
            :oLabel:SetText(  Hb_NtoS ( Int( ( i / nTot ) * 100 ) ) + "%" ) 
         ENDIF
         hwg_DoEvents()  
      NEXT
      *
      TelaDelay( 1 )
      *
      :oLabel:SetText("")
      :oLabel:SetColor( Hwg_Rgb( 0, 0, 0 ), hwg_GetSysColor( COLOR_3DFACE ), .T. ) 
   END
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »


Agora usando um JPG

Código: Selecionar todos

  WITH OBJECT ThisForm:oContainer
      :oPicture:ReplaceBitMap( 'gradient001.jpg' )
      :oPicture:Refresh()
      :oPicture:Move( 1, 1, 0, 21 )
      nCol   := :nLeft
      nWidth := :nWidth  
      *
      FOR I:=1 TO nTot
         nFinishCol := nCol + 1 + ( ( nWidth - 2 ) * i / nTot )
         IF Mod( i, 10 ) = 0
            :oPicture:Move( 1, 1, nFinishCol-13, 29 )
         ENDIF
         TelaDelay( .1 )
      NEXT
      *
      TelaDelay( 5 )
      :oPicture:Move( 1, 1, 0, 29 )
      *
   END
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Código: Selecionar todos

  nTot := 1000000
          
   WITH OBJECT ThisForm:oContainer
      :oPicture:ReplaceBitMap( 'gradient001.jpg' )
      :oPicture:Refresh()
      :oPicture:Move( 1, 1, 0, 29 )
      nCol   := :nLeft
      nWidth := :nWidth  
      *
      FOR I:=1 TO nTot
         nFinishCol := nCol + 1 + ( ( nWidth - 2 ) * i / nTot )
         IF Mod( i, 100 ) = 0
            :oPicture:Move( 1, 1, nFinishCol-13, 29 )
            :oPicture:Refresh()
            hwg_DoEvents()
         ENDIF
      NEXT
      *
      TelaDelay( 5 )
      :oPicture:Move( 1, 1, 0, 29 )
      *
   END
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Agora os fontes da brincadeira
h-ProgressBar.zip
(3.66 MiB) Baixado 222 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Usando Label (SAY) como ProgressBar

Mensagem por sygecom »

Parabéns, ficou muito bom.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Texto sobre imagem jpg

Código: Selecionar todos

      SetProgressBar( 0, 0, 10, 10, Thisform:nWidth - 5, 20 )

      nTot := 100
      
      FOR I:=1 TO nTot
         SetProgressBar(nTot, i)
         hwg_DoEvents()
         TelaDelay(.1)
      NEXT
      
      TelaDelay(1)
      
      SetProgressBar()
      
FUNCTION SetProgressBar( nTotReg, nReg, nLeft, nTop, nWidth, nHeight )

   Hb_Default(@nTotReg, 0 )
   Hb_Default(@nReg, 0 )
   Hb_Default(@nLeft, 0)
   Hb_Default(@nTop, 0)
   Hb_Default(@nWidth, 0)
   Hb_Default(@nHeight, 0)
   
   IF nLeft != 0 .AND. nTop != 0 .AND. nWidth != 0
      @ nLeft,nTop CONTAINER  oContainer ;
                   SIZE       nWidth - 20,20 ;
                   STYLE      10 ;
                   BACKCOLOR  hwg_GetSysColor( COLOR_3DFACE ) ; 
                   BACKSTYLE  2
   
      @ 0,0 BITMAP  oPicture ;
            SHOW    "" ;
            OF      oContainer ;
            SIZE    0, 0 ;
            STRETCH 2 

      @ 0,0 SAY EXTENDED oLabel ;
                CAPTION  "" ;
                OF       oContainer ;
                SIZE     oContainer:nWidth, 18 ;
                STYLE    SS_CENTER ;
                COLOR    N_BLACK ;
                BACKTRANSPARENT 

   ENDIF

   WITH OBJECT ThisForm:oContainer
      IF nTotReg > 0 .AND. nReg > 0
         IF nReg = 1
            :oLabel:Move( (:nWidth - 30 ) / 2, 1, 30, 18 )
            :oPicture:ReplaceBitMap( 'GRADIENT001.JPG' )
            :oPicture:Move( 1, 1, 0, 18 )
            :oPicture:Refresh()
         ENDIF
         nCol   := :nLeft
         nWidth := :nWidth  
         *
         nFinishCol := nCol + 1 + ( ( nWidth - 2 ) * nReg / nTotReg )
         :oPicture:Move( 1, 1, nFinishCol-13, 18 )
         :oLabel:SetText(  Hb_NtoS ( Int( ( nReg / nTotReg ) * 100 ) ) + "%" ) 
      ELSE
         *
         *
         InkeyGui(1)
         :oLabel:SetText("")
         :oLabel:Move( 1, 1, 0, 18 )
         :oPicture:Move( 1, 1, 0, 18 )
         :oPicture:Refresh()
         :oLabel:SetColor( N_BLACK, hwg_GetSysColor( COLOR_3DFACE ), .T. ) 
      ENDIF
   END
       
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usando Label (SAY) como ProgressBar

Mensagem por asimoes »

Última versão

Código: Selecionar todos

FUNCTION SetProgressBar( nTotReg, nReg, nLeft, nTop, nWidth, nHeight, nAlturaPict, nAlturaText, cImagem )
THREAD STATIC xnLeft, xnTop, xnWidth, xnHeight, xAlturaPict, xAlturaText, xImagem
LOCAL nCol, nStartRow, nStartCol, nWidthRow, nDesc

   nTotReg     := Hb_DefaultValue(nTotReg, 0)
   nReg        := Hb_DefaultValue(nReg, 0)
   nLeft       := Hb_DefaultValue(nLeft, 0)        
   nTop        := Hb_DefaultValue(nTop, 0)
   nWidth      := Hb_DefaultValue(nWidth, 0)
   nHeight     := Hb_DefaultValue(nHeight, 0)
   nAlturaPict := Hb_DefaultValue(nAlturaPict, 32)
   nAlturaText := Hb_DefaultValue(nAlturaText, 18)
   cImagem     := Hb_DefaultValue(cImagem, "P:\GERAL\HARBOUR\GRADIENT007.JPG")     
                        
   IF nLeft != 0 .AND. nTop != 0 .AND. nWidth != 0

     xnLeft      := nLeft
     xnTop       := nTop   
     xnWidth     := nWidth   
     xnHeight    := nHeight
     xAlturaPict := nAlturaPict
     xAlturaText := nAlturaText
     xImagem     := cImagem
      
     InitProgress( xnLeft, xnTop, xnWidth, xnHeight, xAlturaPict, xAlturaText )
          
   ELSE

      WITH OBJECT oThisForm:oContainer
         IF nTotReg > 0 .AND. nReg > 0
            IF nReg = 1
               :oLabel:Move( ( :nWidth - 114 ) / 2, ( :nHeight-18 ) / 2, 114, xAlturaText )
               :oPicture:ReplaceBitMap( xImagem )
               :oPicture:Move( 1, 1, 0, :nHeight )
               :oPicture:Refresh()
            ENDIF
            nCol      := :nLeft
            nWidthRow := :nWidth 
            nStartRow := 1
            nStartCol := 1
            nDesc     := nCol + 2
            *
            nFinishCol := nCol + 1 + ( ( nWidthRow - 2 ) * nReg / nTotReg )
            :oPicture:Move( nStartCol, nStartRow, Int( nFinishCol ) - nDesc, :nHeight-2 )
            IF nReg < nTotReg
               :oLabel:SetText(  "Aguarde... (" + Hb_NtoS ( Int( ( nReg / nTotReg ) * 100 ) ) + "%)" ) 
            ELSE
               :oLabel:SetText(  "Concluído... (" + Hb_NtoS ( Int( ( nReg / nTotReg ) * 100 ) ) + "%)" ) 
            ENDIF 
         ELSE
            *
            *
            TelaDelay(1) 
            :Visible( .F. )
            :Visible( .T. )
            :oPicture:Move( 1, 1, :nWidth-3, :nHeight+1 )
            :oPicture:Move( 1, 1, 0, :nHeight+1 )
            :oPicture:Refresh()
            :Refresh()
            :oLabel:SetText(" ")
            :oLabel:SetColor( N_BLACK, hwg_GetSysColor( COLOR_3DFACE ), .T. ) 
         ENDIF
      END
   ENDIF
   
RETURN Nil

FUNCTION InitProgress( xnLeft, xnTop, xnWidth, xnHeight, xAlturaPict, xAlturaText )

   oContainer := Nil
   oPicture   := Nil
   oLabel     := Nil
   
   IF Mod( xnWidth, 2 ) = 0
      xnWidth++
   ENDIF
   
   @ xnLeft,xnTop CONTAINER  oContainer ;
                  SIZE       xnWidth - xnLeft, xAlturaPict ;
                  STYLE      10 ;
                  BACKCOLOR  hwg_GetSysColor( COLOR_3DFACE ) ; 
                  BACKSTYLE  2

   @ 0,0 BITMAP  oPicture ;
         SHOW    "" ;
         OF      oContainer ;
         SIZE    0, 0 ;
         STRETCH 0 

   @ 0,0 SAY EXTENDED oLabel ;
             CAPTION  "" ;
             OF       oContainer ;
             SIZE     oContainer:nWidth, xAlturaText ;
             STYLE    SS_CENTER ;
             COLOR    N_BLACK ;
             BACKTRANSPARENT 

RETURN Nil
                
RETURN Nil

FUNCTION TelaDelay( nTime ) 
LOCAL iTime := Seconds()

   DO WHILE Seconds() - iTime < nTime
      hwg_DoEvents()
   ENDDO
    
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder