Ciao, ti ho buttato giù un piccolo esempio sia per zoomare che per il pan..
Probabilmente il codice, pur se l'ho commentato poco poco, non ti sarà del tutto comprensibile, comunque magari, anche se poco, ti può essere di aiuto. E' solo un esempio dal quale devi prendere spunto e migliorare il tutto man mano che acquisirai più esperienza, anche leggendo libri. L'ideale sarebbe astrarre il tutto e crearti una classe o meglio un ocx..se avrai voglia e tempo da dedicare alla programmazione, arriverai anche a questo.
![]()
Allora per questo esempio ti servono:
2 optionButton
1 VScrollBar
1 HScrollBar
3 PictureBox
Una pictureBox la chiami picBase (le dimensioni le decidi tu, considera che è la base di appoggio usata per visualizzare le immagini), un'altra pictureBox la inserisci all'interno della picBase e la chiami picView (sarà l'oggetto che conterrà l'immagine), mentre l'ultima pictureBox la chiami picBuff (la puoi fare anche piccolissima) e la posizione in un punto qualunque del form.
Per quanto riguarda la picView impostare le proprietà AutoRedraw=True e BorderStyle=0-None
Mentre per la picBuff imposta la proprietà Visible=False
Una optionButton la chiami optZoom e l'altra optPan (in base a quale selezioni, il mouse fa la funzione di zoom o pan) Se sarà selezionato l'opzione di zoom, cliccando con il tasto destro l'immagine si riduce, mentre con il tasto sinistro si ingrandisce. Mentre se si seleziona l'opzione di pan, tenendo premuto il tasto sinistro del mouse sopra l'immagine muoviamo l'immagine stessa.
La VScrollBar la chiami picVscroll , e la HScrollBar la chiami picHscroll (le posizioni rispettivamente alla destra e alla base della picBase
Ti allego l'immagine di come dovrebbe venire..
e questo è il codice:
codice:Private Const OFFSET_ZOOM = 10 Dim clickX As Single Dim clickY As Single Dim valPercZoom As Double 'passare il percorso completo di nome immagine da caricare Private Sub CaricaImmagine(pathImg As String) picBuff.Picture = LoadPicture(pathImg) 'visualizza l'immagine alla percentuale di default (100%) Zoom valPercZoom End Sub 'centra l'immagine sulla base di visualizzazione (picBase) Private Sub CentraPic(pW As Single, pH As Single) picView.Move (picBase.Width - pW) / 2, (picBase.Height - pH) / 2, pW, pH End Sub 'Per settare le barre di scorrimento in base alla grandezza dell'immagine Private Sub SetPicScroll(maxHeight As Single, maxWidth As Single) If maxHeight > picBase.Height Then picVscroll.Visible = True picVscroll.Max = (maxHeight - picBase.Height) picVscroll.Value = Abs(picView.Top) Else picVscroll.Visible = False End If If maxWidth > picBase.Width Then picHscroll.Visible = True picHscroll.Max = (maxWidth - picBase.Width) picHscroll.Value = Abs(picView.Left) Else picHscroll.Visible = False End If End Sub 'per zoommare l'immagine Private Sub Zoom(percZoom As Double) Dim H As Single Dim W As Single 'calcola le nuove dimensioni dell'immagine W = picBuff.Picture.Width * (percZoom / 100) H = picBuff.Picture.Height * (percZoom / 100) 'cancella l'immagine che c'era prima picView.Cls 'centra la base di visualizzazione dell'immagine (picView CentraPic W, H 'ridisegna l'immagine con le nuove dimensioni picView.PaintPicture picBuff.Picture, 0, 0, W, H 'imposta le barre di scorrimento SetPicScroll H, W End Sub 'per spostare l'immagine con l'opzione pan 'se le barre di scorrimento non sono visibili, non c'è nessun spostamento.. 'Altrimenti calcola la nuova posizione e riposizione sia le barre di scorrimento che l'immagine.. Private Sub MovePicture(posX As Single, posY As Single) Dim newPosX As Single Dim newPosY As Single If picHscroll.Visible Then newPosX = picView.Left - (clickX - posX) If newPosX > 0 Then newPosX = 0 ElseIf Abs(newPosX) > picHscroll.Max Then newPosX = -picHscroll.Max End If picHscroll.Value = Abs(newPosX) picView.Left = newPosX End If If picVscroll.Visible Then newPosY = picView.Top - (clickY - posY) If newPosY > 0 Then newPosY = 0 ElseIf Abs(newPosY) > picVscroll.Max Then newPosY = -picVscroll.Max End If picVscroll.Value = Abs(newPosY) picView.Top = newPosY End If End Sub Private Sub Form_Load() picHscroll.Min = 0 picVscroll.Max = 0 optZoom.Value=True valPercZoom = 100 CaricaImmagine "c:\immagine.jpg" End Sub Private Sub picHscroll_Change() picView.Left = -picHscroll.Value End Sub Private Sub picView_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If optPan.Value Then If (Button = vbKeyLButton) Then 'salva il punto iniziale dove si è fatto click con il mouse 'per calcolare l'offset di scostamento dai margini dell'immagine da spostare.. clickX = X clickY = Y End If End If End Sub Private Sub picView_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If (Button = vbKeyLButton) And (optPan.Value) And (picHscroll.Visible Or picVscroll.Visible) Then MovePicture X, Y End If End Sub Private Sub picView_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If optZoom.Value Then 'gli incrementi/decrementi per zoommare sono impostati con la costante OFFSET_ZOOM If (Button = vbKeyLButton) Then valPercZoom = valPercZoom + OFFSET_ZOOM ElseIf (Button = vbKeyRButton) Then valPercZoom = valPercZoom - OFFSET_ZOOM If valPercZoom < OFFSET_ZOOM Then valPercZoom = OFFSET_ZOOM End If End If Zoom valPercZoom End If End Sub Private Sub picVscroll_Change() picView.Top = -picVscroll.Value End Sub![]()

, non ti sarà del tutto comprensibile, comunque magari, anche se poco, ti può essere di aiuto. E' solo un esempio dal quale devi prendere spunto e migliorare il tutto man mano che acquisirai più esperienza, anche leggendo libri. L'ideale sarebbe astrarre il tutto e crearti una classe o meglio un ocx..se avrai voglia e tempo da dedicare alla programmazione, arriverai anche a questo.
Rispondi quotando
