Public Class HighlightKey
Inherits Control
Private m_fillColor As Color = Color.White
Private m_opacity As Integer = 100
Private alpha As Integer
Private m_image As Image
Public Sub New()
SetStyle(ControlStyles.SupportsTransparentBackColor, True)
SetStyle(ControlStyles.Opaque, True)
Me.BackColor = Color.Transparent
Console.WriteLine("new Highlight key ")
End Sub
Public Property Image() As Image
Get
Return m_image
End Get
Set(ByVal value As Image)
m_image = value
End Set
End Property
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or &H20
Return cp
End Get
End Property
Protected Overloads Overrides Sub OnBackColorChanged(ByVal e As EventArgs)
If Me.Parent IsNot Nothing Then
Parent.Invalidate(Me.Bounds, True)
End If
MyBase.OnBackColorChanged(e)
End Sub
Protected Overloads Overrides Sub OnParentBackColorChanged(ByVal e As EventArgs)
Me.Invalidate()
MyBase.OnParentBackColorChanged(e)
End Sub
Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaintBackground(pevent)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g As Graphics = e.Graphics
Dim brush As New SolidBrush(Me.ForeColor)
Dim StringSize As New SizeF
alpha = (m_opacity * 255)/100
If m_image IsNot Nothing Then
StringSize = g.MeasureString(Me.Text, Me.Font)
Dim x As Integer = (CInt(Me.m_image.Width) - CInt(StringSize.Width))/2
g.DrawImage(m_image, 0, 0, m_image.Width, m_image.Height)
g.DrawString(Me.Text, Me.Font, brush, x, 20)
End If
brush.Dispose()
g.Dispose()
MyBase.OnPaint(e)
End Sub
Public Function SetImgOpacity(ByVal imgPic As Image, ByVal imgOpac As Single) As Image
Dim bmpPic As New Bitmap(imgPic.Width, imgPic.Height)
Dim gfxPic As Graphics = Graphics.FromImage(bmpPic)
Dim cmxPic As New ColorMatrix()
cmxPic.Matrix33 = imgOpac
Dim iaPic As New ImageAttributes()
iaPic.SetColorMatrix(cmxPic, ColorMatrixFlag.[Default], ColorAdjustType.Bitmap)
gfxPic.DrawImage(imgPic, New Rectangle(0, 0, bmpPic.Width, bmpPic.Height), 0, 0, imgPic.Width, imgPic.Height, _
GraphicsUnit.Pixel, iaPic)
gfxPic.Dispose()
Return bmpPic
End Function
Private Sub HighlightKey_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LocationChanged
Me.Refresh()
End Sub
Private Sub HighlightKey_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.TextChanged
Me.Refresh()
End Sub
End Class
J'ai créé un contrôle comme ci-dessus, ce contrôle me permet d'importer un png avec un canal alpha et une forme aléatoire. et puis il peut s'afficher au-dessus de tout autre contrôle, c'est-à-dire, une zone de texte, une zone d'image, etc. et l'arrière-plan devrait toujours montrer ce qui se trouve juste en dessous, au lieu de simplement montrer le contrôle de ses parents.VB.net problème de contrôle transparent
cela a fonctionné si c'est le mode statique, à savoir rester immobile dans le formulaire. mais quand j'ai essayé de le faire glisser, le contrôle ne se rendrait pas correctement, et passe également sous d'autres contrôles.
Quelqu'un peut-il me donner un coup de main s'il-vous-plaît?
Ou une fenêtre en couches. – SLaks
Oui, le fond de page * est * une fenêtre en couches. –
oui, en fait j'ai déjà fait la solution de superposition, pourquoi im faire ceci est, j'utilise la forme superposée comme une touche highligh sur une interface clavier tactile (comme l'iPhone et le clavier d'un autre écran tactile) et ça pose problème avec SendKey.send – user294720