Newsgroup: it.comp.lang.visual-basic
Titolo: [Progress Bar]

come posso realizzare una progress bar che...come dire...avanzi? (tipo
quelle delle installazioni)

p.e. utilizzando qla dei controlli comuni (progetto / componenti -> ms
windows common controls, se non sbaglio) e gestendola opportunamente dentro
a qualche ciclo.
alternativa piu' leggera dal p.d.v. dei controlli: metti un lbl dentro un
picbox (ambedue controlli intrinseci, qdi + leggeri). la gestione e' molto
simile.
hth, pal
Merlino <merli...@NOTUTlibero.it> wrote


 simile.
Interessa anche a me. Come funziona?
Buon Natale e Felice Anno Nuovo
Cesare Nicola
http://digilander.iol.it/cesare
L'indirizzo del sito comune č:
http://www.murialdo.it/it_lang_vb

 Interessa anche a me. Come funziona?
qui il ciclo aggiorna un lblPerc con davanti un lblCnt, ambedue dentro un
picbox:
Private Sub cmdConta_Click()
    On Error GoTo ErrMan
    'On Error Resume Next
    If MsgBox("Count Messages per Day?", vbYesNoCancel) <> vbYes Then Exit
Sub
Screen.MousePointer = 11
    Dim rsIn As Recordset, rsOut As Recordset
    'Set db = OpenDatabase(MainPath & "ark.mdb", False, False)
    Dim strSQL, wTot, wData, totmsg, Cnt
    Dim TotTot, TotPercent, TotalText, TotBytes
    Dim RecTot As Long, RecNo As Long
    strSQL = "DELETE contdata.* FROM contdata;"
    MainDB.Execute strSQL
    Set rsOut = MainDB.OpenRecordset("contdata")
        rsOut.Index = "giorno"
    Set rsIn = MainDB.OpenRecordset("ark")
        rsIn.Index = "pcnum"
    rsIn.MoveLast
    wTot = wTot + rsIn.RecordCount
    If wTot = -1 Then wTot = 0
Dim tmpPerc
    With frmMain
        .lblPerc.Width = 15
        .lblPerc.Visible = True
        .lblCnt.Left = (.picCont.ScaleWidth - .lblCnt.Width) / 2
        .lblCnt.Visible = True
    End With
    With rsIn
        .MoveLast
        RecTot = .RecordCount
        .MoveFirst
        Do While Not .EOF
            Cnt = Cnt + 1
            wData = IIf(IsDate(!Date) And (!Date <> ""), !Date,
CDate(#1/1/80#))
            rsOut.Seek "=", wData
            If rsOut.NoMatch Then
                rsOut.AddNew
                rsOut!giorno = wData
            Else
                rsOut.Edit
            End If
            totmsg = rsOut!totgiorno + 1
            rsOut!totgiorno = totmsg
        TotTot = rsOut!tottext + Len(!Text)
            rsOut!tottext = TotTot
            rsOut!bytesperday = TotTot / totmsg
            rsOut.Update
        rsOut.MoveLast
        lblTot = "Giorni: " & rsOut.RecordCount
            RecNo = RecNo + 1
            tmpPerc = Int((RecNo * frmMain.picCont.ScaleWidth) / RecTot)
            frmMain.lblPerc.Width = tmpPerc
            frmMain.lblCnt = Int((RecNo * 100) / RecTot) & "%"
            .MoveNext
            DoEvents
        Loop
    End With
    rsIn.Close
    Dim StartData As Date, StopData As Date
    StartData = CDate(#8/29/96#)
    StopData = Date
    RecTot = DateDiff("d", StartData, StopData)
    RecNo = 0
    With rsOut
        .MoveFirst
        While StartData < StopData
            .Seek "=", StartData
            'Me.Caption = "DATACOUNT :: " & StartData
            If .NoMatch Then
                .AddNew
                !giorno = StartData
                .Update
            End If
            StartData = StartData + 1
            RecNo = RecNo + 1
            tmpPerc = Int((RecNo * frmMain.picCont.ScaleWidth) / RecTot)
            frmMain.lblPerc.Width = tmpPerc
            frmMain.lblCnt = Int((RecNo * 100) / RecTot) & "%"
        Wend
    End With
    Dim TmpAvg
    StartData = CDate(#8/29/96#)
    Cnt = 0
    totmsg = 0
    With rsOut
        .MoveFirst
        .Seek "=", StartData
        Do While Not .EOF
            If .EOF Then Exit Do
            totmsg = totmsg + !totgiorno
            Cnt = Cnt + 1
            TmpAvg = totmsg / Cnt
            .Edit
            !msg_avg = TmpAvg
            .Update
            DoEvents
            .MoveNext
            If .EOF Then Exit Do
            frmMain.lblCnt = !giorno
        Loop
    End With
    rsOut.Close
    Set rsIn = Nothing
    Set rsOut = Nothing
    dbData.Refresh
    cboIndex = "Giorno"
    dbData.Recordset.Index = cboIndex
    dbData.Recordset.MoveFirst
    Screen.MousePointer = 0
    frmMain.lblPerc.Visible = False
    frmMain.lblCnt.Visible = False
    Exit Sub
ErrMan:
    Screen.MousePointer = 0
    MsgBox Err & " - " & Error
    Exit Sub
End Sub




ciao -- non c'e' di che, ma non posso che ripetere la risposta. cioe',
precisando:
1. ti studi l'help in linea della progress bar di vb5, e' sufficientemente
gnocca.
2. su richiesta di altri, nello stesso thread ho postato una sub completa
che invece della p.b. (e conseguente necessita dei controlli comuni con
possibili casini relativi) usa banalmente  2 lbl e 1 picbox. ti assicuro che
la sub va, e aggiorna 3 volte l'avanzamento del ciclo. guardati il codice e
se c'e' qc che non capisci chiedi -- se posso rispondo. ma prima
*guardalo*...
Merlino <merli...@NOTUTlibero.it> wrote
