 
View Full Version : Barra di progressione
Cia a tutti;
Vorrei chiedervi il seguente aiuto:
Non sono riuscita mai ad utilizzare eggeggiamente in VB le barre di progressione che indicano l'avanzamento di una certa operazione.
Esempio:
Se io vorrei fare un cliclo FOR, del tipo:
For i=1 to 100000
Label1 = i
next
vorrei ad esempio che in una barra di progressione mi compaia l'avanzamento dell'operazione.
Non sono mai riuscita a farla funzionare abbinata ad un determinato ciclo di lavoro.
Potete aiutarmi???
Grazie. carmen
Potresti fare così:
   ProgressBar1.Min = 1
   ProgressBar1.Max = 100000
   
   For i = 1 To 100000
      ProgressBar1.Value = i
      Label1.Caption = i
   Next
In sostanza devi impostare le proprietà Min e Max, dopo di che basta impostare la proprietà Value ad ogni iterazione.
ciao
Grazie del consiglio.
Però l'esempio che io avevo fatto del ciclo for sicuramente e una dei più semplici.
Se invece di avere un ciclo for ad esempio, dovrei fare parecchie elaborazioni di dati, e vorrei fin quando non si finisce visualizzare, come dovrei in questo caso impostare la progressbar???
Ciao. Carmen
Devi sapere a priori o calcolare a run-time quanto durano i calcoli (in cicli o in dimensione o in qualsiasi misura) altrimenti non puoi usare il progress bar...
In pratica mi stai dicendo che dovrei sapre ancor prima di lanciare l'operazione quanto dovrebbe durare?
Si, ma come faccio. Se ad esempio ti faccio un esempio un pò banale, se dovrei fare delle SQL in varie tabelle, di grossi dimensioni, e vorrei usare una progressbar per segnare la progressione del processo, come faccio a priore a sapere quanto ci impiegherà.
Ciao. Carmen
Hell-VoyAgeR
27-04-2002, 21:53
Originariamente inviato da Carmen 
[B]In pratica mi stai dicendo che dovrei sapre ancor prima di lanciare l'operazione quanto dovrebbe durare?
Si, ma come faccio. Se ad esempio ti faccio un esempio un pò banale, se dovrei fare delle SQL in varie tabelle, di grossi dimensioni, e vorrei usare una progressbar per segnare la progressione del processo, come faccio a priore a sapere quanto ci impiegherà.
Ciao. Carmen 
Direi che e' una cosa piuttosto complicata, per non dire impossibile, prevedere il risultato di una sql.... se non DOPO che hai fatto l'interrogazione :)
Potresti per esempio indicare la progressione delle varie interrogazioni, chesso', devi fare 10 query, indichi lo stato delle varie operazioni da 1 a 10... di piu' non credo che sia fattibile.
Originariamente inviato da Carmen 
[B]In pratica mi stai dicendo che dovrei sapre ancor prima di lanciare l'operazione quanto dovrebbe durare?
Si, ma come faccio. Se ad esempio ti faccio un esempio un pò banale, se dovrei fare delle SQL in varie tabelle, di grossi dimensioni, e vorrei usare una progressbar per segnare la progressione del processo, come faccio a priore a sapere quanto ci impiegherà.
Ciao. Carmen 
devi impostare il valore min a 0 e il valore max = a recordcount
e ad ogni regord che elabora gli fai aggiungere 1
Hell-VoyAgeR
27-04-2002, 22:07
o xegallo... non per contraddirti... ma come fai a "prevedere" il risultato (aka recordcount) di una query prima di farla ? :)
Originariamente inviato da Hell-VoyAgeR 
[B]o xegallo... non per contraddirti... ma come fai a "prevedere" il risultato (aka recordcount) di una query prima di farla ? :) 
ovviamente la routine deve partire quando ha aperto il recordset
tanto il problema della perdita di tempo si verifica quando recupera i dati nel dabase per caricarli in una lista.
L'apertura è prtessochè istantanea
Sub Intellist()
'routine che costruisce la struttura di una listview in base alla struttura
'di un recordset
Dim a As Long
Dim mItem As ListItem
Dim Record As Recordset
Dim Rec As String
' creazione colonne
CreaColonne
If Len(Trim(Passaggio.Dato_Passato1)) = 0 Then
   Passaggio.Dato_Passato1 = "%"
End If
If Len(Trim(Passaggio.Dato_Passato2)) = 0 Then
   Passaggio.Dato_Passato2 = "%"
End If
'Apertura connessione recordset
Set Record = Passaggio.Recordset
Rec = Trim(Passaggio.Record)
Select Case Rec
   Case "DE.rsL_AnaProd"
      DE.L_AnaProd Trim(Passaggio.Dato_Passato1), Trim(Passaggio.Dato_Passato2)
   Case "DE.rsLS_UtentiPass"
      DE.LS_UtentiPass Trim(Passaggio.Dato_Passato1)
End Select
With frmIntelist.LswRicerca
   'Crea la lista per colonne
   .ListItems.Clear
   With Record
   'riempie la lista per colonne
   Dim b As Long
   frmIntelist.ProgressBar1.Max = Record.RecordCount
   frmIntelist.ProgressBar1.Value = 0
     Do Until Record.EOF
        Set mItem = frmIntelist.LswRicerca.ListItems.Add(, , .Fields(0).Value)
        mItem.ListSubItems.Add , , .Fields(1).Value
        frmIntelist.ProgressBar1.Value = frmIntelist.ProgressBar1.Value + 1
        b = b + 1
        .MoveNext
     Loop
      .Close
   End With
End With
End Sub
questa routine tra le altre cose fa anche l'auento di valore di una progressbar
Hell-VoyAgeR
27-04-2002, 22:22
aspe'... tutto questo e' correttissimo considerando un accesso "isam" alla tabella... a quanto ho capito carmen intendeva chiedere se era possibile visualizzare la progressbar durante i "tempi morti" della select... esempio... lancio una query "select * from elencotelefonicodituttitalia where nome='antonio'", un pelino di tempo il server lo impieghera' per tutto cio'... e in questa fase non e' possibile visualizzare una progressbar...
Perdonami la poca lucidita'... ma ho appena finito di fare un barbecue spettacolare e mi sono un po' arrostito! :)
Originariamente inviato da Hell-VoyAgeR 
[B]aspe'... tutto questo e' correttissimo considerando un accesso "isam" alla tabella... a quanto ho capito carmen intendeva chiedere se era possibile visualizzare la progressbar durante i "tempi morti" della select... esempio... lancio una query "select * from elencotelefonicodituttitalia where nome='antonio'", un pelino di tempo il server lo impieghera' per tutto cio'... e in questa fase non e' possibile visualizzare una progressbar...
Perdonami la poca lucidita'... ma ho appena finito di fare un barbecue spettacolare e mi sono un po' arrostito! :) 
allora si potrebbe farla combianta per un 50% abbinata ad un timer e per il resto al caricamento di un record
Hell-VoyAgeR
27-04-2002, 22:50
e qui mi vedi completamente d'accordo !!
Alla fin fine sarebbe piu' o meno uguale alla progressbar di un IE quando non riceve alcun dato !
A quanto ho capito carmen intendeva chiedere se era possibile visualizzare la progressbar durante i "tempi morti" della select... esempio... lancio una query "select * from elencotelefonicodituttitalia where nome='antonio'", un pelino di tempo il server lo impieghera' per tutto cio'... e in questa fase non e' possibile visualizzare una progressbar... 
Ciao ragazzi. Il mio problema era proprio una cosa di questo genere. Se ad esempio faccio una sql, quà non esiste il recordcount. Ma protrei ad esempio utilizzare la barra anche in molti altri casi, se non vi è uno standard, ogni volta e proprio un casino. 
Ricordo un qualcosa di un comando chiamato DoEvent, che sinceramente non sono riuscita ben a capire a cosa serve.
Hell-VoyAgeR
27-04-2002, 23:38
Originariamente inviato da Carmen 
[B]Ciao ragazzi. Il mio problema era proprio una cosa di questo genere. Se ad esempio faccio una sql, quà non esiste il recordcount. Ma protrei ad esempio utilizzare la barra anche in molti altri casi, se non vi è uno standard, ogni volta e proprio un casino. 
Ricordo un qualcosa di un comando chiamato DoEvent, che sinceramente non sono riuscita ben a capire a cosa serve. 
Doevents serve per "interrompere" un ciclo e permettere al programma di gestire gli eventi (come ad esempio un timer) ovviamente, una volta finiti gli eventi, il controllo torna al ciclo.
Per una gestione standard della progress bar.... ahem.... boh ! Se per standard intendi un modo di usarla, ebbene min, max e value sono i tuoi compagni di viaggio ! :)
Credo che saranno dei bruttissimi compagni di viaggio. Possibli "Cacchio" che non vi sia uno standard per questo schifo di barra. Oppure meglio ancora se esiste un qualche componente progressBar che consenta la cosa....
:D ;)
Originariamente inviato da Carmen 
[B]Ciao ragazzi. Il mio problema era proprio una cosa di questo genere. Se ad esempio faccio una sql, quà non esiste il recordcount. Ma protrei ad esempio utilizzare la barra anche in molti altri casi, se non vi è uno standard, ogni volta e proprio un casino. 
Ricordo un qualcosa di un comando chiamato DoEvent, che sinceramente non sono riuscita ben a capire a cosa serve. 
L'unica cosa che puoi fare...se devi fare più di una query fai avanzare la progress bar dopo ogni query...
Ciao. Certo sarebbe una soluzione, però non la più elegante in quanto non darebbe la giusta impressione dello scorrere del lavoro.
Carmen ;)
Originariamente inviato da Carmen 
[B]Ciao. Certo sarebbe una soluzione, però non la più elegante in quanto non darebbe la giusta impressione dello scorrere del lavoro.
Dipende dal numero e dal tipo di query ;)
Penzo di averlo già chiesto, però non si trova un ocx progressBar , il quale sia dotato di un suo evento, nel quale inserire il codice che si vuole eseguire, e lui automaticamente fa andare la progresBar....
Ciao. Carmen ;)
Hell-VoyAgeR
30-04-2002, 10:07
Originariamente inviato da Carmen 
[B]Penzo di averlo già chiesto, però non si trova un ocx progressBar , il quale sia dotato di un suo evento, nel quale inserire il codice che si vuole eseguire, e lui automaticamente fa andare la progresBar....
Ciao. Carmen ;) 
A occhio non c'e' nulla di simile... anche perche' sarebbe difficile, se non impossibile riuscire a dare una temporizzazione all'operazione da eseguire nell'evento.
Se quello che interessa e' unicamente vedere che il programma "fa qualcosa" potrebbe essere una soluzione inserire un'animazione tipo quella del foglietto che svolazza da una cartella all'altra di winzozz.
Originariamente inviato da Hell-VoyAgeR 
[B]
...
Se quello che interessa e' unicamente vedere che il programma "fa qualcosa" potrebbe essere una soluzione inserire un'animazione tipo quella del foglietto che svolazza da una cartella all'altra di winzozz. 
beh, meglio una fetta di prosciutto da una piadina a una spianata. :D :D
... e i fatti ti cosano ! :p
Mi devo allora rassegnare al foglietto che svolazza?
Maaaaaaaaaa!!!!!!!!!!!!!  :D :D :D
Carmen :confused:
Hell-VoyAgeR
01-05-2002, 18:16
Originariamente inviato da a2000 
[B]
beh, meglio una fetta di prosciutto da una piadina a una spianata. :D :D
... e i fatti ti cosano ! :p 
eh adesso mettiamo bene in evidenza la nostra provenienza eh a2000 ? :))
in effetti in questo momento una bella piadina con prosciutto non mi dispiacerebbe...
:D
Carmen e parsutt al pies un pò ma tutt :p
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.