none
Bug oder Problem mit Transparenz RRS feed

  • Frage

  • Hallo zusammen,

     

    vielleicht ist es ein Bug, vielleicht verstehe ich auch einfach das Prinzip nicht. Eigentlich ist mein Problem, dass ich eine Software schreibe, die eine Art Präsentation erstellt, die mit einem Beamer projeziert werden kann. Wegen der bekannten Probleme mit verschiedenen Auflösungen sieht die Projektion so aus wie bei Power Point, mit links und rechts schwarzen Balken und die eigentliche Präsi in 4:3 Format. Dazu habe ich bei der Entwicklung einfach ein bildschirmfüllendes schwarzes Form hinter die 4:3 Präsiform gelegt. Eigentlich alles super, nur beim tabben durch die geöffneten Programme mit ALT+TAB taucht das Hintergrundform extra auf, wodurch man entweder nur den schwarzen Bildschirm sehen kann oder die Präsi ohne Hintergrund. Um Hintergund und Präsi jetzt in eine Form zu bringen wollte ich die Elemente der Präsi in ein Panel setzen, hatte da aber Probleme mit der Paint Methode und habe daher untenstehende Test-App. geschrieben. Daraus ergeben sich jetzt eine Frage und ein möglicher Bug:

     

    Frage: Wie kriege ich es hin, dass beim transparenten Label l1 die Hintergrundfarbe dem gemalten Rechteck entspricht, welches zwischen Panel und Label liegt? l2 ist Teil der Form und zeigt das gemalte Rechteck im HG an, warum funktioniert das nicht mit l1?

     

    Bug: Wenn l2 (obwohl außerhalb des Panels und des dort gemalten Rechtecks) eine andere HG-Farbe als transparent bekommt, wird das Rechteck IM Panel nicht mehr gemalt. Ist das ein Bug oder ist da eine höhere Logik dahinter?

     

    Vielen Dank für die Hilfe

     

    Florian

     

    Public Class Class1

    Inherits System.Windows.Forms.Form

    Dim p As Panel = New Panel

     

    Private Sub Class1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Me.BackColor = Color.LightGreen

    Me.ClientSize = New Size(500, 500)

    With p

    .Location = New Point(100, 100)

    .Size = New Size(300, 300)

    .BackColor = Color.Red

    End With

    Me.Controls.Add(p)

     

    Dim l1 As Label = New Label

    With l1

    .BackColor = Color.Transparent

    .Text = "Test"

    .Location = New Point(100, 100)

    End With

    p.Controls.Add(l1)

     

    Dim l2 As Label = New Label

    With l2

    .BackColor = Color.Transparent

    .Text = "Test"

    .Location = New Point(50, 50)

    .Size = New Size(30, 20)

    End With

    Me.Controls.Add(l2)

     

    End Sub

     

    Private Sub Class1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles_ Me.Paint

    Dim g As Graphics = p.CreateGraphics

    g.FillRectangle(Brushes.LightYellow, 50, 50, 200, 200)

    e.Graphics.FillRectangle(Brushes.LightSalmon, 0, 0, 150, 150)

     

    End Sub

     

    End Class

    Montag, 14. Juli 2008 03:17