Statt "Brushes.White" eigene Farben nehmen?

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Statt "Brushes.White" eigene Farben nehmen?

    Siehe Überschrift.
    Ich versuche gerade, auf folgende Art und Weise einen Brush aus eigenen RBG-Werten zu erstellen:

    VB.NET-Quellcode

    1. Dim textbrush As New SolidBrush(Color.FromArgb(CaptionR.Value, CaptionG.Value, CaptionB.Value))

    Wenn ich den textbrush jetzt ans Paint-Event übergebe (wo statt einem SolidBrush ein Brush benötigt wird, die IDE zeigt keinen Fehler an), kommt "Ungültiger Parameter".
    Kennt jemand ne Lösung für dieses Problem?
    Habs in nem neuen Projekt versucht, da gehts jetzt.
    Im anderen Projekt hab ich folgendes:

    VB.NET-Quellcode

    1. Dim TestPanel As New InfoPanel.InfoPanel
    2. Dim textbrush As New SolidBrush(Color.Blue)
    3. Dim msgbrush As New SolidBrush(Color.FromArgb(MsgR.Value, MsgG.Value, MsgB.Value))
    4. TestPanel.Show(CaptionBox.Text, Single.Parse(CaptionSizeUpDown.Value), Integer.Parse(CaptionStyleBox.Items(CaptionStyleBox.SelectedIndex).ToString.Substring(0, 1)), textbrush, MsgtextBox.Text, Single.Parse(MsgSizeUpDown.Value), Integer.Parse(CaptionStyleBox.Items(MsgStyleBox.SelectedIndex).ToString.Substring(0, 1)), Brushes.White, DurationUpDown.Value, FontBox.Items(FontBox.SelectedIndex), TopMostBox.Checked, InfoPanelBG.Matte, Me)
    5. textbrush.Dispose()
    6. msgbrush.Dispose()

    (Hier gehts um textbrush und msgbrush, 2./3. Zeile)

    In der InfoPanel-Lib steht das:

    VB.NET-Quellcode

    1. Private titlecolor As Brush
    2. ...
    3. e.Graphics.DrawString(title, titlefont, titlecolor, 5, 5, str)

    Da SolidBrush und Brush was anderes sind, und ich wahrscheinlich deshalb den Fehler bekomme, möchte ich wissen, wie ich auf ne vernünftige Art und Weise nen Brush mit frei wählbaren RGB-Farben erstellen kann.
    Hi!
    Eigentlich so, wie du es gemacht hast.
    Solidbrush ist eine Klasse, die von der Klasse Brush erbt. Als Beispiel habe ich dann auch noch eine Texturebrush erstellt, zum Beweis, das dies alles letztendlich ein Brush-Objekt ist.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Beispiel 1, mit Solidbrush und Zuweisung einer Farbe
    3. Dim mySolidColorBrush As New SolidBrush(Color.FromArgb(255, 217, 15))
    4. 'Zuweisung eines Solidbrush- an ein Brush-Objekt
    5. Dim z1 As Brush = mySolidColorBrush
    6. Me.CreateGraphics.FillRectangle(z1, 3, 3, 122, 122)
    7. 'Erstellung einer Bitmap
    8. Dim image1 As Bitmap = _
    9. CType(Image.FromFile("D:\Image1.jpg", True), Bitmap)
    10. 'Zuweisung der Grafik an ein Texturebrush-Objekt
    11. Dim mytexturebrush As New TextureBrush(image1)
    12. 'Zuweisung des Texturebrush an das Brush-Objekt
    13. Dim z2 As Brush = mytexturebrush
    14. Me.CreateGraphics.FillRectangle(z2, 144, 144, 122, 122)
    15. End Sub


    Die Fehlermeldung aus deinem ersten Post konnte ich bei mir nicht wirklich reproduzieren. "Ungültiger Parameter" kann ich mir nur dann vorstellen, wenn einer der Parameter aus dem Startpost über 255, oder kleiner 0 war.
    Code im Button_Click-Event:

    VB.NET-Quellcode

    1. Dim TestPanel As New InfoPanel.InfoPanel
    2. Dim textbrush As New SolidBrush(Color.Blue)
    3. Dim msgbrush As New SolidBrush(Color.White)
    4. TestPanel.Show(CaptionBox.Text, Single.Parse(CaptionSizeUpDown.Value), Integer.Parse(CaptionStyleBox.Items(CaptionStyleBox.SelectedIndex).ToString.Substring(0, 1)), textbrush, MsgtextBox.Text, Single.Parse(MsgSizeUpDown.Value), Integer.Parse(CaptionStyleBox.Items(MsgStyleBox.SelectedIndex).ToString.Substring(0, 1)), Brushes.White, DurationUpDown.Value, FontBox.Items(FontBox.SelectedIndex), TopMostBox.Checked, InfoPanelBG.Matte, Me)
    5. textbrush.Dispose()
    6. msgbrush.Dispose()


    Code im Paint-Event (das daraufhin ausgelöst wird):

    VB.NET-Quellcode

    1. Using str As New StringFormat()
    2. Dim g As Graphics = e.Graphics
    3. g.Clip = New Region(New Rectangle(0, 0, mainform.Width, mainform.Height))
    4. g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    5. str.FormatFlags = StringFormatFlags.FitBlackBox
    6. Dim titlefont As Font = New Font(fontfamily, titlesize, titlestyle, GraphicsUnit.Point)
    7. Dim msgbodyfont As Font = New Font(fontfamily, msgbodysize, msgbodystyle, GraphicsUnit.Point)
    8. e.Graphics.DrawString(title, titlefont, titlecolor, 5, 5, str)
    9. e.Graphics.DrawString(msgbody, msgbodyfont, msgbodycolor, layout_rect, str)
    10. End Using

    Ich kann mir beim besten Willen nicht vorstellen, wo der Fehler liegt :huh:

    Edit: Problem gelöst, ich habe das new solidbrush(color.fromargb(blabla)) direkt in den .Show-Befehl mitreingeschrieben, jetzt gehts. ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Samus Aran“ ()

    g.Clip = New Region(New Rectangle(0, 0, mainform.Width, mainform.Height))

    = unnötige Zeile, da dies sowiso Standard ist(und würde auch mit g.ResetClip() schöner gehen ;) )

    hast du dir schonmal die Werte der Brushes zur Laufzeit angeguckt? Mit haltepunkten?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    VB.NET-Quellcode

    1. Public Sub Show(ByRef Caption As String, ByVal CaptionSize As Single, ByVal CaptionStyle As FontStyle, ByVal CaptionColor As Brush, ByVal Text As String, ByVal TextSize As Single, ByVal TextStyle As FontStyle, ByVal TextColor As Brush, ByVal Duration As Integer, ByVal FontName As String, ByVal TopMost As Boolean, ByVal PanelStyle As InfoPanelBG, ByVal thisForm As Form)
    also ic habs jetzt nochmal ausprobiert, bei mir geht das einwandfrei, gleicher Übergabetyp usw...was machst du denn mit den relevanten Parametern in dieser Methode? Das interessiert mich nicht nur, sondern wäre nachher evtl. schöner, wenn jemand einen anderen Brush übergeben will wie z.B. einen TextureBrush oder LinearGradient...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Die werden an Variablen übergeben, die als Private deklariert sind, aber alle den richtigen Typ besitzen (Caption z.B. wird an die Private String Variable MsgText übergeben).
    Nur CaptionColor und TextColor werden an Private Variablen vom Typ SolidBrush übergeben.
    Danach werden alle Variablen im Paint-Event benutzt.
    CaptionColor würde ich an einen normalen Brush übergeben...(also da du diese auch in der Methode als Brush deklariert hast), das gilt auch, wenn du einen SolidBrush/TextureBrush o.ä. übergibst, da diese von Brush erben...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---