Ajouter du zoom à chaque clic supplémentaire sur un bouton

Résolu
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 - 29 mai 2010 à 21:46
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 2 juin 2010 à 15:22
Bonjour tout le monde.

J'ai crée ce petit code pour zoomer dans mon webbrowser lorsque l'on clique sur l'image adéquate mais j'aimerais que cela rajoute au zoom actuelle 20%.
Mon code actuel ne fait que changer le zoom par un autre sans ajouter 20% à chaque clic.

    Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
        WebBrowser1.Document.Body.Style = "zoom : 120%"
    End Sub


Merci pour votre aide & conseil.
@+
A voir également:

27 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 mai 2010 à 12:37
En effet ta solution de zoom ne fait que modifier la taille du corp du document, mais pas son contenu.

Ce code fonctionne :

   Dim zoom As Integer = 100
    Private Enum Exec
        OLECMDID_OPTICAL_ZOOM = 63
    End Enum
    Private Enum ExecOpt
        OLECMDEXECOPT_DODEFAULT = 0
        OLECMDEXECOPT_PROMPTUSER = 1
        OLECMDEXECOPT_DONTPROMPTUSER = 2
        OLECMDEXECOPT_SHOWHELP = 3
    End Enum
    Private Sub btn_ZoomUP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ZoomUP.Click
        btn_ZoomDn.Enabled = True
        If zoom < 200 Then
            zoom += 20
           WebBrowserZoom(zoom)
            If zoom 200 Then btn_ZoomUP.Enabled False
        End If
    End Sub
    Private Sub btn_ZoomDn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ZoomDn.Click
        btn_ZoomUP.Enabled = True
        If zoom > 20 Then
            zoom -= 20
            WebBrowserZoom(zoom)
            If zoom 20 Then btn_ZoomDn.Enabled False
        End If
    End Sub
    Private Sub WebBrowserZoom(ByVal zoom As Integer)
        Try
            Dim MyWeb As Object = Me.WebBrowser1.ActiveXInstance
            'Comportement étrange, il faut laisser le Cint(zoom) pour ne pas avoir d'exception, du moins chez moi, or le zoom est déclaré Int32 plus haut...
            MyWeb.ExecWB(Exec.OLECMDID_OPTICAL_ZOOM, ExecOpt.OLECMDEXECOPT_DONTPROMPTUSER, CInt(zoom), IntPtr.Zero)
        Catch ex As Exception
            MsgBox("Error:" & ex.Message)
        End Try
    End Sub


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
2 juin 2010 à 12:31
C'est bon le problème est réglé !

j'ai prévu l'ouverture automatique invisible de form6 deux fois au lieu d'une, ce qui actualise (à coups sûr) les valeurs enregistrées dans form6.

Mayzz =
@+
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
29 mai 2010 à 23:46
Salut,

Voila un exemple :

    Dim zoom As Integer = 100
    Private Sub btn_ZoomUP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ZoomUP.Click
        btn_ZoomDn.Enabled = True
        If zoom < 200 Then
            zoom += 20
            WebBrowser1.Document.Body.Style = "zoom : " & zoom & "%"
            If zoom 200 Then btn_ZoomUP.Enabled False
        End If
    End Sub
    Private Sub btn_ZoomDn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ZoomDn.Click
        btn_ZoomUP.Enabled = True
        If zoom > 20 Then
            zoom -= 20
            WebBrowser1.Document.Body.Style = "zoom : " & zoom & "%"
            If zoom 20 Then btn_ZoomDn.Enabled False
        End If
    End Sub



Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 11:53
Mayzz, merci pour ton code c'est exactement ce que je cherchais.

En revanche, il y a un problème qui m'empêche d'intégrer ce code à ma solution :
Sur 90% des sites, le zoom ne fait qu'agrandir la page du webbrowser en laissant le site tel qu'il est (collé à gauche) et en augmentant l'espace entre le site et le webbrowser à droite de la page en utilisant la barre horizontal de défilement.
(Si je ne suis pas assez claire, l'experience prend 2 min ;))

Sur google.com, pas de soucis mais sur youtube.com, laposte.fr, gmail.com etc il y a ce bug.

Je ne vois pas du tout d'oû peu provenir l'erreur, dans mon form1 il n'y a que autoscrool que j'ai modifié par True et mon webbrowser n'a pas de propriétés modifiées (sauf les évenements bien sûr).

help me
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 12:03
C'est cette partie du code qui est érronée :
WebBrowser1.Document.Body.Style
Mais je vois pas d'autres moyens de zoomer dans une page web
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 13:31
Merci infiniment, ça marche parfaitement et en plus c'est personnalisé !

Je comprend pas trop ce code et j'aimerais ajouter une seconde option de zoom pour que si il faut atteindre 400% de zoom, l'utilisateur ne clique par 150 fois sur le bouton qui ajouter 20% à chaque fois.

Pourrais-tu me montrer quels éléments mettre dans un autre bouton qui met la page directement à 400% par exemple ??

PS :
Catch ex As Exception
MsgBox("Erreur : " & ex.Message)
End Try

Quelle type d'erreur pourrait arriver ?

@+
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 mai 2010 à 14:01
Plutôt que de mettre deux boutons, met un combobox éditable, l'utilisateur pourra choisir la taille de son zoom parmis ceux de la liste ou en saisir un dans la plage que tu lui laisse (de 0 à 400).

    Private zoom As Integer = 100
    Private Enum Exec
        OLECMDID_OPTICAL_ZOOM = 63
    End Enum
    Private Enum ExecOpt
        OLECMDEXECOPT_DODEFAULT = 0
        OLECMDEXECOPT_PROMPTUSER = 1
        OLECMDEXECOPT_DONTPROMPTUSER = 2
        OLECMDEXECOPT_SHOWHELP = 3
    End Enum
    Private Sub WebBrowserZoom(ByVal zoom As Integer)
        Try
            Dim MyWeb As Object = Me.WebBrowser1.ActiveXInstance
            'Comportement étrange, il faut laisser le Cint(zoom) pour ne pas avoir d'exception, du moins chez moi, or le zoom est déclaré Int32 plus haut...
            MyWeb.ExecWB(Exec.OLECMDID_OPTICAL_ZOOM, ExecOpt.OLECMDEXECOPT_DONTPROMPTUSER, CInt(zoom), IntPtr.Zero)
        Catch ex As Exception
            'MsgBox("Error:" & ex.Message)
        End Try
    End Sub
    Private Sub cmd_Navigate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Navigate.Click
        WebBrowser1.Url = New Uri(cbo_Address.Text)
    End Sub
 
    Private Sub cbo_zoom_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbo_zoom.TextChanged
        '
        If IsNumeric(cbo_zoom.Text) AndAlso _
           CInt(cbo_zoom.Text) < 401 And _
           CInt(cbo_zoom.Text) > 0 Then
            zoom = CInt(cbo_zoom.Text)
            Call WebBrowserZoom(zoom)
        Else
            cbo_zoom.Text = zoom
        End If
        '
    End Sub


La source exemple ici

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 mai 2010 à 14:03
En ce qui concerne les erreurs elle peuvent être nombreuses, notament si tu zomm lors ce que le contrôle n'as pas d'url de chargé.


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 mai 2010 à 14:06
La source vesrion 2008

L'autre est en V2010

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 14:47
J'y avais pensé, mais avec l'ancien code j'avais pas réussi du tout.

Le code fonctionne bien mais faudrait régler deux choses pour qu'il soit parfait :

1. régler l'exception si la textbox est vide
2. afficher le zoom de la page actuel dedans si l'on modifie le zoom par un autre moyen.

Merci encore et @+
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 mai 2010 à 14:57
Pour l'exception rien de plus simple :

If cbo_zoom.Text = "" Then
   cbo_zoom.Text = "100"
   Exit Sub
End If


Pour l'affichage utilise la variable zoom

LabelDisplayZoom.Text = zoom & "%"


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 15:10
Si l'exception était aussi simple à régler je l'aurais résolue moi même :)

Car If cbo_zoom.Text = "" Then ne marche pas puisque le curseur est toujours dans la textbox à mon avis. Il faudrait modifier le code au niveau du :
 Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        If IsNumeric(TextBox2.Text) AndAlso _
           CInt(TextBox2.Text) < 401 And _
            CInt(TextBox2.Text) > 0 Then 
            zoom  = CInt(TextBox2.Text) ' Pour la textbox réglable manuellement
            Call WebBrowserZoom(zoom)
        Else
            TextBox2.Text = zoom
        End If
    End Sub


Et désolé de m'être mal expliqué, mais j'aimerais afficher le zoom actuel dans cette même textbox. Si l'utilisateur ouvre mon navigateur alors il doit voir logiquement 100% dans cette textbox et si il modifie le zoom par un autre moyen faudrait aussi qu'il puisse voir le zoom dans cette textbox car actuellement, on peut voire seulement la valeur su zoom que l'utilisateur à entré.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 15:43
Pour gérer l'exception on pourrait mettre un truc qui ressemble à ça mais "No Call" n'exista pas, ya peut être un synonyme...

Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        If IsNumeric(TextBox2.Text) AndAlso _
           CInt(TextBox2.Text) < 400 And _
            zoom = CInt(TextBox2.Text) Then ' Pour la textbox réglable manuellement
            Call WebBrowserZoom(zoom)
        Else
            TextBox2.Text = zoom
        End If
        If TextBox2.Text = "" Then
            No Call WebBrowserZoom(zoom)
        End If
    End Sub
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 mai 2010 à 15:59
Non simplement le code que je t'ai donné plus haut :

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
       If TextBox2.Text = "" Then
          TextBox2.Text = zoom
          Exit Sub
       End If 
       If IsNumeric(TextBox2.Text) AndAlso _
           CInt(TextBox2.Text) < 400 And _
            zoom = CInt(TextBox2.Text) Then ' Pour la textbox réglable manuellement
            Call WebBrowserZoom(zoom)
        Else
            TextBox2.Text = zoom
        End If
    End Sub



Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
30 mai 2010 à 16:19
Merci,

J'ai finalement mis cette textbox dans un formulaire "options" que l'utilisateur peut modifier avec l'avantage que les modifications sont enregistrées si l'appli est fermée.

Au démarrage de mon appli c'est form1 qui s'ouvre en premier puis formoption qui s'ouvre (puis se referme 1 seconde après) pour "actualiser" les données enregistrées et appliquer ce que l'utilisateur à paramétré dans les checkboxs, textboxs...

Et donc quand maintenant l'utilisateur démarre mon programme j'ai une exception qui arrive dans un message : Tentative de révocation d'une cible de dépôt qui n'a pas été enregistrée (Exception de HRESULT : 0x800040100 (DRAGDROP_E_NOTREGISTERED)).
Et le zoom programmé dans cette formoption n'est pas appliqué sauf si je "réactualisé" moi même en ouvrant de mainère manuel une seconde fois formoption.

Un tout dernier help.
@+
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
31 mai 2010 à 20:31
En tout cas, merci beaucoup Mayzz car l'essenciel est fait et fonctionne très bien.

Pour régler le pt'it blème du message précédent faudrait - lors de l'ouverture de form1 - simuler un clic sur un bouton qui ouvrira un formulaire qui doit se fermer juste après, tous ça invisiblement.

Je cherche en ce moment ce code et je le trouverais sûrement rapidement.

Je peux donc affirmer (provisoirement) que tous est réglé et va bien

Merci encore et @+
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
31 mai 2010 à 21:45
btn_Refresh.PeformClick 

tout simplement...

@+ et bon dev

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
31 mai 2010 à 22:05
Oups, il y a marqué que btn_Refresh n'est pas déclaré !?

En faite, j'ai remarqué que si mon PC n'est pas connecté à Internet alors le zoom enregistré par l'utilisateur prend effet immédiatement dès que form1 s'ouvre, donc c'est parfait.

Saurais-tu ou réparer l'erreur entre la connexion internet et le zoom qui fait que cela ne marche pas ???

Message : Tentative de révocation d'une cible de dépôt qui n'a pas été enregistrée (Exception de HRESULT : 0x800040100 (DRAGDROP_E_NOTREGISTERED)).

@+
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
31 mai 2010 à 22:17
Oups, il y a marqué que btn_Refresh n'est pas déclaré !?


Btn_Refresh est un exemple : NomDuBouton.PerformClick si tu préfère.

En faite, j'ai remarqué que si mon PC n'est pas connecté à Internet alors le zoom enregistré par l'utilisateur prend effet immédiatement dès que form1 s'ouvre, donc c'est parfait.


Ce code fait appel à l'ActiveX du WebBrowser .Net, c'est en quelque sorte "du bricolage" pour dépanner car le contrôle n'intègre pas la fonctionnalité nativement, et de ce fait, cela peut engendré un comportement imprévisible selon l'environnement, la version de IE, les paramètres internet etc...

Le mieux à faire est de laisser vide le "Catch" pour ne pas avoir le message à chaque coup, et d'effectuer un rafraichissement au Form_Shown en appelant la méthode Call WebBrowserZoom(zoom), zoom ayant pour valeur le dernier zoom enregistré lors de la fermeture de l'application.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
31 mai 2010 à 22:28
Désolé mais je croyais que Refresh avais quelque chose à voir dedans.
Oups, il y a marqué que btn_Refresh n'est pas déclaré !?

J'avais bien retiré le message d'exception, mais j'aimerais en savoir plus sur
effectuer un rafraichissement au Form_Shown en appelant la méthode Call WebBrowserZoom(zoom),
0
Rejoignez-nous