David
I tried your sample on a 700 megahertz desktop and a 500 mhz. laptop with
basically the same flicker you are seeing. This is a (WINDOWS) problem
most likely baecause it just can't process the counting while loop and
screen refreshes fast enough. With the example Razzak has provided and
the one I did below, the while loop process in the background but only
updates the screen once a second... I have written a couple of crunching
VB apps that have the same problem -- they are copying, zipping, moving
files so much that the program ignores a lot of code where I update labels
and such in the vb GUI.. Is there any way you could use the code below and
just update the count once a second?
CLEAR ALL VAR
*( The next two variables are all that are need to be set to run
and or abort the following procedure.
Set the variable vm_seccount to the amount of seconds you
want to run the pause 4 for, and if your processing get's
completed before your seconds are up the just set the
variable vm_abort to a value of 1 and it will drop out
of this loop )
SET VAR vm_seccount INTEGER = 20
SET VAR vm_abort INTEGER = 0
SET CAPTION ' '
SET VAR vm_starttime TIME
SET VAR vm_starttime = (.#TIME)
SET VAR vm_endtime TIME
SET VAR vm_endtime = (.vm_starttime + .vm_seccount)
SET VAR vm_timeplussec TIME
SET VAR vm_timeplussec = (.vm_starttime + 1)
SET VAR vm_msgnum INTEGER = 1
SET VAR vm_caption TEXT = 'J. Limburg PAUSE 4 Demo ...'
CLS
SET VAR vm_msg = 'Processing. Please wait ... '
PAUSE 3 USING .vm_msg CAPTION .vm_caption
SET VAR vm_adddots = '...'
SET VAR vm_dotcount INTEGER = 1
SET VAR vm_msg1 TEXT = NULL
SET VAR vm_cyclewatch INTEGER = 1
WHILE vm_starttime < .vm_endtime THEN
SET VAR vm_starttime = (.#TIME)
IF vm_starttime = .vm_timeplussec AND vm_abort <> 1 THEN
IF vm_cyclewatch > 5 THEN
SET VAR vm_msgnum = 1
PAUSE 4 USING 'Processing. Please wait ...' CAPTION .vm_caption
SET VAR vm_cyclewatch = 1
SET VAR vm_dotcount = 1
SET VAR vm_msg1 = NULL
ENDIF
WHILE vm_dotcount < .vm_msgnum THEN
SET VAR vm_msg1 = (.vm_msg1 + .vm_adddots)
SET VAR vm_dotcount = (.vm_dotcount + 1)
ENDWHILE
SET VAR vm_msg2user = (.vm_msg + .vm_msg1)
PAUSE 4 USING .vm_msg2user
SET VAR vm_cyclewatch = (.vm_cyclewatch + 1)
SET VAR vm_msgnum = (.vm_msgnum + 1)
SET VAR vm_timeplussec = (.vm_starttime + 1)
ENDIF
ENDWHILE
CLEAR ALL VAR
CLS -- Will clear the Pause 4 box from the screen.
RETURN
Jim Limburg
--- "David M. Blocker" <[EMAIL PROTECTED]> wrote:
> Razzak
>
> Help! What am I missing?
>
> I was so excited about the PAUSE 3 and PAUSE 4 that I tried to apply it to
> program I'm writing that needed a counter. Here is a small demo file:
>
> cls
> pause 2 using 'Counting from 1 to 10000; now on 10000' at 5 10
>
> pause 3 using 'Counting from 1 to 10000; now on 0' at 5 10
>
> set var von = 0
> while von < 10000 then
> set var von = (.von + 1)
> set var vmessage = ('Counting from 1 to 10000; now on'&(ctxt(.von)) )
> write .vmessage at 20 2
> pause 4 using .vmessage
> endwhile
>
> I include the PAUSE 2 at the top for contrast. When I run this in R:Base
> (tried it on build 1.850 and the beta, 1.854, both on a Dell Windows 98
> portable and Dell Windows XP desktop), I get two problems:
>
> 1. The screen does a big time flicker with the PAUSE 4
> 2. The counter doesn't show on the right! All I get is
> "Counting from 1 to 10000; now on" in the box
>
> I include the WRITE command to show that there's nothing wrong with the
> variable vMessage - WRITE shows the progression just fine.
>
> David Blocker
>
> ----- Original Message -----
> From: "A. Razzak Memon" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Thursday, June 13, 2002 12:14 PM
> Subject: Re: Another novice form question - Razzak's Reply
>
>
> >
> > Bob,
> >
> > A new option of PAUSE 4 has been added in The Glorious R:BASE
> > 2000 (ver 6.5++) for Windows.
> >
> > There are cases when you would like to display any message using
> > PAUSE 3 command and continue processing things behind the scene.
> > If you also have to display any progress notes, etc., without flicker,
> > now you can use the option of PAUSE 4.
> >
> > The new PAUSE 4 works just like PAUSE 3 except than instead of
> > painting a new dialog box with the message it will use the existing
> > displayed PAUSE 3 box and just redo the message inside the box.
> > This can be used to eliminate flicker for those times when you are
> > using PAUSE 3 to display progress in an application.
> >
> > Example:
> >
> > -- LoopD.RMD To Demonstrate the Use of PAUSE 3 and PAUSE 4
> >
> > CLEAR ALL VAR
> > SET CAPTION ' '
> > SET VAR v1 TIME
> > SET VAR v1 = (.#Time)
> > SET VAR v2 TIME
> > SET VAR v2 = (.v1 + 5)
> > SET VAR v3 TIME
> > SET VAR v3 = (.v1 + 1)
> > SET VAR MsgNum INTEGER = 1
> >
> > CLS
> > PAUSE 3 USING 'Wait for this to quit...' CAPTION 'Demo of New PAUSE 4
> > Option ...'
> >
> > WHILE v1 < .v2 THEN
> > SET VAR v1 = (.#time)
> > IF v1 = .v3 THEN
> > SWITCH (.MsgNum)
> > CASE 1
> > PAUSE 4 USING 'Hello'
> > BREAK
> > CASE 2
> > PAUSE 4 USING 'Developers ...'
> > BREAK
> > CASE 3
> > PAUSE 4 USING 'Check'
> > BREAK
> > CASE 4
> > PAUSE 4 USING 'This'
> > BREAK
> > CASE 5
> > PAUSE 4 USING 'Out ...'
> > BREAK
> > ENDSW
> > SET VAR MsgNum = (.MsgNum + 1)
> > SET VAR v3 = (.v1 + 1)
> > ENDIF
> > ENDWHILE
> > CLEAR ALL VAR
> > RETURN
> >
> > For more details and examples: http://www.RSyntax.com
> >
> > Enjoy and make sure to have fun!
> >
> > Very Best Regards,
> >
> > Razzak.
> >
> > At 11:59 AM 6/13/2002 -0500, Bob Thompson wrote:
> >
> > >I want to display a "count down" counter
> > >on a form while the app is processing a
> > >somewhat large data set. I have a push button
> > >on the form that executes the program and
> > >I want the form to display something like :
> > > "Processing record# 20 of 10000"
> > >
> > >This app may take 1-2 minutes to completely
> > >execute and this is feed back to the user.
> > >
> > >I have tried the SCREEN RESTORE, WRITE
> > >and RECALC commands, but cannot get the
> > >form to show updated variables until the procedure
> > >has finished. (It is then a moot point of course!)
> > > I do not want to use the FEEDBACK option as
> > > I would like more control over what and
> > >how the counter is displayed.
> > >
> > >You all have been very helpful and I appreciate
> > >the assistance. Again, simply how do you
> > >get a variable to redisplay at will on a form
> > >while you are performing a WHILE LOOP or
> > >DECLARE CURSOR ?
> >
> >
> > ================================================
> > TO SEE MESSAGE POSTING GUIDELINES:
> > Send a plain text email to [EMAIL PROTECTED]
> > In the message body, put just two words: INTRO rbase-l
> > ================================================
> > TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED]
> > In the message body, put just two words: UNSUBSCRIBE rbase-l
> > ================================================
> > TO SEARCH ARCHIVES:
> > http://www.mail-archive.com/rbase-l%40sonetmail.com/
> >
>
>
> ================================================
> TO SEE MESSAGE POSTING GUIDELINES:
> Send a plain text email to [EMAIL PROTECTED]
> In the message body, put just two words: INTRO rbase-l
> ================================================
> TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED]
> In the message body, put just two words: UNSUBSCRIBE rbase-l
> ================================================
> TO SEARCH ARCHIVES:
> http://www.mail-archive.com/rbase-l%40sonetmail.com/
__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
================================================
TO SEE MESSAGE POSTING GUIDELINES:
Send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: INTRO rbase-l
================================================
TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: UNSUBSCRIBE rbase-l
================================================
TO SEARCH ARCHIVES:
http://www.mail-archive.com/rbase-l%40sonetmail.com/