Visualizzazione dei risultati da 1 a 10 su 39

Visualizzazione discussione

  1. #11
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    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
    Immagini allegate Immagini allegate
    Jupy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.