| |
VB.NET - FortgeschritteneTransparenter LABEL-Hintergrund | | | Autor: Rainer | Datum: 13.04.18 17:44 |
| Hallo,
ich versuche ein Meldungsfenster mit Hilfe eines Labels darzustellen, dessen Hintergrund vollständig oder teilweise transparent dargestellt wird. Ähnlich den Meldungsfenstern des Betriebssystems. Versucht habe ich es mit der Anweisung:
Me.Label1.BackColor = Color.FromArgb(0.5, 255, 255, 255) Leider war mir damit kein Erfolg beschieden. Hat jemand einen Tipp, wie ich mein Ziel erreichen kann?
Gruß, Rainer. | |
Re: Transparenter LABEL-Hintergrund | | | Autor: Manfred X | Datum: 13.04.18 21:34 |
| Ein WinForms-Formular ....
Public Class frmTransparenz
Private Sub frmTransparenz_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
Me.FormBorderStyle = FormBorderStyle.None
Me.TransparencyKey = Color.LightBlue
Me.BackColor = Color.LightBlue
Me.ForeColor = Color.Red
Me.Font = New Font("Arial", 36, FontStyle.Bold)
Me.Size = New Size(600, 150)
Me.StartPosition = FormStartPosition.Manual
Me.Location = New Point(300, 300)
End Sub
Private Sub frmTransparenz_Paint(sender As Object, _
e As PaintEventArgs) Handles Me.Paint
Using br As New SolidBrush(Me.ForeColor)
e.Graphics.DrawString _
("May be, that's the way ....", Me.Font, br, New Point(30, 30))
End Using
End Sub
End Class | |
Re: Transparenter LABEL-Hintergrund | | | Autor: Rainer | Datum: 16.04.18 19:47 |
| Hallo Manfred,
vielen Dank für Deine Hilfe. Es hat auf Anhieb funktioniert.
Eine Frage hätte ich noch:
Bei Deiner Lösung wird die 100%ige Transparenz realisiert. Mein ursprüngliches Vorhaben bestand darin, mit der Alphakanal-Einstellung der FROMAGB-Funktion die dort mögliche Abstufung der Transparenz zu nutzen. Kennst Du dafür auch eine Lösung?
Gruß, Rainer. | |
Re: Transparenter LABEL-Hintergrund | | | Autor: Manfred X | Datum: 17.04.18 09:15 |
| Hallo!
Du könntest die Opacity-Eigenschaft der Form nutzen, um temporär
Teil-Transparenz zu erzeugen und eine Meldebox vor diese Form
einblenden.
Die Meldebox ....
Public Class frmMessage
Dim _messagetext As String
Public Property MessageText As String
Set(value As String)
_messagetext = value
End Set
Get
Return _messagetext
End Get
End Property
Private _messagefont As Font
Public Property Messagefont As Font
Set(value As Font)
_messagefont = value
End Set
Get
Return _messagefont
End Get
End Property
Public ReadOnly Property GetGraphics As Drawing.Graphics
Get
Return lblMessage.CreateGraphics
End Get
End Property
Dim WithEvents lblMessage As New Label With {.Parent = Me}
Private Sub frmMessage_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.FormBorderStyle = FormBorderStyle.None
'Me.TransparencyKey = Color.Transparent
lblMessage.BackColor = Color.White
With lblMessage.DataBindings
.Add("Text", Me, "Messagetext")
.Add("Font", Me, "Messagefont")
End With
End Sub
Private Sub frmMessage_Resize(sender As Object,
e As EventArgs) Handles Me.Resize
lblMessage.Size =
New Drawing.Size(Me.ClientRectangle.Width, Me.ClientRectangle.Height)
End Sub
Private Sub lblMessage_Click(sender As Object,
e As EventArgs) Handles lblMessage.Click
Me.Close()
End Sub
End Class .
.
Das Formular ....
Public Class frmMother
Dim pl As New Panel With _
{.Parent = Me, .BorderStyle = BorderStyle.Fixed3D}
Dim WithEvents btnMessage As New Button With
{.Parent = pl, .Location = New Point(100, 100),
.Text = "Show Message", .Width = 100}
Private Sub frmMother_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Size = New Size(500, 500)
End Sub
Private Sub btnMessage_Click(sender As Object,
e As EventArgs) Handles btnMessage.Click
Me.Opacity = 0.5 'Hauptformular teil-transparent anzeigen
Using Mymessage As New frmMessage
With Mymessage
'Eigentümer des Dialogs setzen
.Owner = Me
'Text und Font der Meldung
.MessageText =
"Das ist eine Meldung. " &
"Bei einem Click auf das Meldefenster " &
"wird die Anzeige beendet."
.Messagefont = New Font("Arial", 16, FontStyle.Italic)
'Erforderliche Höhe der Meldung
'bei festgelegter Breite ermitteln
Dim sz As SizeF
Dim message_width As Integer = 200
Using g As Graphics = .GetGraphics
sz = g.MeasureString(.MessageText, .Messagefont,
message_width)
End Using
.ClientSize = New Size(message_width, CInt(sz.Height * 1.1))
'Dialog lokalisieren und ausführen
.StartPosition = FormStartPosition.CenterParent
.ShowDialog()
End With
End Using
Me.Opacity = 1 'Hauptformular ohne Transparenz
End Sub
Private Sub frmMother_Resize(sender As Object,
e As EventArgs) Handles Me.Resize
pl.Size = Me.ClientSize
End Sub
End Class
Beitrag wurde zuletzt am 17.04.18 um 09:24:32 editiert. | |
Re: Transparenter LABEL-Hintergrund | | | Autor: Rainer | Datum: 17.04.18 11:22 |
| Hallo Manfred,
die OPACITY-Variante ist ein guter Hinweis. Nur, daß ich sie nicht für das Hauptformular (Ich glaube der Nutzer, der plötzlich beim Auftauchen einer Meldung im Hauptfenster den Desktop-Hintergrund oder andere Fenster durchschimmern sieht, würde diese Lösung nicht akzeptieren und "verwirrt" reagieren.) nutze, sondern für das Meldungsfenster selbst. Das funktioniert natürlich nur, wenn die TRANSPARENCYKEY-Einstellung deaktiviert wird.
Also nochmals Danke für Deine Unterstützung.
Gruß, Rainer. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|