View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
Mats Samson Mats Samson is offline
external usenet poster
 
Posts: 112
Default 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!). 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?