Newsgroup: it.comp.lang.visual-basic
Titolo: trasparenza

Esiste la maniera di rendere trasparente un colore di una immagine, in modo
da mostrare lo sfondo sottostante?
Quale formato grafico lo supporta e che controlli esistono in VB per
gestirlo?
Ciao, Silv:o)


Dipende da cosa intendi...
Se parli di un controllo che possa visualizzare immagini trasparenti, con un
colore maschera, allora non è difficile da fare con vb. Si tratta solo di
creare un ocx e giocare con le sue properità Picture,MaskPicture,MaskColor e
BackStyle. (Se vuoi ti posto un ocx di questo tipo creato da me)
Se invece parli di metodi paintpicture trasparenti allora la cosa è un po'
più incasinata e molto lenta se non usi vari accorgimenti... Poiche la
spiegazione è un po' troppo lunga (e soprattutto non sono sicuro se è quello
che chiedi) preferisco sospendere qui per ora.
Ciao
Daniele

...


Mi interesserebbe l'OCX di cui parli x capire come realizzare la mia prova.
Il funzionamento č abbastatnza intuitivo: Immagine č la picture da rendere
trasparente e Maskcolor č il colore maschera.
Ciao
Daniele
Picture1 č un' istanza di una picturebox sull' usercontrol
(si potrebbe anche eleminare , e prima o poi mi decido a farlo, ma a suo
tempo mi sembrava indispensabile per l'autosize)
Option Explicit
Dim Auto As Boolean
Public Event Click()
Public Event DblClick()
Public Property Set Immagine(ByVal vNewValue As Picture)
Picture1.Picture = vNewValue
If Auto = True Then
UserControl.Width = Picture1.Width
UserControl.Height = Picture1.Height
End If
UserControl.Picture = vNewValue
UserControl.MaskPicture = vNewValue
End Property
Public Property Get MaskColor() As OLE_COLOR
MaskColor = UserControl.MaskColor
End Property
Public Property Let MaskColor(ByVal vNewValue As OLE_COLOR)
UserControl.MaskColor = vNewValue
End Property
Private Sub UserControl_Click()
RaiseEvent Click
End Sub
Private Sub UserControl_DblClick()
RaiseEvent DblClick
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
On Error Resume Next
Set Immagine = PropBag.ReadProperty("Immagine")
MaskColor = PropBag.ReadProperty("MaskColor", RGB(0, 0, 0))
Enabled = PropBag.ReadProperty("Enabled", True)
AutoSize = PropBag.ReadProperty("AutoSize", False)
End Sub
Public Property Get Enabled() As Boolean
Enabled = UserControl.Enabled
End Property
Public Property Let Enabled(ByVal vNewValue As Boolean)
UserControl.Enabled = vNewValue
End Property
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
PropBag.WriteProperty "Immagine", UserControl.Picture
PropBag.WriteProperty "MaskColor", UserControl.MaskColor, RGB(0, 0, 0)
PropBag.WriteProperty "Enabled", UserControl.Enabled, True
PropBag.WriteProperty "AutoSize", Auto, False
End Sub
Public Sub Refresh()
UserControl.Refresh
End Sub
Public Property Get AutoSize() As Boolean
AutoSize = Auto
End Property
Public Property Let AutoSize(ByVal vNewValue As Boolean)
Auto = vNewValue
If Auto = True Then
UserControl.Width = Picture1.Width
UserControl.Height = Picture1.Height
End If
End Property

Grazie dell' help Daniele Esse. ^_^


Mi ero scordato un paio di cosette:
Usercontrol.backstile=0 - transparent
Picture1.autosize=true
Picture1.visible=false
Spero di essermi ricordato tutto
Ciao
Daniele

che chiedi) preferisco sospendere qui per ora.
la seconda che hai detto.
Quello che volevo realizzare e' un gratta e vinci virtuale con un touch
screen. Quindi mi interessava qualcosa che al volo mi rendesse trasparente
la zona della picture che "gratto" col dito-mouse.
Un po' quello che fa la gomma nei programmi di disegno multilayer...
Ciao, Silv:o)

Ciao, Silv:o)
Be... Forse potresti creare il primo livello (quello da scoprire) con una
picture box e il secondo livello (quello da grattare) con l'ocx che ho
postato; o con tanti ocx quante sono le eventuali caselle da grattare. Poi
assegnare a tutti un' immagine di copertura (la patina d'oro nel caso dei
gratta e vinci) e , al momento che li vuoi rendere trasparenti, assegnargli
un'immagini nulla o una serie di immagini se vuoi fare un'animazione (la
patina d'oro che viene grattata via da cento lire) con la parte trasparente
con il colore che metterai come MaskColor.
Cosě almeno č come cercherei di fare io.
Se invece ti serve per forza un paintpicture trasparente, Bruno La Torre ha
postato la documentazione di questa Function che č molto meglio del mio
vecchio metodo.
Private Declare Function TransparentBlt Lib "Msimg32.dll" (ByVal hdcDst As
Long, ByVal leftDst As Long, ByVal topDst As Long, ByVal widthDst As Long,
ByVal HeightDst As Long, ByVal hdcSrc As Long, ByVal leftSrc As Long, ByVal
topSrc As Long, ByVal widthSrc As Long, ByVal heightSrc As Long, ByVal
maskColor As Long) As Long
Ciao
Daniele


-------------
Ciao!
Per rendere trasparente un'immagine, trovi un esempio sul mio sito Internet.
Marco Minerva
http://www.geocities.com/SiliconValley/Foothills/7260/
http://www.armaditaggia.com/marco