+ Reply to Thread
Results 1 to 5 of 5

Timed and blinking messages

  1. #1
    Mats Samson
    Guest

    Timed and blinking messages

    I found recently a great solution to timed messages at The Xcel Files site,
    http://www.xcelfiles.com by Ivan F Moala (Thanks Ivan!). Ive seen many asked
    for it but no good solution has been provided. The example code was about
    animated GIFs but with only a slight modification I changed it to use
    whatever objects I like in my Forms. The most obvious usage would be to
    display a self-closing message in the form when a certain condition is met,
    maybe a warning. Warning messages in the status bar is not very alerting,
    they have to appear where the user has his focus! Ive used labels and they
    can stay invisible until theyre needed and you can even set their attributes
    to alert the user even more.
    Here is a blinking message that automatically disappears after some time:
    UserForm_Initialize()
    LabelRateWarn1.Visible = False
    End Sub

    Other TriggerSub ()
    .......
    If ARate <> BRate Then
    Warning
    End If
    End Sub

    Sub Warning()
    Dim y As Single, x As Single, z As Single
    Dim Start, Delay
    For x = 1 To 10
    For y = 1 To 5
    Start = Timer
    Delay = Start + 0.15
    Do While Timer < Delay
    LabelRateWarn1.Visible = True
    DoEvents
    Loop
    Next y
    For z = 1 To 5
    Start = Timer
    Delay = Start + 0.15
    Do While Timer < Delay
    LabelRateWarn1.Visible = False
    DoEvents
    Loop
    Next z
    Next x
    LabelRateWarn1.Visible = False
    End Sub
    If you dont want the blinking, remove the loop Z.

    Now to my problem!
    Im very fond of reusing code and I have several situations in various
    locations of my multipage form where Id like to display a message to the
    user.
    How do I declare a LabelName as a variable and transfer the variable between
    procedures?
    From TriggerSub_1 I would put the variable Mess = LabelRateWarn1
    and go to Warning (Mess)
    From TriggerSub_2 I would put the variable Mess = LabelPriceWarn2
    and go to the same Warning (Mess)
    where I have the actions Mess.Visible = True/False.
    It could be even more sophisticated if I could send x, y, and z variables
    from the Trigger-subs as well. Then I could set speed and length of the
    blinking message.

    Furthermore Id like to have a message displayed until a click event! Say
    that a
    message is displayed at a menu. If the menu is idle, itll continue to be
    displayed until the user clicks a either a specified button or the eventually
    the form itself (non-idle state).

    Can anybody help me with these?


  2. #2
    Toppers
    Guest

    RE: Timed and blinking messages

    Hi,
    Example of passing parameters:

    Sub Other_TriggerSub()
    Arate = 10
    Brate = 20
    If Arate <> BRate Then
    Call Warning("LabelRateWarn1", 0.15)
    End If
    End Sub

    Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
    Dim y As Single, x As Single, z As Single
    Dim Start, Delay
    For x = 1 To 10
    For y = 1 To 5
    Start = Timer
    Delay = Start + AddTime
    Do While Timer < Delay
    Me.Controls(Mess).Visible = True
    DoEvents
    Loop
    Next y
    For z = 1 To 5
    Start = Timer
    Delay = Start + AddTime
    Do While Timer < Delay
    Me.Controls(Mess).Visible = False
    DoEvents
    Loop
    Next z
    Next x
    Me.Controls(Mess).Visible = False
    End Sub


    HTH

    "Mats Samson" wrote:

    > I found recently a great solution to timed messages at The Xcel Files site,
    > http://www.xcelfiles.com by Ivan F Moala (Thanks Ivan!). I’ve seen many asked
    > for it but no good solution has been provided. The example code was about
    > animated GIF’s but with only a slight modification I changed it to use
    > whatever objects I like in my Forms. The most obvious usage would be to
    > display a self-closing message in the form when a certain condition is met,
    > maybe a warning. Warning messages in the status bar is not very alerting,
    > they have to appear where the user has his focus! I’ve used labels and they
    > can stay invisible until they’re needed and you can even set their attributes
    > to alert the user even more.
    > Here is a blinking message that automatically disappears after some time:
    > UserForm_Initialize()
    > LabelRateWarn1.Visible = False
    > End Sub
    >
    > Other TriggerSub ()
    > ......
    > If ARate <> BRate Then
    > Warning
    > End If
    > End Sub
    >
    > Sub Warning()
    > Dim y As Single, x As Single, z As Single
    > Dim Start, Delay
    > For x = 1 To 10
    > For y = 1 To 5
    > Start = Timer
    > Delay = Start + 0.15
    > Do While Timer < Delay
    > LabelRateWarn1.Visible = True
    > DoEvents
    > Loop
    > Next y
    > For z = 1 To 5
    > Start = Timer
    > Delay = Start + 0.15
    > Do While Timer < Delay
    > LabelRateWarn1.Visible = False
    > DoEvents
    > Loop
    > Next z
    > Next x
    > LabelRateWarn1.Visible = False
    > End Sub
    > If you don’t want the blinking, remove the loop Z.
    >
    > Now to my problem!
    > I’m very fond of reusing code and I have several situations in various
    > locations of my multipage form where I’d like to display a message to the
    > user.
    > How do I declare a LabelName as a variable and transfer the variable between
    > procedures?
    > From TriggerSub_1 I would put the variable Mess = LabelRateWarn1
    > and go to Warning (Mess)
    > From TriggerSub_2 I would put the variable Mess = LabelPriceWarn2
    > and go to the same Warning (Mess)
    > where I have the actions Mess.Visible = True/False.
    > It could be even more sophisticated if I could send x, y, and z variables
    > from the Trigger-subs as well. Then I could set speed and length of the
    > blinking message.
    >
    > Furthermore I’d like to have a message displayed until a click event! Say
    > that a
    > message is displayed at a menu. If the menu is idle, it’ll continue to be
    > displayed until the user clicks a either a specified button or the eventually
    > the form itself (non-idle state).
    >
    > Can anybody help me with these?
    >


  3. #3
    Mats Samson
    Guest

    RE: Timed and blinking messages

    Thanks Toppers,
    it works great!
    Can you also solve the last problem, looping the procedure endlessly if the
    computer is idle, i.e. until the user do a OnClick or Click event.

    Furthermore I'd like to know if I can run/start a procedure located in a
    userform
    from a module? It would be convenient if the form is in Hide state while I'm
    doing other things when I run Userform.Show vbmodeless, I'd like to run the
    below Warning procedure.

    "Toppers" wrote:

    > Hi,
    > Example of passing parameters:
    >
    > Sub Other_TriggerSub()
    > Arate = 10
    > Brate = 20
    > If Arate <> BRate Then
    > Call Warning("LabelRateWarn1", 0.15)
    > End If
    > End Sub
    >
    > Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
    > Dim y As Single, x As Single, z As Single
    > Dim Start, Delay
    > For x = 1 To 10
    > For y = 1 To 5
    > Start = Timer
    > Delay = Start + AddTime
    > Do While Timer < Delay
    > Me.Controls(Mess).Visible = True
    > DoEvents
    > Loop
    > Next y
    > For z = 1 To 5
    > Start = Timer
    > Delay = Start + AddTime
    > Do While Timer < Delay
    > Me.Controls(Mess).Visible = False
    > DoEvents
    > Loop
    > Next z
    > Next x
    > Me.Controls(Mess).Visible = False
    > End Sub
    >
    >
    > HTH
    >
    > "Mats Samson" wrote:
    >
    > > I found recently a great solution to timed messages at The Xcel Files site,
    > > http://www.xcelfiles.com by Ivan F Moala (Thanks Ivan!). I’ve seen many asked
    > > for it but no good solution has been provided. The example code was about
    > > animated GIF’s but with only a slight modification I changed it to use
    > > whatever objects I like in my Forms. The most obvious usage would be to
    > > display a self-closing message in the form when a certain condition is met,
    > > maybe a warning. Warning messages in the status bar is not very alerting,
    > > they have to appear where the user has his focus! I’ve used labels and they
    > > can stay invisible until they’re needed and you can even set their attributes
    > > to alert the user even more.
    > > Here is a blinking message that automatically disappears after some time:
    > > UserForm_Initialize()
    > > LabelRateWarn1.Visible = False
    > > End Sub
    > >
    > > Other TriggerSub ()
    > > ......
    > > If ARate <> BRate Then
    > > Warning
    > > End If
    > > End Sub
    > >
    > > Sub Warning()
    > > Dim y As Single, x As Single, z As Single
    > > Dim Start, Delay
    > > For x = 1 To 10
    > > For y = 1 To 5
    > > Start = Timer
    > > Delay = Start + 0.15
    > > Do While Timer < Delay
    > > LabelRateWarn1.Visible = True
    > > DoEvents
    > > Loop
    > > Next y
    > > For z = 1 To 5
    > > Start = Timer
    > > Delay = Start + 0.15
    > > Do While Timer < Delay
    > > LabelRateWarn1.Visible = False
    > > DoEvents
    > > Loop
    > > Next z
    > > Next x
    > > LabelRateWarn1.Visible = False
    > > End Sub
    > > If you don’t want the blinking, remove the loop Z.
    > >
    > > Now to my problem!
    > > I’m very fond of reusing code and I have several situations in various
    > > locations of my multipage form where I’d like to display a message to the
    > > user.
    > > How do I declare a LabelName as a variable and transfer the variable between
    > > procedures?
    > > From TriggerSub_1 I would put the variable Mess = LabelRateWarn1
    > > and go to Warning (Mess)
    > > From TriggerSub_2 I would put the variable Mess = LabelPriceWarn2
    > > and go to the same Warning (Mess)
    > > where I have the actions Mess.Visible = True/False.
    > > It could be even more sophisticated if I could send x, y, and z variables
    > > from the Trigger-subs as well. Then I could set speed and length of the
    > > blinking message.
    > >
    > > Furthermore I’d like to have a message displayed until a click event! Say
    > > that a
    > > message is displayed at a menu. If the menu is idle, it’ll continue to be
    > > displayed until the user clicks a either a specified button or the eventually
    > > the form itself (non-idle state).
    > >
    > > Can anybody help me with these?
    > >


  4. #4
    Toppers
    Guest

    RE: Timed and blinking messages

    Mats,

    Something along these lines .....

    Variable "End_Pause" is set when Userform is initialised and changed when
    Userform is clicked. Until the change, the Warning macro will loop endlessly.

    And you cannot call a Userform module from a general module.


    Public End_Pause As Boolean

    Private Sub UserForm_Click()
    End_Pause = True
    End Sub
    Sub Other_TriggerSub()
    Arate = 10
    BRate = 20
    If Arate <> BRate Then
    Call Warning("LabelRateWarn1", 0.15)
    End If
    End Sub

    Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
    Dim y As Single, x As Single, z As Single
    Dim Start, Delay
    Do
    For y = 1 To 5
    Start = Timer
    Delay = Start + AddTime
    Do While Timer < Delay
    Me.Controls(Mess).Visible = True
    DoEvents
    Loop
    Next y
    For z = 1 To 5
    Start = Timer
    Delay = Start + AddTime
    Do While Timer < Delay
    Me.Controls(Mess).Visible = False
    DoEvents
    Loop
    Next z
    Loop Until End_Pause
    End_Pause = False
    Me.Controls(Mess).Visible = False
    End Sub

    Private Sub UserForm_Initialize()
    End_Pause = True
    End Sub


    "Mats Samson" wrote:

    > Thanks Toppers,
    > it works great!
    > Can you also solve the last problem, looping the procedure endlessly if the
    > computer is idle, i.e. until the user do a OnClick or Click event.
    >
    > Furthermore I'd like to know if I can run/start a procedure located in a
    > userform
    > from a module? It would be convenient if the form is in Hide state while I'm
    > doing other things when I run Userform.Show vbmodeless, I'd like to run the
    > below Warning procedure.
    >
    > "Toppers" wrote:
    >
    > > Hi,
    > > Example of passing parameters:
    > >
    > > Sub Other_TriggerSub()
    > > Arate = 10
    > > Brate = 20
    > > If Arate <> BRate Then
    > > Call Warning("LabelRateWarn1", 0.15)
    > > End If
    > > End Sub
    > >
    > > Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
    > > Dim y As Single, x As Single, z As Single
    > > Dim Start, Delay
    > > For x = 1 To 10
    > > For y = 1 To 5
    > > Start = Timer
    > > Delay = Start + AddTime
    > > Do While Timer < Delay
    > > Me.Controls(Mess).Visible = True
    > > DoEvents
    > > Loop
    > > Next y
    > > For z = 1 To 5
    > > Start = Timer
    > > Delay = Start + AddTime
    > > Do While Timer < Delay
    > > Me.Controls(Mess).Visible = False
    > > DoEvents
    > > Loop
    > > Next z
    > > Next x
    > > Me.Controls(Mess).Visible = False
    > > End Sub
    > >
    > >
    > > HTH
    > >
    > > "Mats Samson" wrote:
    > >
    > > > I found recently a great solution to timed messages at The Xcel Files site,
    > > > http://www.xcelfiles.com by Ivan F Moala (Thanks Ivan!). I’ve seen many asked
    > > > for it but no good solution has been provided. The example code was about
    > > > animated GIF’s but with only a slight modification I changed it to use
    > > > whatever objects I like in my Forms. The most obvious usage would be to
    > > > display a self-closing message in the form when a certain condition is met,
    > > > maybe a warning. Warning messages in the status bar is not very alerting,
    > > > they have to appear where the user has his focus! I’ve used labels and they
    > > > can stay invisible until they’re needed and you can even set their attributes
    > > > to alert the user even more.
    > > > Here is a blinking message that automatically disappears after some time:
    > > > UserForm_Initialize()
    > > > LabelRateWarn1.Visible = False
    > > > End Sub
    > > >
    > > > Other TriggerSub ()
    > > > ......
    > > > If ARate <> BRate Then
    > > > Warning
    > > > End If
    > > > End Sub
    > > >
    > > > Sub Warning()
    > > > Dim y As Single, x As Single, z As Single
    > > > Dim Start, Delay
    > > > For x = 1 To 10
    > > > For y = 1 To 5
    > > > Start = Timer
    > > > Delay = Start + 0.15
    > > > Do While Timer < Delay
    > > > LabelRateWarn1.Visible = True
    > > > DoEvents
    > > > Loop
    > > > Next y
    > > > For z = 1 To 5
    > > > Start = Timer
    > > > Delay = Start + 0.15
    > > > Do While Timer < Delay
    > > > LabelRateWarn1.Visible = False
    > > > DoEvents
    > > > Loop
    > > > Next z
    > > > Next x
    > > > LabelRateWarn1.Visible = False
    > > > End Sub
    > > > If you don’t want the blinking, remove the loop Z.
    > > >
    > > > Now to my problem!
    > > > I’m very fond of reusing code and I have several situations in various
    > > > locations of my multipage form where I’d like to display a message to the
    > > > user.
    > > > How do I declare a LabelName as a variable and transfer the variable between
    > > > procedures?
    > > > From TriggerSub_1 I would put the variable Mess = LabelRateWarn1
    > > > and go to Warning (Mess)
    > > > From TriggerSub_2 I would put the variable Mess = LabelPriceWarn2
    > > > and go to the same Warning (Mess)
    > > > where I have the actions Mess.Visible = True/False.
    > > > It could be even more sophisticated if I could send x, y, and z variables
    > > > from the Trigger-subs as well. Then I could set speed and length of the
    > > > blinking message.
    > > >
    > > > Furthermore I’d like to have a message displayed until a click event! Say
    > > > that a
    > > > message is displayed at a menu. If the menu is idle, it’ll continue to be
    > > > displayed until the user clicks a either a specified button or the eventually
    > > > the form itself (non-idle state).
    > > >
    > > > Can anybody help me with these?
    > > >


  5. #5
    Mats Samson
    Guest

    RE: Timed and blinking messages

    Thanks for the idea with the endless loop, it sounded alright but I forgot
    that I also set focus to the textbox that is causing the alert message and
    that causes a click event.
    Even though the Setfocus line is before the Warning init! Strange!!
    Bah! Never mind, the important is that the “popup messaging” is working and
    it really does. I even created an animation by using a label with an arrow
    picture that is moved slightly during visible=false. Great!

    I managed the Userform call too!!!!
    From the module (in the same project) and in the procedure that do
    UserFrom.Show
    I’ve put both the Setfocus.TxtBox101 (in the userform) and the call to the
    Warning procedure that is located in the Userform code as well. The trick was
    to remove
    the parenthesis as I put in the qualifier:

    Public Sub TraderView()
    Workbooks("Trader").Worksheets("System").Activate
    ActiveWindow.WindowState = xlMinimized
    Worksheets("System").Activate
    Trader.Show vbModeless
    If Range("MenuLevel") = "I" Then
    Trader.TxB101.SetFocus
    Trader.Warning 0.1, "LabelWarn02", False, "LabelPic1RedDArw", True,
    "LabelNull01", 0
    Else
    Trader.ComBu102.SetFocus
    Trader.Warning 0.1, "LabelWarn01", False, "LabelNull01", False,
    "Red3RArw", 528
    End If
    End Sub
    I even put in three different alerts and the work pretty nice together in
    the same procedure. The LabelNull01 is an empty “invisible” label that can be
    used when you want to trigger some alerts but not others, as there cannot be
    an empty string reference.
    Thanks once again!


    "Toppers" wrote:

    > Mats,
    >
    > Something along these lines .....
    >
    > Variable "End_Pause" is set when Userform is initialised and changed when
    > Userform is clicked. Until the change, the Warning macro will loop endlessly.
    >
    > And you cannot call a Userform module from a general module.
    >
    >
    > Public End_Pause As Boolean
    >
    > Private Sub UserForm_Click()
    > End_Pause = True
    > End Sub
    > Sub Other_TriggerSub()
    > Arate = 10
    > BRate = 20
    > If Arate <> BRate Then
    > Call Warning("LabelRateWarn1", 0.15)
    > End If
    > End Sub
    >
    > Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
    > Dim y As Single, x As Single, z As Single
    > Dim Start, Delay
    > Do
    > For y = 1 To 5
    > Start = Timer
    > Delay = Start + AddTime
    > Do While Timer < Delay
    > Me.Controls(Mess).Visible = True
    > DoEvents
    > Loop
    > Next y
    > For z = 1 To 5
    > Start = Timer
    > Delay = Start + AddTime
    > Do While Timer < Delay
    > Me.Controls(Mess).Visible = False
    > DoEvents
    > Loop
    > Next z
    > Loop Until End_Pause
    > End_Pause = False
    > Me.Controls(Mess).Visible = False
    > End Sub
    >
    > Private Sub UserForm_Initialize()
    > End_Pause = True
    > End Sub
    >
    >
    > "Mats Samson" wrote:
    >
    > > Thanks Toppers,
    > > it works great!
    > > Can you also solve the last problem, looping the procedure endlessly if the
    > > computer is idle, i.e. until the user do a OnClick or Click event.
    > >
    > > Furthermore I'd like to know if I can run/start a procedure located in a
    > > userform
    > > from a module? It would be convenient if the form is in Hide state while I'm
    > > doing other things when I run Userform.Show vbmodeless, I'd like to run the
    > > below Warning procedure.
    > >
    > > "Toppers" wrote:
    > >
    > > > Hi,
    > > > Example of passing parameters:
    > > >
    > > > Sub Other_TriggerSub()
    > > > Arate = 10
    > > > Brate = 20
    > > > If Arate <> BRate Then
    > > > Call Warning("LabelRateWarn1", 0.15)
    > > > End If
    > > > End Sub
    > > >
    > > > Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
    > > > Dim y As Single, x As Single, z As Single
    > > > Dim Start, Delay
    > > > For x = 1 To 10
    > > > For y = 1 To 5
    > > > Start = Timer
    > > > Delay = Start + AddTime
    > > > Do While Timer < Delay
    > > > Me.Controls(Mess).Visible = True
    > > > DoEvents
    > > > Loop
    > > > Next y
    > > > For z = 1 To 5
    > > > Start = Timer
    > > > Delay = Start + AddTime
    > > > Do While Timer < Delay
    > > > Me.Controls(Mess).Visible = False
    > > > DoEvents
    > > > Loop
    > > > Next z
    > > > Next x
    > > > Me.Controls(Mess).Visible = False
    > > > End Sub
    > > >
    > > >
    > > > HTH
    > > >
    > > > "Mats Samson" wrote:
    > > >
    > > > > I found recently a great solution to timed messages at The Xcel Files site,
    > > > > http://www.xcelfiles.com by Ivan F Moala (Thanks Ivan!). I’ve seen many asked
    > > > > for it but no good solution has been provided. The example code was about
    > > > > animated GIF’s but with only a slight modification I changed it to use
    > > > > whatever objects I like in my Forms. The most obvious usage would be to
    > > > > display a self-closing message in the form when a certain condition is met,
    > > > > maybe a warning. Warning messages in the status bar is not very alerting,
    > > > > they have to appear where the user has his focus! I’ve used labels and they
    > > > > can stay invisible until they’re needed and you can even set their attributes
    > > > > to alert the user even more.
    > > > > Here is a blinking message that automatically disappears after some time:
    > > > > UserForm_Initialize()
    > > > > LabelRateWarn1.Visible = False
    > > > > End Sub
    > > > >
    > > > > Other TriggerSub ()
    > > > > ......
    > > > > If ARate <> BRate Then
    > > > > Warning
    > > > > End If
    > > > > End Sub
    > > > >
    > > > > Sub Warning()
    > > > > Dim y As Single, x As Single, z As Single
    > > > > Dim Start, Delay
    > > > > For x = 1 To 10
    > > > > For y = 1 To 5
    > > > > Start = Timer
    > > > > Delay = Start + 0.15
    > > > > Do While Timer < Delay
    > > > > LabelRateWarn1.Visible = True
    > > > > DoEvents
    > > > > Loop
    > > > > Next y
    > > > > For z = 1 To 5
    > > > > Start = Timer
    > > > > Delay = Start + 0.15
    > > > > Do While Timer < Delay
    > > > > LabelRateWarn1.Visible = False
    > > > > DoEvents
    > > > > Loop
    > > > > Next z
    > > > > Next x
    > > > > LabelRateWarn1.Visible = False
    > > > > End Sub
    > > > > If you don’t want the blinking, remove the loop Z.
    > > > >
    > > > > Now to my problem!
    > > > > I’m very fond of reusing code and I have several situations in various
    > > > > locations of my multipage form where I’d like to display a message to the
    > > > > user.
    > > > > How do I declare a LabelName as a variable and transfer the variable between
    > > > > procedures?
    > > > > From TriggerSub_1 I would put the variable Mess = LabelRateWarn1
    > > > > and go to Warning (Mess)
    > > > > From TriggerSub_2 I would put the variable Mess = LabelPriceWarn2
    > > > > and go to the same Warning (Mess)
    > > > > where I have the actions Mess.Visible = True/False.
    > > > > It could be even more sophisticated if I could send x, y, and z variables
    > > > > from the Trigger-subs as well. Then I could set speed and length of the
    > > > > blinking message.
    > > > >
    > > > > Furthermore I’d like to have a message displayed until a click event! Say
    > > > > that a
    > > > > message is displayed at a menu. If the menu is idle, it’ll continue to be
    > > > > displayed until the user clicks a either a specified button or the eventually
    > > > > the form itself (non-idle state).
    > > > >
    > > > > Can anybody help me with these?
    > > > >


+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1