IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Probleme - Panel avec fond invisible bougeant


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Par défaut Probleme - Panel avec fond invisible bougeant
    Bonjour,
    J'ai un panel auquel j'ai appliqué un fond invisible. Le problème est que lorsque j'utilise le scroll du panel, l'image de fond de mon form bouge également dans le panel. Avez vous un moyen pour que le fond reste statique dans le panel???


    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    oui mais ca peut etre compliqué

    essaye d'abord sur ton panel dans le new me.doublebuffered = true
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Par défaut
    Merci mais cela ne fonctionne pas.... je fais actuellement un refresh du Panel lors du scroll de celui ci. C'est vraiment pas terrible mais au moins, ca marche un minimum... si quelqu'un a une meilleure solution.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    tu peux aussi gérer toi meme la transparence, en réécrivant le code du panel enfin juste la sub onpaintbackground car c'est elle qui gère la transparence
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Bonjour.

    Comme le dit sperot51, tu peux overrider le onpaintbackground.

    Mais il faut aussi overrider le onscroll sinon cela ne fonctionne pas correctement.
    Nota : apperemment, le scroll ne déclenche pas le paintbackground (????).

    Le panel que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Public Class CLFWAddPanel
        Inherits Panel
        Private Sub PaintParentBackground(ByVal e As PaintEventArgs)
            If Not Me.Parent Is Nothing Then
                Dim rect As Rectangle = New Rectangle(Left, Top, Width, Height)
                e.Graphics.TranslateTransform(-rect.X, -rect.Y)
                Dim pea As PaintEventArgs = New PaintEventArgs(e.Graphics, rect)
                pea.Graphics.SetClip(rect)
                InvokePaintBackground(Parent, pea)
                InvokePaint(Parent, pea)
                e.Graphics.TranslateTransform(rect.X, rect.Y)
            Else
                e.Graphics.FillRectangle(SystemBrushes.Control, ClientRectangle)
            End If
        End Sub
        Protected Overrides Sub OnPaintBackground( _
            ByVal pevent As PaintEventArgs)
            PaintParentBackground(pevent)
        End Sub
        Protected Overrides Sub OnScroll( _
        ByVal se As ScrollEventArgs _
    )
            PaintParentBackground(New PaintEventArgs(Me.CreateGraphics, Me.Bounds))
            MyBase.OnScroll(se)
     
        End Sub
    End Class
    Par contre en terme de performance, c'est moyen --> redessin du parent à chaque évènement scroll (et il y en a !).

    Je vais creuser du côté de createparams...

    Cdt.

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Re.

    Bon via la transparence dans le createparams c'est pas terrible (en fait on peut carrément dire que ça marche pas) !

    Pour essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Class CLFWAddPanelTransparent
        Inherits Panel
        Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
            Get
                Dim cp As CreateParams = MyBase.CreateParams
                cp.ExStyle = cp.ExStyle Or 32
                Return cp
            End Get
        End Property
     
        Protected Overloads Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
        End Sub
    End Class
    Je reste donc sur la solution qui consiste à forcer le redessin du background du parent.

    Cdt.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    moi j'ai overridé le control carrément et la transparence c'est moi qui la gère
    ensuite y a plusieurs possibilités y a une fonction du framework qui le fait mais qui ne marche pas sur les windows server (elle est bien cachée il me semble et appelle bitblt d'une dll je crois)
    ou alors j'ai fait une autre technique de if me.backcolor = transparent then recherche sur le parent sinon dessin de .backgroundimage le tout en récursif
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [XL-2007] Probleme impression optionbutton avec fond noir
    Par Sbifouille31 dans le forum Excel
    Réponses: 1
    Dernier message: 02/03/2015, 10h48
  2. Probleme avec fond d'ecran
    Par rami96 dans le forum Graphisme
    Réponses: 1
    Dernier message: 16/04/2011, 19h37
  3. Panel avec image en fond
    Par crapouye dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/02/2008, 14h18
  4. Réponses: 1
    Dernier message: 03/07/2007, 16h05
  5. Probleme Affichage Panel avec Changement Résolution
    Par devlopassion dans le forum C++Builder
    Réponses: 5
    Dernier message: 11/01/2007, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo