begin process at 2008 07 06 03:02:00
1 205 441 membres
21 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PROGRESS BAR POUR LE TELECHARGEMENT D'UNE PAGE


Information sur la source

Description

Voila, je cherchais à mettre une progress bar dans mon programe lors du telechargement d'une page, et comme je n'ai rien trouvé de tres simple ou fonctionnel comme exemple de script la dessus, j'ai trouvé une bidouille assez simple avec le composant inet.

Vous avez donc besoin :

. D'un composant inet (INET)
. D'un timer (TIMER)
. D'une progressbar (PROGRESSBAR)
. D'une variable (Public A as integer)

Des que vous telechargez :
. reglez le timer sur 100 ms (timer.interval = 100)
. activer le timer (timer.enabled)
Celui-ci génère un unique évènement Timer dont le code est ci-dessous.
. Inet lors du telechargement de la page génère un code(state) allant de 1 à 12 (variable), transmit par l'évènement INET_StateChanged(ByVal State As Integer).

Recuperer ce code, transmettait le a A pour pouvoir le recuperer dans Private Sub TIMER_Timer() puis examinez le : si il est différent de 11, faite progresser votre barre avec :
"PROGRESSBAR.Value = A"
Si il est égal à 11, la page n'est pas téléchargée, afficher alors un message d'erreur de votre choix.
La fin du téléchargement est donné par la fin d'activité d'INET :
"If INET.StillExecuting = False Then PROGRESSBAR.Value = PROGRESSBAR.Max:"
On met donc la progressbar au max.

Source

  • ' Ouverture de la page web
  • INET.openurl("urlX")
  • timer.interval=50
  • timer.enabled
  • ----------------------------------------------------------------------------------------------
  • 'Evenement généré par le TIMER
  • Private Sub TIMER_Timer()
  • 'Gestion de la progression du chargement
  • PROGRESSBAR.Min = 0
  • PROGRESSBAR.Max = 12
  • PROGRESSBAR.Value = A
  • If A = 11 then AFFICHER "Impossible de trouver la page..."
  • If INET.StillExecuting = False Then PROGRESSBAR.Value = PROGRESSBAR.Max: TIMER.Enabled = False
  • End Sub
  • ----------------------------------------------------------------------------------------------
  • 'Evenement généré par INET
  • Private Sub INET_StateChanged(ByVal State As Integer)
  • 'Gestion de la progression du chargement
  • A = State
  • End Sub
' Ouverture de la page web
INET.openurl("urlX")
timer.interval=50
timer.enabled
----------------------------------------------------------------------------------------------
'Evenement généré par le TIMER
Private Sub TIMER_Timer()
'Gestion de la progression du chargement
PROGRESSBAR.Min = 0
PROGRESSBAR.Max = 12
PROGRESSBAR.Value = A
If A = 11 then AFFICHER "Impossible de trouver la page..."
If INET.StillExecuting = False Then PROGRESSBAR.Value = PROGRESSBAR.Max: TIMER.Enabled = False
End Sub
----------------------------------------------------------------------------------------------
'Evenement généré par INET
Private Sub INET_StateChanged(ByVal State As Integer)
'Gestion de la progression du chargement
A = State
End Sub
  • signaler à un administrateur
    Commentaire de pcpunch le 07/01/2004 01:20:37

    Bon ok tu est debutant donc !!!!

    Déja plein de bug :

    Timer.enabled ca marche pas c plutot Timer.enabled=true!!!

    Ensuite : If A = 11 Then AFFICHER "Impossible de trouver la page..."
    C koi la fonction afficher de vb, car moi g vb 6 et je l'ai pas (tu dois avoir la dernier version de vb, la version 2123??) Donc plutot :
    If A = 11 Then Msgbox "Impossible de trouver la page..."

    ensuite il faut declarer la variable A dans la partie declarative de ta form sinon elle n'est valable que dans le sub, et donc dans ton timer a=0 tous le temps!!!!!!

    Sinon sur certaine Url (ex:www.yahoo.fr) le state retourne parfois en arriere donc il vaut ecrire :If A > ProgressBar.Value Then ProgressBar.Value = A
    Afin de ne pas voir la barre revenir en arriere!!!

    Sinon voila le code rectifier si tu veu faire une mise a jour ou si qq veut le tester!!!




    Dim A As Integer

    Private Sub Form_Load()
    Timer.Enabled = False
    Timer.Interval = 50
    End Sub

    Private Sub Command1_Click()
    Timer.Enabled = True
    ProgressBar.Min = 0
    ProgressBar.Max = 12
    ProgressBar.Value = 0
    Inet.openurl ("www.yahoo.fr")
    End Sub

    'Evenement généré par le TIMER
    Private Sub TIMER_Timer()
    If A > ProgressBar.Value Then ProgressBar.Value = A
    'Gestion de la progression du chargement
    If A = 11 Then MsgBox "Impossible de trouver la page..."
    If Inet.StillExecuting = False Then ProgressBar.Value = 12: Timer.Interval = 0
    End Sub

    'Evenement généré par INET
    Private Sub INET_StateChanged(ByVal State As Integer)
    'Gestion de la progression du chargement
    A = State
    End Sub

    Sinon mis a part c qq bug, la source est assez interessante et c'est plutot une bonne astuce pour avoir une idée assez grossiére de l'avancement!!! (6.5 cause bug!!!)

    A l'avenir fait attention a la syntaxe, et comme c'est ta premiere source "félicitation c vraiment pas mal pour un premier post!!!"

  • signaler à un administrateur
    Commentaire de pcpunch le 07/01/2004 01:25:11

    dsl veuillez rectifier : If Inet.StillExecuting = False Then ProgressBar.Value = 12: Timer.Enabled = False

    il est temps que je me couche je crois!!! lol

  • signaler à un administrateur
    Commentaire de fjohn le 07/01/2004 23:06:22

    Non, je suis desole, je crois que tu m'as mal compris, mais c'est toujours à celui qui explique qui, finalement ,n'est pas assez clair :

    then AFFICHER, c'est de l'algorithmie, c'est à dire qu'afficher c'est ce que tu veux dans ton programe, pourvu que tu affiche quelquechose à l'utilisateur.

    Timer.enabled = true, ca c'est un pur oubli, la tu as tout a fait raison, je te remercie :)

    Pour A, j'ai bien marqué dans les commentaires ci-avant le terme public, donc accessible a toutes les variables du modules il me semble...

    Enfin, en ce qui concerne les vas et viens, j'etais au courant du probleme, il n'est pas bien important, d'ailleurs la barre d'IE elle même fait des va et viens sur une même page. L'utilisateur verra (et ce tres rapidement) la barre charger par 2 fois (je n'ai pas constate plus).

    Merci en tout cas d'avoir pris la peine de la tester :), et entre nous, qu'ne pense tu ? (Elle a le merite de garder inet tranquillement et de pas etre trop compliquée,  non ?)

  • signaler à un administrateur
    Commentaire de pcpunch le 08/01/2004 12:54:49

    Ok mais ici y a pas mal de codeur amateur comme moi qui n'ont jamais fait d'algoritme et peu etre qui ne savent mm pas se que c'est!!

    A ce moment la commente ta source et joint un projet zip avec un exemple qui fonctionne et note le en commentaire , car si un debutant test ta source, elle va bugger, et il aura deja du mal a comprendre comment elle fonctionne, alors la debugger!!!!!!!!

    Sinon c'est vrai que cette astuce est pas mal mais il n'y a que 4 state donc la Progressbar n'avance qu'en 4 fractions, d'ou mon commentaire precedent "une idée assez grossiére de l'avancement!!!".

    Ceci dit c'est trés bien, je n'avais jamais pensé a cette astuce!!! Je vais essayer de voir s'il est possible de recuperer l'avacement plus précisement .

    Il existe une facon simple est plus sur pour recuperer le code src d'une page web, c'est d'utiliser le webrowser (bq plus stable que inet) avec ce controle il est facile de recupérer l avancement car il est gérer dans les événements(Plus précis)!!!
    Sinon il y a aussi la méthode winsock, ca doit étre faisable aussi!!!

    Ps: Inet est réputé pour étre assez instable, j'ai moi mm fais l expérience de programme avec inet qui fonctionne trés bien chez moi, et sur d'autre pc en version Exe ou mm code src ca merdouille a fond!!!! Donc j 'essaie de me passer de ce control qui est vraiment pas mal mais .........

  • signaler à un administrateur
    Commentaire de NewSky le 21/01/2004 22:31:29

    moi g fait un truc à la va vite, juste comme ça. c'est juste une trame qui est a rectifié :

    Private Sub WebBrowser_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
        ProgressBar1.Max = ProgressMax + 1
        If Progress <= 0 Then
            ProgressBar1.Value = 1
        Else
        ProgressBar1.Value = Progress
        End If

    C'est un contrôle WebBrowser qui gère la ProgressBar, je l'ai fait en 1min, y'avait qq bugs que g rectifié en bricolant mais ça paut peut-être t'aider. bon courage

  • signaler à un administrateur
    Commentaire de fjohn le 21/01/2004 22:45:23

    Arf, tu as raison, je suis desole, j'aurai du mettre un zip et penser au vrai debutant.

    Pour ce qui est d'inet, il marche bien chez moi , pas de plantage, bien stable et tout. Avantage d'inet par rapport au reste (pour moi)

    Je telecharge directos le source (pas besoin du reste). Un webbrower est plus legerement plus long, vu qu'il choppe les images tout ca (mais je le connais assez peu, peut etre qu'il est possible de chopper que le source).

    @Newsky, c'est incomplet, comment gere tu la fin des downloads ? Je vais essayer de revoir le webbrowser qui as l'air d'etre un control des plus interessant, par contre la doc msn est naze la dessus, lamentable je trouve...

  • signaler à un administrateur
    Commentaire de lipo59_60 le 26/04/2006 21:23:18

    bonjour pour votre programme Progrss Bar pour le téléchargement est pas mal c'est une trés bonne réalisation pour les débutants.
    merci trés bien.
    à plus.

  • signaler à un administrateur
    Commentaire de al51100 le 05/05/2008 16:33:53

    slt j ai un petit probleme sa fait 3 jour ke j ai vb et je voudrai mettre un progressbar j arrive pas et qlln coné un bon site pour aprendre les calcule


    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            WebBrowser1.Navigate(TextBox1.Text)
            Label1.Text = "recherche"
        End Sub
        Private Sub


        End Sub
    End Class

    voisi mes calcul

  • signaler à un administrateur
    Commentaire de al51100 le 05/05/2008 17:28:20

    je pense que je suis sur la bonne voi qlln peu m aider dans mes calcul svp

    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            WebBrowser1.Navigate(TextBox1.Text)
            Label1.Text = "recherche"
        End Sub
        
        Private Sub CopyAvecProgressBar(ByVal WebBrowser1)
            ' Minumun à 1
            ProgressBar1 = 1
            'Maximim= nombre total de fichier à copier
            ProgressBar1 = WebBrowser1
            ' On initialise la Progressbar.
            ProgressBar1.Value = 1

            'On indique le pas.
            ProgressBar1.Step = 1

            ' Boucle de copie
            Dim x As interger
            For x = 1 To WebBrowser1
                ' Copier in fichie.
                If CopyFile(WebBrowser1(x - 1)) = True Then
                    'Si la copie est OK incrémenter la Progressbar.
                    ProgressBar1.PerformStep()
                End If
            Next x
        End Sub
    End Class

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS