vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · Sonstiges   |   VB-Versionen: VB4, VB5, VB616.09.01
Scrollende PictureBox

Mit ein paar kleinen Tricks erstellen Sie im Handumdrehen eine PictureBox, bei der Scrollbalken bei Bedarf angezeigt werden.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  33.522 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Um ein Bild anzuzeigen verwenden Sie doch sicherlich auch die Standard PictureBox oder alternativ eine ImageBox. Aber was machen Sie, wenn das Bild größer ist, als die PictureBox selbst? Klar - Sie ändern die Größe der PictureBox, so dass das Bild komplett angezeigt werden kann. Aber was machen Sie, wenn Sie die Größe der PictureBox aufgrund des unzureichenden Platzangebots auf der Form nicht ändern können oder das Bild größer ist als die Form, auf der sich die PictureBox befindet?

Nun ja, das Bild wird dann halt nicht komplett angezeigt. Und da weder die PictureBox, noch das Image-Objekt über die die Eigenschaft Scrollbars verfügen, über welche sich horizontale und/oder vertikale Scrollbalken anzeigen lassen, wird das Bild demnach niemals komplett angezeigt.

Also, brauchen wir eine Lösung, über welche sich horizontale und vertikale Scrollbalken bei Bedarf anzeigen lassen, um den Bildausschnitt innerhalb der PictureBox scrollen zu können.

Kurze Überlegung: Was brauchen wir hierfür alles?
Zunächst einmal die PictureBox selbst. Die PictureBox soll jedoch nicht das Bild anzeigen, sondern dient als Container: für ein Image-Control (zur Bildanzeige) und natürlich für die Scrollbalken.

Und so geht's:

  1. Plazieren Sie auf die Form eine PictrueBox und nennen diese picContainer
  2. In die PictureBox fügen Sie ein Image-Control ein (imgPicture) mit den Eigenschaften Top = 0 und Left = 0
  3. Weiterhin werden noch zwei Scrollbars benötigt: eine vertikale Scrollbar (VScroll1), sowie eine horizontale Scrollbar (HScroll1). Beide Scrollbars natürlich ebenfalls in die PictureBox picContainer plazieren
  4. Zum Abschluss benötigen wir noch eine zweite PictureBox, welche die Breite der vertikalen Scrollbar und die Höhe der horizontalen Scrollbar hat. Nennen Sie diese picEdge und setzen TabStop = False. Diese PictureBox dient als Abstandshalter zwichen der horizontalen und vertikalen Scrollbaken (rechts unten).

So sollte es aussehen
Die Scrollbars werden automatisch per Programmcode positioniert, ebenso die zweite PictureBox picEdge.

Und warum jetzt eigentlich ein Image-Objekt für die Anzeige des Bildes?
Na ja, ganz einfach. Das Image-Objekt passt sich gegenüber der PictureBox automatisch der Größe des Bildes an. Und da das Image-Control in einem PictureBox-Container liegt, kann man dieses bequem über die Scrollbalken scrollen (im Prinzip wird es ja nur verschoben - nach oben, nach unten, nach links oder nach rechts).

Nun aber zur Programmierung
Fügen Sie die nachfolgende Routine in den Codeteil der Form:

' Scrollbars bei Bedarf anzeigen
Private Sub Picture_ShowScrollbars()
  Dim hVis As Boolean
  Dim vHis As Boolean
 
  ' wenn die ImageBox größer als der Container ist
  ' entsprechend vertik. bzw. horiz. ScrollBars anzeigen
  With picContainer
    VScroll1.Visible = (imgPicture.Height > .ScaleHeight)
    HScroll1.Visible = (imgPicture.Width > .ScaleWidth)
    picEdge.BorderStyle = 0
    picEdge.Visible = HScroll1.Visible Or VScroll1.Visible
 
    ' Breite des horizontalen Scrollbalkens
    HScroll1.Width = .ScaleWidth
 
    ' Höhe des vertikalen Scrollbalkens
    VScroll1.Height = .ScaleHeight
 
    ' Scrollbalken positionieren
    HScroll1.Left = 0
    HScroll1.Top = .ScaleHeight - HScroll1.Height
    VScroll1.Left = .ScaleWidth - VScroll1.Width
    VScroll1.Top = 0
 
    picEdge.Left = .ScaleWidth - VScroll1.Width
    picEdge.Top = .ScaleHeight - HScroll1.Height
    HScroll1.Width = picEdge.Left
    VScroll1.Height = picEdge.Top
 
    ' Min/Max-Eigenschaften aktualisieren
    VScroll1.Max = (imgPicture.Height - .ScaleHeight) + _
      HScroll1.Height
    HScroll1.Max = (imgPicture.Width - .ScaleWidth) + _
      VScroll1.Width
  End With
End Sub
Private Sub HScroll1_Change()
  imgPicture.Left = -HScroll1.Value
End Sub
 
Private Sub HScroll1_Scroll()
  imgPicture.Left = -HScroll1.Value
End Sub
Private Sub VScroll1_Change()
  imgPicture.Top = -VScroll1.Value
End Sub
 
Private Sub VScroll1_Scroll()
  imgPicture.Top = -VScroll1.Value
End Sub

Jedesmal, wenn Sie nun dem Image-Control ein Bild zuweisen, rufen Sie gleich danach die Prozedur Picture_ShowScrollbars auf, so dass die Scrollbalken bei Bedarf angezeigt oder auch ausgeblendet werden.

Private Sub cmdLoadPicture()
  ' Bild-Auswahl (Standard-Dialog)
  ' Benötigt wird das CommonDialog-Control
  ' (COMDLG32.OCX)
  On Local Error Resume Next
  With CommonDialog1
    .CancelError = True
    .Filter = "alle Bilddateien|*.bmp;*.jpg;*.gif"
    .ShowOpen
    If Err = 0 Then
      imgPicture.Picture = LoadPicture(.FileName)
      Picture_ShowScrollbars
    End If
  End With
End Sub

Dieser Tipp wurde bereits 33.522 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel