Newsgroup: it.comp.lang.visual-basic
Titolo: X only-offroad

Ti posto qui sotto il tuo codice + le aggiunte del caso e mi dici cosa manca
xche a
me non funziona:
In un form chiamato Form1 aggiungo una Picture1 e un Frame1 ... Ma appena
avvio il prog il frame non è trasparente.
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, _
    ByVal x As Long, ByVal y As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal
Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long,
ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long)
As Long
Private Declare Function DeleteObject Lib "gdi32" _
    (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim a As Long
    a = MakeTrans(Picture1)
End Sub
Private Function MakeTrans(picSource As PictureBox) As Long
   Dim lRetr As Long, _
       lHeight As Long, _
       lWidth As Long, _
       lColor As Long, _
       lRgnFinal As Long, _
       lRgnTmp As Long, _
       lStart As Long, _
       lRow As Long, _
       lCol As Long
   lColor = GetPixel(picSource.hdc, 0, 0)
   lHeight = picSource.Height / Screen.TwipsPerPixelY
   lWidth = picSource.Width / Screen.TwipsPerPixelX
   lRgnFinal = CreateRectRgn(0, 0, 0, 0)
   For lRow = 0 To lHeight - 1
     lCol = 0
     Do While lCol < lWidth
       Do While lCol < lWidth And GetPixel(picSource.hdc, lCol, lRow) =
lColor
         lCol = lCol + 1
       Loop
       If lCol < lWidth Then
         lStart = lCol
         Do While lCol < lWidth And GetPixel(picSource.hdc, lCol, lRow) <>
lColor
           lCol = lCol + 1
         Loop
         If lCol > lWidth Then lCol& = lWidth
         lRgnTmp = CreateRectRgn(lStart, lRow, lCol, lRow + 1)
         lRetr = CombineRgn(lRgnFinal, lRgnFinal, lRgnTmp, RGN_OR)
         DeleteObject (lRgnTmp)
       End If
     Loop
   Next
   MakeTrans = lRgnFinal
 End Function

 Ti posto qui sotto il tuo codice + le aggiunte del caso e mi dici...
L'hai postato due volte, una nel topic di competenza e questa aprendo un
nuovo topic.
L'hai certamente fatto per far meglio vedere il tuo post.
Non credi che possa essere anche un buon modo per essere totalmente
ignorato? <eg>

 ignorato? <eg>
Aggiungo anche che non č buona norma riferirsi ad un solo componente del NG.
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
www.nicolaottomano.it

ignorato? <eg>
E aggiungo: 
non si puo' obbligare chicchessia a rispondere.
Se only-offroad, bonta' sua, ha tempo, modo e voglia di rispondere,
bene, altrimenti non e' corretto tirarlo pubblicamente in ballo.
Mi prude il killfile...
-- 
ciao,
hal

 Se only-offroad, bonta' sua, ha tempo, modo e voglia di rispondere,
Della serie,
se ci sei batti un colpo alla tastiera
Ave, da una Roma sempre più bella e produttiva di pria
giuseppeD

Ave, da una Roma sempre più bella e produttiva di pria
Un mugugno da una Genova piovosa :-(
-- 
ciao,
hal

Chiedo scusa al diretto interessato in oggetto e a tutti x aver aperto un
nuovo post... Non ho pensato a nulla di quello che avete detto e mi scuso
davvero!!!

 Ave, da una Roma sempre più bella e produttiva di pria
...che pria
se vuoi fare il poeta!  :-)
--
Gulp
....forse mi sono perso qualcosa !

 me non funziona:
----
Allora cerco di spiegarmi chiaramente, non sapendo quali sono le tue 
competenze su VB ma soprattutto sulle API e sulla struttura di Windows.
Considerando che ogni oggetto di Windows č una "window" con alcune 
"derivazioni" vediamo che cosa fa la funzione:
usa due control Pictures, attraverso il loro handle, in cui in uno 
(pic0) c'č l'immagine che devi scontornare e nel secondo(pic1) una 
maschera bit (0/1 ovv bianco e nero) su cui operare la mascheratura.
Che "mascheratura" fa?
Legge ogni singolo punto di pic0 e lo confronta con pic1.
Se in pic1 č bianco prende il pixel dello sfondo o delle finestra 
sottostante e lo riporta in pic0 altrimenti tiene il pic0.
Ovviamente questa operazione va fatta per "TUTTI" gli oggetti(windows) 
che si vuole rendere trasparenti.
Semplice ... o no!
Penso di essere stato chiaro, piů di cosě non saprei cosa dirti.
Adesso tocca a te! Studiare e provare dicevano ai miei tempi ...
La pappa č pronta ma raffredarla e mangiarla sono compiti tuoi ...
ciao Max

 La pappa č pronta ma raffredarla e mangiarla sono compiti tuoi ...
Scusami ma io davvero non riesco a capire xche non funziona...ho cercato di
carpire pure da altri esempi... ho persino aggiunto un'altra API che č
SetPixel... ma senza risultato... il frame non diventa trasparente ne
tanomeno prende il colore della picture sotto... Ma sei sicuro che non sto
facendo una fatica inutile? Almeno spiegami dove sbaglio xche io davvero
inizio a non capire... Non voglio la pappa pronta ma almeno capire dove
sbaglio...
Grazie!!!

 End Sub
Sbagli la chiamata, va fatta attraverso la SetWindowRgn, esempio:
   SetWindowRgn HwndDellaFormDaFareTrasparente,_
	       MakeTrans(PicDiMascherature), _
                True
ovvio che ci va il declare corretto.
Fammi sapere in privato (togli gli _ )
ciao Max

 ovvio che ci va il declare corretto.
Ciao,
    Ti ho scritto una mail in pvt qualche giorno fa ma non hai risposto e
cosě se non ti fosse arrivata posto qui.
Cosě funziona...
Ma c'č un difetto... non solo rende trasparente il Frame ma anche tutto il
suo contenuto... chiaramente se metto un text e una label al di fuori del
frame li lascia visibili, ma il contenuto scompare.
Cosa manca???
Cmq grazie davvero xche sto imparando soprattutto cose nuove...
Ciao.