Título: AlphaBlend traer desde otra ventana Publicado por: LeandroA en 11 Mayo 2006, 04:43 am LeandroA LeandroA is online now
Registrado: abr 2005 Mensajes: 171 AlphaBlend traer desde otra ventana Hola tengo un problema y no le encuentro la vuelta estoy usando el api AlphaBlend (en esta pagina hay un ejemplo) bien a la hora de usarlo con dos pictures en el mismo form, funciona bien, pero yo intento traer el efecto de transparencia desde otro lugar por ejemplo form2.hdc y digamos que funciona pero el problema viene que esta ventana deve estar visible cosa que si lo ago con los dos pictures del mismo formulario no es nesesario, si pruevan el ejemplo que pongo a continuacion veran que si superpongo el form1 sobre el form2 este tomara el efecto de transparencia tomara parte del form1 o cualquier cosa que se sobreponga sobre el form2 entonces no encuentro la solucion para evitar esto, quizas y no soy muy entendido en el tema sea nesesario aplicar algun Byval pero estoy perdido para provar agreguen tres picture , dos formularios y command1 Citar Option Explicit 'Cada control debe tener una imagen, ambas deben ser distintas Const AC_SRC_OVER = &H0 Private Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Command1_Click() Dim BF As BLENDFUNCTION, lBF As Long 'Cambiar el modo gráfico para que se mantenga la imagen Picture1.AutoRedraw = True Picture2.AutoRedraw = True Picture3.AutoRedraw = True Picture1.ScaleMode = vbPixels Picture2.ScaleMode = vbPixels Picture3.ScaleMode = vbPixels Form2.ScaleMode = vbPixels 'asignar los parámetros With BF .BlendOp = AC_SRC_OVER .BlendFlags = 0 .SourceConstantAlpha = 128 .AlphaFormat = 0 End With 'copia la función blend a una variable en memoria de tipo long RtlMoveMemory lBF, BF, 4 'aplicar la Api desde la picture1 sobre la picture2 AlphaBlend Picture2.hdc, 50, 0, 100, 100, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, lBF Picture2.Refresh 'aplicar la Api desde la form2 sobre el picture3 '********** aca se me complica la cosa************** AlphaBlend Picture3.hdc, 50, 0, 100, 100, Form2.hdc, 0, 0, Form2.ScaleWidth, Form2.ScaleHeight, lBF Picture3.Refresh End Sub Private Sub Form_Load() Form2.Show Form2.BackColor = vbRed End Sub Título: Re: AlphaBlend traer desde otra ventana Publicado por: Ironhorse en 11 Mayo 2006, 21:28 pm Tenes que poner la propiedad Autoredraw=true en el Form2
|