VB 5/6-Tipp 0075: Scrollen einer PictureBox
von ActiveVB
Beschreibung
Zeigt wie mit einfachen Mitteln oben besagter Effekt zu erzielen ist.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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.