FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour PROGRESS BAR Problem !
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
PROGRESS BAR Problem !
Posted: Tue Oct 02, 2012 08:06 AM
Hi,
I have problem with PROGRESS BAR
If value is less than 40000 going well but on biggest values example 400000 progress bar is finished (going to 100%) somewhere between 40000 - 45000
Method StepIt() dont solve the problem
(OS: XP SP3)

Sample:
Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   local oDlg, oProg1, oProg2, oSay1, oSay2

   DEFINE DIALOG oDlg TITLE "Progress Bars"

   @  5,  5 PROGRESS oProg1 SIZE 80, 12 PIXEL
   @  5,100 SAY oSay1 PROMPT "0" SIZE 50,12 PIXEL


   @ 20,  5 PROGRESS oProg2 SIZE 80, 12 PIXEL
   @ 20,100 SAY oSay2 PROMPT "0" SIZE 50,12 PIXEL

   @ 3,  9 BUTTON "Ok" ACTION oDlg:End()

   oDlg:bStart = { || Increase( oProg1, oProg2, oSay1, oSay2 ) }

   ACTIVATE DIALOG oDlg CENTER ;
      ON INIT ( oProg1:SetRange( 0,  40000 ), oProg1:SetStep( 1 ),;
                oProg2:SetRange( 0, 400000 ), oProg2:SetStep( 1 ) )

return nil

function Increase( oProg1, oProg2, oSay1, oSay2 )

   local n

   for n = 0 to 40000
      // oProg1:StepIt()
      oProg1:SetPos( n )
      if n/1000 = int(n/1000); oSay1:SetText( n ); endif
      SysRefresh()
   next

   for n = 0 to 400000
      // oProg2:StepIt()
      oProg2:SetPos( n )
      if n/1000 = int(n/1000); oSay2:SetText( n ); endif
      SysRefresh()
   next

return nil


Any Suggestions ?

Best regards,
Posts: 663
Joined: Mon Dec 05, 2005 11:22 PM
Re: PROGRESS BAR Problem !
Posted: Tue Oct 02, 2012 05:18 PM
You need to re-initialize n to 0 after the first bar update or initialize it as part of the "for" statement.
Code (fw): Select all Collapse
// for n = 0 to 40000
  for n := 0 to 40000
      // oProg1:StepIt()
      oProg1:SetPos( n )
      if n/1000 = int(n/1000); oSay1:SetText( n ); endif
      SysRefresh()
   next

//   for n = 0 to 400000
   for n := 0 to 400000
      // oProg2:StepIt()
      oProg2:SetPos( n )
      if n/1000 = int(n/1000); oSay2:SetText( n ); endif
      SysRefresh()
   next
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: PROGRESS BAR Problem !
Posted: Tue Oct 02, 2012 05:54 PM
THANKS for reply

But it does not matter ... have you tested ?
The same result

Lets take only one progress bar
Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   local oDlg, oProg,oSay

   DEFINE DIALOG oDlg TITLE "Progress Bars"

   @  5,  5 PROGRESS oProg SIZE 80, 12 PIXEL
   @  5,100 SAY oSay PROMPT "0" SIZE 50,12 PIXEL


   oDlg:bStart = { || Increase( oProg, oSay ) }

   ACTIVATE DIALOG oDlg CENTER ;
      ON INIT ( oProg:SetRange( 0,  400000 ), oProg:SetStep( 1 ) )

return nil

function Increase( oProg, oSay )

local n := 0

   for n := 0 to 400000
      oProg:SetPos( n )
      if n/1000 = int(n/1000); oSay:SetText( n ); endif
      SysRefresh()
   next

return nil


The same result ...
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Re: PROGRESS BAR Problem !
Posted: Tue Oct 02, 2012 06:13 PM
A workaround:

Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   local oDlg, oProg,oSay

   DEFINE DIALOG oDlg TITLE "Progress Bars"

   @  5,  5 PROGRESS oProg SIZE 80, 12 PIXEL
   @  5,100 SAY oSay PROMPT "0" SIZE 50,12 PIXEL


   oDlg:bStart = { || Increase( oProg, oSay ) }

   ACTIVATE DIALOG oDlg CENTER ;
      ON INIT ( oProg:SetRange( 0, 100 ), oProg:SetStep( 1 ) )

return nil

function Increase( oProg, oSay )

local n := 0

   for n := 0 to 400000
      oProg:SetPos( n / 4000 )
      if n/1000 = int(n/1000); oSay:SetText( n ); endif
      SysRefresh()
   next

return nil


EMG
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: PROGRESS BAR Problem !
Posted: Thu Oct 04, 2012 12:51 PM

Thanks for reply Enrico
That is going well but WHY must to do that ????

Best Regards,

Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Re: PROGRESS BAR Problem !
Posted: Thu Oct 04, 2012 01:39 PM

I don't know, sorry. :-(

EMG

Continue the discussion