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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
'Projet PictureBox avec Zoom et Scrollbars
'Ajouter
'-un TableLayoutPanel
'mettre dans le TableLayoutPanel
'-un TextBox dans ligne=1,col=1 du TableLayoutPanel
'-un bouton ActionneAffichage dans ligne=2,col=1 du TableLayoutPanel
'-un trckAfficheEchelle dans ligne=3,col=1 et 2 du TableLayoutPanel(columnspan=2)
'-un Panel dans ligne=1 et 2(rowspan=2) ,col=2 du TableLayoutPanel(columnspan=2)
'-un PictureBox picAireDessin dans le Panel
'commentaires :
'Le TrackerBar gere le zoom dans le picturebox
'Le Panel qui est dans le TableLayoutPanel contient lui meme le pictureBox
'Il sert a jouter les scrollbars au picturebox qui ne dispose pas de cette propriete.
'Le bouton ActionneAffichage sert à rafraichir le PictureBox à chaque Zoom
'Ifaut ajouter dans cette exemple un repertoire resources avec une image nb.jpeg
Public Class Form1
Dim nouvelleImage As Image
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Init TableLayoutPanel
Me.TableLayoutPanel1.RowCount = 3
Me.TableLayoutPanel1.ColumnCount = 2
Me.Panel1.Dock = DockStyle.Fill
'Init Panel
Me.Panel1.Dock = DockStyle.Fill
Me.Panel1.AutoScroll = True 'Active Scrolling
Me.Panel1.AutoScrollMinSize = New Size(600, 400) 'Si inferieur a cette taille faire apparaitr les scrollbars 'Init picture box
picAireDessin.BackColor = Color.White
picAireDessin.BorderStyle = BorderStyle.Fixed3D
picAireDessin.Dock = DockStyle.Fill
'Init TrackerBar
trckAfficheEchelle.Value = 1 'valeur initiale
trckAfficheEchelle.Minimum = 1 'valeur mini pour zoom
trckAfficheEchelle.Maximum = 100 'valeur maxi pour zoom
trckAfficheEchelle.LargeChange = 5 'pas de zoom
'Charge l'image du dossier Resources(nb4 est une image jpeg Michelin)
nouvelleImage = My.Resources.nb4
End Sub
Private Sub ActionneAffichage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ActionneAffichage.Click
' ----- Force le reaffichage du texte et de l'image.
picAireDessin.Invalidate()
End Sub
'Private Sub DrawingArea_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DrawingArea.Paint
' ' ----- Refresh the drawing area.
' '
' Dim titleFont As Font
' Dim mainFont As Font
' Dim titleArea As Rectangle
' Dim textArea As Rectangle
' Dim titleFormat As StringFormat
' Const MainTitle As String = "Important Message"
' ' ----- Clear any existing content.
' e.Graphics.Clear(Color.White)
' ' ----- Build some fonts used for the display text.
' titleFont = New Font("Arial", 16, FontStyle.Bold)
' mainFont = New Font("Arial", 12, FontStyle.Regular)
' ' ----- Determine where the title and main text will go.
' titleArea = New Rectangle(0, 0, _
' DrawingArea.ClientRectangle.Width, titleFont.Height)
' textArea = New Rectangle(0, titleFont.Height * 1.4, _
' DrawingArea.ClientRectangle.Width, _
' DrawingArea.ClientRectangle.Height - _
' (titleFont.Height * 1.4))
' ' ----- Scale according to the user's request.
' e.Graphics.ScaleTransform(DisplayScale.Value, _
' DisplayScale.Value)
' ' ----- Add a title to the content.
' titleFormat = New StringFormat()
' titleFormat.Alignment = StringAlignment.Center
' e.Graphics.DrawString(MainTitle, titleFont, _
' Brushes.Black, titleArea, titleFormat)
' titleFormat.Dispose()
' ' ----- Draw a nice dividing line.
' e.Graphics.DrawLine(Pens.Black, 20, _
' CInt(titleFont.Height * 1.2), _
' DrawingArea.ClientRectangle.Width - 20, _
' CInt(titleFont.Height * 1.2))
' ' ----- Draw the main text.
' e.Graphics.DrawString(DisplayText.Text, mainFont, _
' Brushes.Black, textArea)
' ' ----- Clean up.
' mainFont.Dispose()
' titleFont.Dispose()
'End Sub
Private Sub DrawingArea_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picAireDessin.Paint
' ----- Rafraichit la zone de dessin.
'
Dim titreFont As Font
Dim principalFont As Font
Dim titreZone As Rectangle
Dim texteZone As Rectangle
Dim titreFormat As StringFormat
Const titrePrincipal As String = "Message Important Mabrouki..."
' ----- Efface Tout dans le PictureBox.
e.Graphics.Clear(Color.White)
' ----- Prepare les fontes utilisees.
titreFont = New Font("Arial", 18, FontStyle.Bold)
principalFont = New Font("Arial", 18, FontStyle.Regular)
' ----- Positionne la Zone du Titre et le texte du Titre.
titreZone = New Rectangle(0, 0, _
picAireDessin.ClientRectangle.Width, titreFont.Height)
texteZone = New Rectangle(0, titreFont.Height * 1.4, _
picAireDessin.ClientRectangle.Width, _
picAireDessin.ClientRectangle.Height - _
(titreFont.Height * 1.4))
' ----- Met a l'echelle suivant requete Utilisateur(facteur DisplayScale).
e.Graphics.ScaleTransform(trckAfficheEchelle.Value, _
trckAfficheEchelle.Value)
' ----- Recharge l'image
e.Graphics.DrawImage(nouvelleImage, 0, 0)
' ----- Ajoute un Titre au contenu image.
titreFormat = New StringFormat()
titreFormat.Alignment = StringAlignment.Center
e.Graphics.DrawString(titrePrincipal, titreFont, _
Brushes.Black, titreZone, titreFormat)
titreFormat.Dispose()
' ----- Dessine le texte entre dans TextBox.
e.Graphics.DrawString(txtAffiche.Text, principalFont, _
Brushes.Blue, texteZone)
' ----- Liberes ressources GDI.
principalFont.Dispose()
titreFont.Dispose()
End Sub
End Class |
Partager