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
31 mai 2010 à 22:33
Pour le bouton autant pour moi c'était pas très explicite.

Form_Shown est l'événement qui survient lors ce que la feuille est affiché, contrairement à Form_Load ou il survient au chargement.

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:49
Ah oui en effet, j'avais déjà essayer d'utiliser Shown mais ca ne marche pas non plus, désolé pour la répétion inutile.

Quand j'avais écris :
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.


C'était pour créer un code assez compliqué avec un Timer qui attend 4 secondes puis simule (exactement) un clic sur le bouton "option" qui ouvrira le form qui aura une opacité de 0 et qui avec un seconde timer se refermera au bout d'une seconde (ou +).

Bien sûr le plus simple est de gérer l'erreur...

Je vois que mon problème commence à devenir saoulant donc je te recommande avec amitié de ne pas te prendre la tête avec mon problème.

Merci pour tes recherches et efforts.
@+
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
1 juin 2010 à 03:16
J'adore ca justement, un problème facile n'en est pas un !

Plus sérieusement, t'as essayer d'appeler la méthode WebBrowserZoom depuis le form_Shown alors et ca ne donne rien ? Est-ce que la variable zoom et initialisé à ce moment la ? Est-ce qu'elle a la dernière valeur enregistré ?


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
1 juin 2010 à 17:21
Merci pour ton soutient, c'est vraiment très sympat de ta part.

J'avais déjà essayé ça mais ça ne marche pas :
 Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        If Form6.RadioButton1.Checked =  True Then ' Se produit dès que form1 s'ouvre la première fois
            TextBox1.Text = "Google"
        End If
        If Form6.RadioButton2.Checked = True Then
            TextBox1.Text = "Yahoo!"
        End If

        If IsNumeric(Form6.TextBox1.Text) AndAlso _
           CInt(Form6.TextBox1.Text) < 401 And _
           CInt(Form6.TextBox1.Text) > 0 Then
            zoom = CInt(Form6.TextBox1.Text) ' Pour la textbox réglable manuellement
            Call WebBrowserZoom(zoom)
        Else
            Form6.TextBox1.Text = zoom
        End If
    End Sub


Je suis débutant et je ne comprend pas vraiment tes questions :
Est-ce que la variable zoom et initialisé à ce moment la ? Est-ce qu'elle a la dernière valeur enregistré ?


Voila un resumé du code actuel :

FORM1 (form principal)

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
    Dim zoom As Integer = 100

    Private Sub PictureBox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
        PictureBox10.Enabled = True
        If zoom < 400 Then
            zoom += 20
            WebBrowserZoom(zoom)
            If zoom 400 Then PictureBox9.Enabled False
        End If
    End Sub

    Private Sub PictureBox10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox10.Click
        PictureBox9.Enabled = True
        If zoom > 20 Then
            zoom -= 20
            WebBrowserZoom(zoom)
            If zoom 20 Then PictureBox10.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
        End Try
    End Sub

    Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        If Form6.RadioButton1.Checked = True Then ' Se produit dès que form1 s'ouvre la première fois
            TextBox1.Text = "Google"
        End If
        If Form6.RadioButton2.Checked = True Then
            TextBox1.Text = "Yahoo!"
        End If

        If IsNumeric(Form6.TextBox1.Text) AndAlso _
           CInt(Form6.TextBox1.Text) < 401 And _
           CInt(Form6.TextBox1.Text) > 0 Then
            zoom = CInt(Form6.TextBox1.Text) ' Pour la textbox réglable manuellement
            Call WebBrowserZoom(zoom)
        Else
            Form6.TextBox1.Text = zoom
        End If
    End Sub
 Private Shared myTimer As New System.Windows.Forms.Timer()
    Private Shared exitFlag As Boolean = False

    Private Shared Sub TimerEventProcessor(ByVal myObject As Object, _
                                           ByVal myEventArgs As EventArgs)
        myTimer.Stop() ' 3 secondes sont passées alors 100% d'opacité pour form1
        Form1.Opacity = 100
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.GoHome()
        AddHandler myTimer.Tick, AddressOf TimerEventProcessor
        ' 3 secondes avant que l'opacité redevienne normale
        myTimer.Interval = 3000
        myTimer.Start()
        Application.DoEvents()

        Form6.Opacity = 0
        Form6.Show()


FORM6 (form option)

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 = Form1.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
        End Try
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        If IsNumeric(TextBox1.Text) AndAlso _
           CInt(TextBox1.Text) < 401 And _
           CInt(TextBox1.Text) > 0 Then
            zoom = CInt(TextBox1.Text) ' Pour la textbox réglable manuellement
            Call WebBrowserZoom(zoom)
        Else
            TextBox1.Text = zoom
        End If
    End Sub


Si tu veux reproduire le code je pourrais t'envoyer par mail le necessaire.
++
0

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

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
1 juin 2010 à 18:37
Comment fais-tu pour enregistrer le zoom défini par l'utilisateur lors de la fermeture du programme ? Je ne vois aucun code ?

La variable zoom a la valeur 100 au démarrage :

Dim zoom As Integer = 100


Donc si tu appelle :

Call WebBrowserZoom(zoom)


Tu lui demande de mettre le zomm a 100

Il te faut utiliser les paramètres d'application pour enregistrer la valeur du zoom avant la fermeture.

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
1 juin 2010 à 18:53
Pour enregistrer tous ce qui est paramètré dans form6 j'utilise ceci :
Option Explicit On
Imports System.IO
Imports Microsoft.Win32
Public Class Form6
    Public writer As StreamWriter
    Dim fichier As String
    Dim zoom As Integer = 100

    Private Sub Form6_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        céation_fichier()
        fichier = My.Application.Info.DirectoryPath & "\Textvalue.ini" 'chemin du fichier texte
        Dim monStreamWriter As StreamWriter = New StreamWriter(fichier)
        monStreamWriter.WriteLine(CheckBox1.Checked.ToString)
        monStreamWriter.WriteLine(CheckBox2.Checked.ToString)
        monStreamWriter.WriteLine(RadioButton1.Checked.ToString)
        monStreamWriter.WriteLine(TextBox1.Text)
        monStreamWriter.WriteLine(ComboBox1.Text)
        'Fermeture du StreamWriter (Trés important)
        monStreamWriter.Close()
    End Sub

    Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        fichier = My.Application.Info.DirectoryPath & "\Textvalue.ini"
        Dim monStreamReader As StreamReader = New System.IO.StreamReader(fichier) 'Stream pour la lecture avec caractères accentués du fichier

        If monStreamReader.ReadLine = "True" Then
            CheckBox1.Checked = True
        Else
            CheckBox1.Checked = False
        End If
        If monStreamReader.ReadLine = "True" Then
            CheckBox2.Checked = True
        Else
            CheckBox2.Checked = False
        End If
        If monStreamReader.ReadLine = "True" Then
            RadioButton1.Checked = True
        Else
            RadioButton2.Checked = True
        End If

        TextBox1.Text = monStreamReader.ReadLine

        ComboBox1.Text = monStreamReader.ReadLine

        'Fermeture du StreamReader (Trés important)
        monStreamReader.Close()
    End Sub

    Private Sub céation_fichier()
        ' creer un nouveau fichier
        Dim path As String = (Application.StartupPath & "\Textvalue.ini")
        If IO.File.Exists(path) Then
            Exit Sub
        Else
            IO.File.Create(Application.StartupPath & "\Textvalue.ini")
        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
2 juin 2010 à 15:22
Si tu veux un consiel, utilise les paramètres d'applications :

Dans l'explorateur de solution double-clic sur "My Project", en suite va à l'onglet "Paramètres", saisis le nom des paramètres, par exemple "zoom", et en type de valeur "Integer", enregistre le tout.

Ton programme a maintenant une variable globale au sein du projet accessible depui nimporte quel form. Tu peux l'appeler comme ceci :

My.Settings.zomm


Mais c'est pas tout, lors de la fermeture de ton programme, tu peux enregistrer tes paramètres d'application pour les retrouver à la prochaine instance:

My.Setting.Save


Donc pas besoins de saisir du code pour enregsiter des variables.

En suite, tu peux dans ton programme te servir te ta form option pour juste modifier les valeurs de tes paramètres d'application, et dans ta form principale te servir de celles-ci c'est plus propre.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Rejoignez-nous