Visual Basic Simple
Riprodurre un'immagine in maniera affiancata
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

Attraverso la finestra di dialogo Proprietà dello schermo è possibile modificare lo sfondo del Desktop di Windows. Abbiamo visto in un altro HowTo come effettuare questa modifica tramite Visual Basic. Vedremo invece in questo articolo come simulare sulla superficie di un form l'effetto "Affianca" di quella finestra di dialogo, effetto che prende il nome di Tiling (dall'inglese Tile, pavimentare).

Figura 1
Figura 1

Il nostro progetto si comporrà di un solo form, un Frame e 4 controlli Image con le immagini mostrate qui sotto e liberamente scaricabili cliccando sopra una di esse.

Figura 2 Stampanti.BMP
Figura 3 Accesso remoto.BMP
Figura 4 Operazioni pianificate.BMP
Figura 5 Pannello di controllo.BMP

Figura 6Il controllo Frame, di nome fraTiles, servirà per contenere le quattro immagini poste in una matrice di controlli, di nome imgTile e con indice da 0 a 3.

Il funzionamento del progetto è semplicissimo: l'utente dovrà cliccare sopra una delle 4 immagini per vedere il motivo riprodotto su tutta la superficie del form.
Il contenitore Frame, oltre a contenere le immagini, le preserverà dalla copertura del motivo riprodotto.

Il codice si compone di una sola routine, posta ad intercettare il click sopra una delle quattro immagini:

  1. Option Explicit
  2. Private Sub imgTile_Click(Index As Integer)
  3.   Dim sngX As Single
  4.   Dim sngY As Single
  5.   Const sngDistanza As Single = 200
  6.   Me.Cls
  7.   Me.AutoRedraw = True
  8.   With imgTile(Index)

Qualunque sia l'immagine cliccata, sarà comunque generato l'eventoClick dell'oggetto imgTile. Sarà fornito l'indice del controllo cliccato.

La routine utilizza due variabili di nome sngX e sngY per calcolare la posizione di ogni tessera della superficie da ricoprrire ed una costante di nome sngDistanza che consentirà di distanziare ogni tessera dalla successiva, al fine di evitare un effetto grafico sgradevole che può essere comunque riprodotto ponendo la costante a 0.

La riga 8 cancella ogni modifica grafica apportata in precedenza alla superficie, lasciando qundi solo i controlli del form. La riga 9 rende le modifiche grafiche alla superficie del form persistenti perché altrimenti se una finestra venisse sovrapposta al nostro form, il motivo grafico sarebbe cancellato.

L'istruzione alla riga 10 rende predefinito l'oggetto imgTitle con indice uguale ad Index ovvero l'immagine che è stata selezionata dall'utente. È stata utilizzata soltanto per abbreviare il codice e semplificarne la scrittura.

  1.     For sngX = 0 To Me.Width Step .Width + sngDistanza
  2.       For sngY = 0 To Me.Height Step .Height + sngDistanza
  3.         Me.PaintPicture .Picture, sngX, sngY
  4.       Next sngY
  5.     Next sngX
  6.   End With
  7. End Sub

Seguono due cicli iterativi, uno per l'asse X e l'altro per l'asse Y. Essi si occuperanno di ricopiare l'immagine selezionata ad intervalli regolari su tutta la superficie del form.

Entrambi i cicli iniziano da 0 e continuano fino al raggiungimento della dimensione (larghezza e altezza) del form, ad incrementi pari alla dimensione dell'immagine selezionata più la distanza tra un'immagine e l'altra. Questo assicura che un'immagine non venga sovrascritta da un'altra e distanza le immagini tra loro.

Così il form viene scomposto in varie sezioni, ognuna delle quali viene riempita con l'immagine selezionata. La copia grafica dell'immagine è eseguita alla riga 13 tramite il metodo PaintPicture del form fornendogli semplicemente l'immagine da copiare e le coordinate in cui essa dovrà essere copiata.

L'esecuzione del progetto dimostra subito la semplicità d'utilizzo. Ogni volta che l'utente clicca sopra una delle quattro immagini viene riprodotto il motivo affiancando tale immagine.

Figura 7
Figura 7

Lo sviluppo del progetto si rivela davvero molto semplice e senza rischi per l'integrità del progetto. È tuttavia presente una pesante limitazione: le immagini da riprodurre hanno sempre e comunque un colore di sfondo, nel nostro caso il fucsia. Non è possibile quindi ricopiare delle immagini trasparenti, senza sfondo.

Quasi sempre il colore di sfondo della superficie del form è il grigio di sistema, e quindi ci si potrebbe aspettare che riproducendo un'immagine con lo sfondo grigio si ottenga un effetto di trasparenza, ma non è sempre così!
L'utente del prodotto finale potrebbe utilizzare un colore di sistema differente dal solito grigio, annullando così l'effetto trasparenza. Ecco perché nelle nostre immagini abbiamo deciso di evidenziare il colore di sfondo.

Fibia FBI
14 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