The Meteorologist
Messages postés232Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 3 novembre 2011
-
4 févr. 2008 à 17:10
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 2019
-
18 nov. 2014 à 13:07
Bonjour tout le monde;
Je recherche simplement en moyen de reconstituer le graphics d'un formulaire une fois celui-ci redimensionné.
En fait l'équivalent de la propriété AutoRedraw (si mes souvenirs sont bons) en Vb6.
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 4 févr. 2008 à 19:09
Salut,
Au plus simple, on dessine le tout dans l'événement Paint du contrôle.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.DrawString("Salut", Me.Font, Brushes.Blue, 100, 100)
End Sub
Mais si la routine de dessin est complexe et qu'elle te prend trop de temp, ou que tu veux tout simplement des performances d'affichage optimale, il faut effectivement faire ça autrement. Le "plus mieux" dans ce cas, c'est d'utiliser un BufferedGraphics:
Public Class Form1
Private buffer As BufferedGraphics
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Créer le buffer
Dim Context As BufferedGraphicsContext = BufferedGraphicsManager.Current
Context.MaximumBuffer = Me.ClientSize
buffer = Context.Allocate(Me.CreateGraphics, Me.ClientRectangle)
' Dessiner dans le buffer
buffer.Graphics.Clear(Color.BlanchedAlmond)
buffer.Graphics.DrawString("Salut", Me.Font, Brushes.Blue, 100, 100)
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
' "Rendre" le contenu du buffer pour dessiner sur la form
buffer.Render(e.Graphics)
End Sub
End Class
Sinon, tu peux aussi créer une image et l'appliquer comme image de fond à ta form. Moins performant (je pense) mais utile pour une gestion correct de tes contrôle ayant BackColor = Color.Transparent
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyImage As New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height)
Dim g As Graphics = Graphics.FromImage(MyImage)
g.Clear(Color.BlanchedAlmond)
g.DrawString("Salut", Me.Font, Brushes.Blue, 100, 100)
Me.BackgroundImage = MyImage
End Sub
tcari
Messages postés8Date d'inscriptionmardi 17 juin 2003StatutMembreDernière intervention 9 février 2008 9 févr. 2008 à 20:33
C'est super !!!!
Merci beaucoup pour cette aide !
Grâce à toi, voici ce que j'ai pu faire : le principe était de conserver mon image dans ma picturebox.
C'est très simpliste, mais le but est de l'améliorer..
Il suffit de créer une windows form, d'y ajouter un controle PictureBox (PictureBox1) et de remplacer tout le code !
Public
Class ZoneDessin
Private buffer
As BufferedGraphics
Private
Sub ZoneDessin_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles MyBase.Load
dessine()
End
Sub
Private
Sub dessine()
' C'est la fonction (ou une des fonctions) qui permet de dessiner. On dessine directement dans le buffer, et
' on définit ce buffer comme ayant la taille du contrôle PictureBOX
' définition du rectangle correspondant à la moitié de ma picturebox
Dim m_rectangle
As
New Rectangle(0, 0,
CInt(PictureBox1.Width / 2), PictureBox1.Height)
' Création du buffer
Dim Context
As BufferedGraphicsContext = BufferedGraphicsManager.Current
Context.MaximumBuffer = PictureBox1.ClientSize
buffer = Context.Allocate(PictureBox1.CreateGraphics, PictureBox1.ClientRectangle)
' Dessiner dans le buffer
buffer.Graphics.Clear(Color.Green)
buffer.Graphics.DrawRectangle(Pens.Black, m_rectangle)
buffer.Graphics.FillRectangle(
New SolidBrush(Color.Blue), m_rectangle)
buffer.Graphics.DrawString(
"image conservée",
Me.Font, Brushes.Black, 0, 0)
End
Sub
Private
Sub redessine()
' Ici, on redessine sur la picturebox, l'image qui était en mémoire
Application.DoEvents()
' NB : LE DOEVENTS EST OBLIGATOIRE CHEZ MOI !!!
buffer.Render(PictureBox1.CreateGraphics)
End
Sub
Private
Sub ZoneDessin_Paint(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.PaintEventArgs)
Handles
Me.Paint
' On appelle la fonction qui vient rechercher le dessin qui est en mémoire
redessine()
MERCI BEAUCOUP DE VOTRE AIDE
MOI J AI UTILISER
bmp = New Bitmap(Me.Piccanvas.Width, Me.Piccanvas.Height)
Using g As Graphics = Graphics.FromImage(bmp)
Dim pt As PointF = Me.Piccanvas.PointToScreen(New Point(0, 0))
g.CopyFromScreen(pt.X, pt.Y, 0, 0, bmp.Size)
End Using
Piccanvas.IMAGE= bmp
ET MAINTENANT JE UTILISE VOTRE METHODE MAIS J ARRIVE PAS
A SAUVEGARDER L IMAGE DESSINER DANS UN FICHIER .BMP?