PDA

Visualizza la versione completa : [C++] Emulare barra di caricamento in applicazione Console


xnavigator
29-12-2009, 13:05
ragazzi mi chiedevo se c'era un modo per emulare una barra di caricamento nel prompt di dos mentre si sta caricando un operazione o una cosa del genere...

avevo pensato che sarebbe carino poter fare in stile linux cioè che comparissero continuativamente ( nella stessa posizione del carattere ) le tre barrette:

\
|
/


conoscete dei metodi per farlo?

grazie

oregon
29-12-2009, 13:08
Basta visualizzare i caratteri a ripetizione seguiti da un backspace ...

xnavigator
29-12-2009, 13:11
Originariamente inviato da oregon
Basta visualizzare i caratteri a ripetizione seguiti da un backspace ...


http://img260.imageshack.us/img260/1443/44212237yc3.jpg

MItaly
29-12-2009, 13:54
Se ti interessa un esempio in C... link (http://forum.html.it/forum/showthread.php?s=&postid=12231606#post12231606)

xnavigator
29-12-2009, 15:09
Originariamente inviato da MItaly
Se ti interessa un esempio in C... link (http://forum.html.it/forum/showthread.php?s=&postid=12231606#post12231606)


stupendo..

sapevo che comunque l'avrei potuto cercare già fatto su google ma ho scritto qui per avere anche qualche parere..

comunque se utilizzo il tuo codice casomai lo riscrivo in c++ (non posso utilizzare il c) e lo posto qui


:ciauz:

MItaly
29-12-2009, 17:20
Puoi facilmente riscriverlo in C++ trasformando la struttura in una classe e includendo la funzione tuttofare come metodo; magari sistemalo un po', prevedendo la possibilità di collegarci stream differenti.

xnavigator
29-12-2009, 18:04
Originariamente inviato da MItaly
Puoi facilmente riscriverlo in C++ trasformando la struttura in una classe e includendo la funzione tuttofare come metodo; magari sistemalo un po', prevedendo la possibilità di collegarci stream differenti.

si avevo pensato a quello...

il fatto è che devo fare un progettino abbastanza banale e una barra di caricamento verrebbe caricata troppo velocemente ( neanche un secondo.... )

quindi se proprio la voglio mettere giusto per... la devo mettere fake con uno sleep(x) ogni tanto xD

xnavigator
03-01-2010, 16:15
Ragazzi ho preferito usare il primo metodo...
se vi serve la classe eccola:

praticamente ad ogni passo basta chiamare il metodo step(); per visualizzare il carattere successivo contenuto nel vector l; fino a quando non viene chiamato il metodo end();

in questo caso visualizzerà la sequenza
\
|
/



#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Loading{
public:
inline Loading(){l.push_back('\\');l.push_back('|');l.pus h_back('/'); i=0;init="Caricamento... ";done="completato.";}
inline ~Loading(){}
inline void step() {if (i>0) cout << '\b'; else cout <<init; cout << l[i%l.size()];i++;}
inline void end(){cout << '\b' << done;}
private:
vector<char> l;
int i;
string init;
string done;
};


int main() {

Loading *bar = new Loading();
while(1) {
bar->step();
//> Operazioni da svolgere...
}
bar->end();

cout << endl;
return 0;
}

Loading