Newsgroup: it.comp.lang.visual-basic
Titolo: Progressbar e Orologio

Vorrei un consiglio (o meglio due) su questi due argomenti:
1) E' possibile creare delle progressbar che abbiano un colore graduale (per
esempio dal rosso al verde) ? oppure soltanto cambiare il colore della barra
che scorre ? oppure fare delle progressbar tipo multimetro analogico
2) Vorrei visualizzare un orologio analogico .... accetto qualsiasi
consiglio.
Grazie a tutti come sempre.

 2) Vorrei visualizzare un orologio analogico .... accetto
qualsiasi consiglio.
Option Explicit
Dim Hnum%, Mnum%, Snum%
Dim Hlen!, Mlen!, Slen!
Dim TwoPi!, HalfPi!
Private Sub Form_DblClick( _
)
  Call Unload(Me)
End Sub
Private Sub Form_KeyPress( _
  KeyAscii As Integer _
)
  If KeyAscii = vbKeyEscape Then Call Unload(Me)
End Sub
Private Sub Form_Load( _
)
  Let Timer1.Enabled = False
  With Screen
    Call Move(0, 0, .Width, .Height)
  End With
  Let AutoRedraw = True
  With Timer1
    Let .Interval = 50
    Let .Enabled = True
  End With
  Show
End Sub
Private Sub Form_Resize( _
)
  DrawWidth = 5
  Scale (-2, -2)-(2, 2)
  Hlen = 0.8
  Mlen = 1.5
  Slen = 1
  TwoPi = 8 * Atn(1)
  HalfPi = TwoPi / 4
End Sub
Private Sub Timer1_Timer( _
)
Static LastSecond%
Dim Hang!, Mang!, Sang!
Dim Hx!, Hy!, Mx!, My!, Sx!, Sy!
  If Second(Now) = LastSecond Then Exit Sub
  LastSecond = Second(Now)
  Hnum = Hour(Now)
  Mnum = Minute(Now)
  Snum = Second(Now)
  Hang = TwoPi * (Hnum + Mnum / 60) / 12 - HalfPi
  Mang = TwoPi * (Mnum + Snum / 60) / 60 - HalfPi
  Sang = TwoPi * Snum / 60 - HalfPi
  Hx = Hlen * Cos(Hang)
  Hy = Hlen * Sin(Hang)
  Mx = Mlen * Cos(Mang)
  My = Mlen * Sin(Mang)
  Sx = Slen * Cos(Sang)
  Sy = Slen * Sin(Sang)
  Cls
  Line (0, 0)-(Mx, My), vbRed
  Line (0, 0)-(Hx, Hy), vbBlue
  Line (0, 0)-(Sx, Sy), vbGreen
End Sub
Questo esempio costituisce, con alcune mie lievi modifiche per
rendere il tutto funzionante come esempio autonomo, la parte
essenziale dell'applicazione "VBClock" che puoi trovare nel
volume:
Craig, John Clarck _Microsoft Visual Basic Workshop_,
Mondadori Informatica, Milano 1992. (N.B. e' per Visual Basic
1.0).
A proposito. Qualcuno sa se ne sono state fatte edizioni
successive allineate alle versioni di vb?
--
Ciao.
Maurizio

 Passo.
vedi un po' se ti serve questo codice. ciao, a.
Sub Pause(dblInterval As Double)
 'NOTE: You do not need this function! It is only to
 '      slow down the progress bar for the form.
 Dim dblCurrent As Double
 dblCurrent# = Timer
   Do While Timer - dblCurrent# < dblInterval#
     DoEvents
   Loop
End Sub
Sub DrawPercent(picPic As Object, lngPercent As Long)
'**********************************************************
'*            Draw Percent by Joseph Huntley              *
'*               
joseph_...@email.com
                 *
'*                
http://joseph.vr9.com
                   *
'**********************************************************
'*   You may use this code freely as long as credit is    *
'* given to the author, and the header remains intact.    *
'**********************************************************
'--------------------- The Arguments -----------------------
'picPic     - The object to draw on.
'lngPercent - The percentage to print out.
'-----------------------------------------------------------
'Description: Draws a percentage bar on an object.
  With picPic
    .Cls
    .ScaleMode = vbpixel
    .DrawMode = vbNotXorPen
    .BackColor = vbWhite 'Change for different background color
    .ForeColor = vbBlue  'Change for different foreground color
    .AutoRedraw = True
    .CurrentX = .ScaleWidth / 2 - .TextWidth(CStr(lngPercent&) & "%") / 2
    .CurrentY = .ScaleHeight / 2 - .TextHeight(CStr(lngPercent&) & "%") / 2
    picPic.Print CStr(lngPercent&) & "%"
    picPic.Line (1, 1)-((.Width / 100) * lngPercent&, .Height), vbBlue, BF
    .Refresh
  End With
End Sub
Private Sub cmdDraw_Click()
   Dim lngCurPercent As Long
     For lngCurPercent& = 1 To 100
        Call DrawPercent(picPercent, lngCurPercent&)
        Call Pause(0.001)
     Next lngCurPercent&
End Sub












Credo che Hyperion intendesse dire che dovresti disegnare tante linee, una
accanto all'altra, con il colore che va dal rosso al verde.
Io farei in questo modo:
- inserisco la picture piů larga che alta (es.:
Picture1.width=10*Picture1.height)
- Picture1.Scale (0, 0)-(NumeroTaccheTotali, 1) 'dove NumeroTaccheTotali č
ad esempio il numero totale di secondi che hai a disposizione o che
necessitano perché sia eseguita un'operazione
- ad ogni secondo che passa inserisco una tacca che va dal colore rosso a
quello verde in questo modo:
Picture1.Line (sec - 1, 0)-(sec, 1), gradiente(vbRed, vbGreen, sec,
NumeroTaccheTotali), BF
'dove sec indica i secondi trascorsi e gradiente č una mia funzione che
calcola
appunto il gradiente tra un colore iniziale e uno finale:
Public Function gradiente(DaColore, AColore, GradienteNumero,
TotaleGradienti)
    Dim a As String, p(3) As Single
    Dim s As Integer, r As Integer, bgr(6) As Integer
    GradienteNumero = Int(Abs(GradienteNumero))
    TotaleGradienti = Int(Abs(TotaleGradienti))
    If TotaleGradienti < 2 Then TotaleGradienti = 2
    If GradienteNumero > TotaleGradienti Then GradienteNumero =
TotaleGradienti
    a = Hex$(DaColore)
    a = String$(6 - Len(a), "0") + a
    For r = 1 To 3
        bgr(r) = Val("&h" + Mid$(a, 7 - r * 2, 2) + "&")
    Next r
    a = Hex$(AColore)
    a = String$(6 - Len(a), "0") + a
    For r = 1 To 3
        bgr(r + 3) = Val("&h" + Mid$(a, 7 - r * 2, 2) + "&")
    Next r
    For r = 1 To 3
        p(r) = (bgr(r + 3) - bgr(r)) / TotaleGradienti
    Next r
    gradiente = RGB(Int(bgr(1) + p(1) * GradienteNumero), Int(bgr(2) + p(2)
* GradienteNumero), Int(bgr(3) + p(3) * GradienteNumero))
End Function

 wrote in message
8j50ae$a6s$3...@nslave1.tin.it...





 wrote in message
g2G55.280953$VM3.2...@news.infostrada.it...
