Quella di oggi serve per visualizzare una shape, più spesso una casella di testo, per un tempo determinato con un effetto dissolvenza in entrata e in uscita, un po' come quello della nova mail in arrivo di outlook.
Per il funzionamento di questa procedura servono alcune funzioni:
- Dichiarare la funzione sleep del kernel, che permetet di definire delle pause in millisecondi senza sprecare cpu.
- Procedura FadeInOut, che applica l'efeftto dissolvenza, i parametri sono:
Oggetto shape al quale applicare l'effetto,
valore Tree/False per indicare rispettivamente FadeIn o FadeOut,
durata dell'effetto in msec. - Funzione rgbLum che applica una luminosità in % ad un colore, i parametri sono:
R,G,B (colore di base), L luminosità compresa tra 0 e 100 - Procedura splitRGB traduce nei 3 componenti rgb un colore, i parametri sono:
l_RGBcolor: colore da trasformare,
r,g,b: valori in output che conterrano le 3 componenti del colore.
I parametri della procedura principale TimeredShape sono:
Oggetto shape da mostrare;
Tempo di visualizzazione in msec (default 5)
Tempo dell'effetto dissolvenza
[english]
Today I begin the publication of some VBA procedure that I currently use.
TimeredShape is useful for displaying a shape with fadein effect, after waiting for a time in milliseconds hide that with fadeout effect.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub FadeInOut(s As Shape, _
Optional bFadeIN As Boolean = True, _
Optional lDelayMS As Long = 1000)
Dim i As Integer
Dim iBegin As Integer, iEnd As Integer, iStep As Integer
Dim lDelay As Long
Dim l_Trsp As Long ' Final Ttransparency / Trasparenza definitiva
Dim l_ForeColor As Long ' Border final color / Colore definitivo bordo
Dim bTrasp As Boolean ' Trasparenzy are applicable ? / Trasperenza applicabile ?
Const kScala As Integer = 100
lDelay = CLng(lDelayMS / kScala) ' Calculate step delay /Calcola il ritardo per ogni step
Dim r As Integer, g As Integer, b As Integer
l_ForeColor = s.Line.ForeColor ' Store line color / Determino il colore dell'oggetto
splitRGB l_ForeColor, r, g, b ' Retrieve r,g,b components / Scompongo i valori RGB
If s.AutoShapeType <> msoShapeMixed Then ' Aplly only for fillable shape / Applico solo x shape con proprietà Fill
l_Trsp = s.Fill.Transparency * kScala ' Store transparency value / Valore Trasparenza dell'oggetto
bTrasp = True
Else
l_Trsp = 0
bTrasp = False
End If
If bFadeIN Then ' Define Fade paramters / Definisce i parametri per Fade In e Fade Out
iBegin = kScala
iEnd = 0
iStep = -1
Else
iBegin = 0
iEnd = kScala
iStep = 1
End If
lDelay = lDelay * Abs(iStep) '
s.Line.ForeColor.RGB = rgbLum(r, g, b, iBegin) ' Initialize colour / Inizializzo il colore
If bTrasp Then
s.Fill.Transparency = (l_Trsp + (100 - l_Trsp) * iBegin / kScala) / kScala
End If
s.Visible = True ' Show shape / Mostra l'oggetto
For i = iBegin To iEnd Step iStep ' Fade effect / Effetto dissolvenza
s.Line.ForeColor.RGB = rgbLum(r, g, b, i) ' Apply color to border line / Applico il colore alla linea del brodo
If bTrasp Then ' Apply transparency / Applico la trasparenza se esiste fill
s.Fill.Transparency = (l_Trsp + (100 - l_Trsp) * i / kScala) / kScala
End If
DoEvents
Sleep lDelay
Next i
s.Visible = bFadeIN ' Show/Hide shape / Mostra/Nasconde oggetto
If bFadeIN = False Then
s.Line.ForeColor.RGB = l_ForeColor ' Reapply original colour / Riapplico il colore originale
If bTrasp Then '
s.Fill.Transparency = l_Trsp / kScala ' Reapply original transparency / Riapplico la trasparenza iniziale
End If
End If
End Sub
'
' Return color with luminance in % 100=White
' Restituisce il colore corrispondente con una luminosità in % 100%=bianco
'
Function rgbLum(r As Integer, g As Integer, b As Integer, l As Integer) As Long
' Red, Green, Blue, Luminance%
rgbLum = RGB(r + (255 - r) * l / 100, g + (255 - g) * l / 100, b + (255 - b) * l / 100)
End Function
'
' Retrieve RGC colour component from RGB colour
' Scompone un colore RGB nei 3 componenti
'
Sub splitRGB(lRGBcolor As Long, r As Integer, g As Integer, b As Integer)
Dim s As String
s = Right$("000000" & Hex$(lRGBcolor), 6)
r = Val("&h" & Mid$(s, 1, 2))
g = Val("&h" & Mid$(s, 3, 2))
b = Val("&h" & Mid$(s, 5, 2))
End Sub
' ' Display a shape for a time in msec whith fade effect
' Mostra una shape per i millisecondi indicati + il doppio del tempo di dissolvenza indicato
'
Sub TimeredShape(s As Shape, Optional l_DisplayTimeMS As Long = 5000, Optional l_FadeTime As Long = 2000)
FadeIn s, True, l_FadeTime
Sleep l_DisplayTimeMS
FadeInOut s, False, l_FadeTime
End Sub
Nessun commento:
Posta un commento