Visual Basic Simple
Convertire misure
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 1 / 5

Utilizzando Visual Basic, funzioni API ed altri componenti ci si imbatte facilmente in diverse unità di misura quali i Twips, gli HiMetric, i Pixel o altro. Altre volte si ha un valore in una misura ed è necessario convertirlo in un'altra. Vedremo in questo HowTo come effettuare questo genere di conversioni con estrema semplicità.

Figura 1Il form del nostro progetto di esempio si comporrà di quattro semplici controlli: due ListBoxposte ai bordi del form, di nome lstFormato1 e lstFormato2.

In mezzo a queste sono presenti un CommandButton di nome cmdConverti ed una TextBox di nome txtGrandezza. Abbiamo aggiunto anche due Label descrittive con le Caption impostate a "<- Da" ed "A ->" ma non presentano alcuna utilità all'interno del progetto.

Entrambe le ListBox conterranno le diverse unità di misura e saranno riempite con questi valori in fase di esecuzione. Ad ogni elemento inserito nelle ListBox sarà assegnata una costante indicativa l'unità di misura, mediante impostazione della proprietà ItemData.

Vediamo il breve e semplice codice di questo progetto:

  1. Option Explicit
  2. Private Sub Form_Load()
  3.     Dim ctlControllo As ListBox
  4.     Dim intConta As Integer
  5.     For intConta = 1 To 2
  6.         Set ctlControllo = IIf(intConta = 1, lstFormato1, lstFormato2)
  7.         With ctlControllo
  8.             .Clear

All'avvio del progetto dovranno essere riempite le due ListBox. Sarà pertanto utilizzato un ciclo eseguito due volte (riga 6). Alla riga 7 verrà estratta la prima o la seconda ListBox in funzione del valore della variabile intConta. La ListBox estratta sarà contenuta nella variabile oggetto ctlControllo.

Ottenuto quindi un riferimento ad una ListBox, utilizziamo l'istruzione With per migliorare l'efficenza e semplificare la scrittura del codice di riempimento della ListBox. Alla riga 9 verrà innanzitutto svuotata la ListBox selezionata.

  1.             .AddItem "Twips"
  2.             .ItemData(.NewIndex) = vbTwips
  3.             .AddItem "Punti"
  4.             .ItemData(.NewIndex) = vbPoints
  5.             .AddItem "Pixel"
  6.             .ItemData(.NewIndex) = vbPixels
  7.             .AddItem "Caratteri"
  8.             .ItemData(.NewIndex) = vbCharacters
  9.             .AddItem "Pollici"
  10.             .ItemData(.NewIndex) = vbInches
  11.             .AddItem "Millimetri"
  12.             .ItemData(.NewIndex) = vbMillimeters
  13.             .AddItem "Centimetri"
  14.             .ItemData(.NewIndex) = vbCentimeters
  15.             .AddItem "HiMetric"
  16.             .ItemData(.NewIndex) = vbHimetric
  17.             .ListIndex = 0
  18.         End With
  19.     Next intConta
  20. End Sub

Alle righe 10-25 vengono inserite le varie unità di misura nella ListBox. Ogni unità di misura si compone di due righe: la descrizione e la costante nell'enumerazione ScaleModeConstants. La matrice ItemData degli oggetti ListBox consente infatti di assegnare un valore numerico ad ogni elemento della lista. La proprietà NewIndex invece recupera l'indice dell'ultimo elemento inserito in lista. La riga 26 seleziona il primo elemento della lista.

  1. Private Sub cmdConverti_Click()
  2.     Dim intFormato1 As Integer
  3.     Dim intFormato2 As Integer
  4.     Dim strTesto As String
  5.     intFormato1 = lstFormato1.ItemData(lstFormato1.ListIndex)
  6.     intFormato2 = lstFormato2.ItemData(lstFormato2.ListIndex)
  7.     strTesto = CStr(Val(txtGrandezza.Text)) & " " & lstFormato1.List(lstFormato1.ListIndex)
  8.     strTesto = strTesto & " equivalgono a "
  9.     strTesto = strTesto & CStr(Me.ScaleX(Val(txtGrandezza.Text), intFormato1, intFormato2))
  10.     strTesto = strTesto & " " & lstFormato2.List(lstFormato2.ListIndex)
  11.     MsgBox strTesto, vbInformation + vbOKOnly, "Converti misure"
  12. End Sub

Nel momento in cui l'utente preme il pulsante cmdConverti dovrà essere effettuata la conversione tra l'unità di misura selezionata nella prima ListBox e quella scelta nella seconda ListBox.

Alle righe 35 e 36 sono recuperate le costanti delle unità di misura contenute nelle matrici ItemData di ognuna delle ListBox. Così intFormato1 conterrà la costante rappresentativa la prima unità di misura ed intFormato2 conterrà la seconda costante.

La conversione tra le due unità di misura è fatta alla riga 39 mediante l'utilizzo del metodo  ScaleX del form. Il valore specificato è quello contenuto nella casella txtGrandezza e le unità di misura sono specificate nelle variabili intFormato1 ed intFormato2.

Alle righe 37-40 viene costruita una stringa descrittiva del processo di conversione, che verrà memorizzata nella variabile strTesto, la quale verrà mostrata mediante una finestra di avviso alla riga 41.

La dimostrazione del funzionamento è semplicissima: basterà selezionare un'unità di misura nella ListBox a sinistra, un'altra unità di misura nella ListBox di destra, immettere un valore nella casella di testo in basso e premere il pulsante "Converti Grandezze". Apparirà un avviso informativo come mostrato nelle figure in basso.

Figura 2
Figura 2
Figura 3
Figura 3


Il processo di conversione tra le unità di misura è davvero semplice e non presenta alcuna problematica particolare.

Fibia FBI
21 Aprile 2002

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo