Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0075: Scrollen einer PictureBox

 von 

Beschreibung 

Zeigt wie mit einfachen Mitteln oben besagter Effekt zu erzielen ist.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [22,85 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
' Es muss ein Verweis auf 'Microsoft DAO 2.5/3.0 Compatibility Library' gesetzt werden.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Horizontale Scrollbar "HScroll1"
' Steuerelement: Vertikale Scrollbar "VScroll1"
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Bildfeld-Steuerelement "Picture2" auf Picture1

Option Explicit

Private Sub Form_Load()
  Picture2.Left = 0
  Picture2.Top = 0
  VScroll1.LargeChange = Picture1.Height / 4
  VScroll1.SmallChange = 120
  HScroll1.LargeChange = Picture1.Width / 4
  HScroll1.SmallChange = 120
End Sub

Private Sub Command1_Click()
  Unload Me
End Sub

Private Sub HScroll1_Change()
  Picture2.Left = -HScroll1.Value
End Sub

Private Sub VScroll1_Change()
  Picture2.Top = -VScroll1.Value
End Sub

Private Sub HScroll1_Scroll()
  Picture2.Left = -HScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
  Picture2.Top = -VScroll1.Value
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 8 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Elio Gubser am 25.03.2006 um 20:06

Theoretisch könnte man ein zweites Picture böxchen nehmen und die Grafik dort hineinladen, visible = false. Jetzt zeichnet man mit BitBlt den momentan sichtbaren Grafikausschnitt

Kommentar von DonDave am 24.09.2004 um 01:48

Mahlzeit!

Mich stört an diesem Beispiel, dass zwei Pictureboxen benötigt werden. Mein Beispiel scrollt und zoomt mit

-einer Picturebox, Name: "Picture1"
-einer VScrollbar, Name: "VScroll1"
-zwei HScrollBar, Namen: "HScroll1" und "HScroll2"

HScroll1 und VScroll1 scrollen das Bild horizontal und vertikal, HScroll2 stellt den Zoomfaktor ein.

Kennt jemand eine Möglichkeit, die echten Abmessungen (in Pixeln) eines Bildes zu finden ohne auf die WinAPI zurückzugreifen?

Option Explicit

Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long

Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type

Private mBmp As BITMAP

Private Sub Form_Load()
Dim temp As Long

With Picture1
.ScaleMode = 3
.Picture = LoadPicture("Test.bmp") 'Test.bmp durch einen
'echten Dateinamen 'ersetzen
temp = GetObject(.Picture, Len(mBmp), mBmp)
.PaintPicture .Picture, 0, 0, _
.ScaleWidth, .ScaleHeight, _
0, 0, _
.ScaleWidth, .ScaleHeight, _
vbSrcCopy
HScroll1.Min = 0
HScroll1.Max = mBmp.bmWidth - .ScaleWidth
HScroll2.Min = 1 ' sonst Division durch Null
HScroll2.Max = 8 ' maximal 8-fach Zoom
VScroll1.Min = 0
VScroll1.Max = mBmp.bmHeight - .ScaleHeight
End With
End Sub

Private Sub HScroll1_Change()
With Picture1
.PaintPicture .Picture, _
0, 0, _
.ScaleWidth, .ScaleHeight, _
HScroll1.Value, VScroll1.Value, _
.ScaleWidth / HScroll2.Value, .ScaleHeight / HScroll2.Value, _
vbSrcCopy
End With
End Sub

Private Sub HScroll1_Scroll()
HScroll1_Change
End Sub

Private Sub HScroll2_Change()
HScroll1_Change
End Sub

Private Sub VScroll1_Change()
HScroll1_Change
End Sub

Private Sub VScroll1_Scroll()
HScroll1_Change
End Sub

Kommentar von Jörg am 13.05.2002 um 16:13

Okay, ich habs schon selbst rausgefunden. Hier für alle anderen:
If Picture1.ScaleWidth

Kommentar von Jörg am 09.05.2002 um 15:41

Wir funktioniert das mit der Max-Eigenschaft des Scrollbalkens. Wenn ich ein Bild in der pictureBox lade kann ich über die Bildgröße hinausscrollen. Also wie muss ich die Max Eigenschaft setzen hscroll1.max=picture2.width funktioniert nicht). Bitte helft mir.

Kommentar von Stephan am 22.07.2001 um 13:46

Hi,
ich hätte es nicht schlecht gefunden, wenn der Author des Tips die Max Eigenschaft des Scrollbalkens erwähnt hätte.
Ansonsten war der Tip gut :)
Gruß
Stephan

Kommentar von Sven am 18.05.2001 um 14:29

Das bringt, dass man auch auf den Gubbel (oder wie das heisst) von der Scrolleiste Scrollen kann, ohne die Maustaste loszulassen.

Kommentar von Pösch am 23.01.2001 um 17:00

??? Und was bringts? Ich würd viel lieber das Bild in der Picturebox scrollen und nicht die Picturebox! Ne Picturebox (in der Größe des Bildes) in 'nem Frame ohne Caption, is nicht grad das Optimum, aber das einzige was mir einfällt...

Kommentar von Sven am 26.11.2000 um 15:12

Eigentlich fehlt ja noch:
Private Sub HScroll1_Scroll()
Picture2.Left = -HScroll1.Value
End Sub
Private Sub VScroll1_Scroll()
Picture2.Top = -VScroll1.Value
End Sub
Damit das Bild auch scrollt, wenn man auf den Regler klickt und ihn hin und her zieht.