GDI+ Problem

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Pes1899.vb.

    GDI+ Problem

    Hi,
    ich habe mich mal entschlossen, GDI zu benutzen.
    So, Rechteckmalen schön und Gut:

    VB.NET-Quellcode

    1. g.DrawRectangle(Pens.Black, A.Location.X - 1, A.Location.Y - 1, A.Width + 2, A.Height + 2)

    (A ist eine Picturebox, ich will also einen Rahmen um diese zeichnen)

    Das Problem ist, dass diese Picturebox A in einem Tabcontrol ist, wie kann ich nun das Rechteck in das Tabcontrol und nicht auf die Form zeichnen?

    Danke für die Hilfe :P .
    Darauf wäre er sicher auch selber gekommen :p
    Wenn man GDI anfängt ist es das beste selber ein bisschen zu probieren,
    ein paar Codes die es ZU HAUF überall gibt zu studieren und bei expliziten Fragen sich an das Forum zu wenden...

    Auf das Tabcontrol direkt zu zeichnen ist hier sicherlich keine gute Idee, da üblicherweise TabPages davor liegen.

    //Edit. Das Tabcontrol hat ein DrawItem Event. Das Paint Event ist bedeutungslos.
    // Um dies jedoch auszulösen muss Tabcontrol.DrawMode = TabDrawMode.OwnerDrawFixed sein.
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mono“ ()

    Hm noch was:

    VB.NET-Quellcode

    1. Public g As Graphics = CreateGraphics()
    2. Public Sub New()
    3. ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
    4. InitializeComponent()
    5. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    6. g.DrawRectangle(Pens.Black, Me.Width, Me.Height, 0, 0)
    7. End Sub


    Das ist in einem UserControl, doch es passiert nichts, wenn ich das Control erstelle. Warum?
    Hey,

    einen Gradient kannst du mit z.B. LinearGradientBrush machen, schau dich dazu im WWW um, dazu gibt es genügend Tutorials.
    Transparenzen kannst du afaik nur mit einer ColorMatrix zeichnen, da weiß ich aber nicht, wie das geht.


    lg.

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

    Hi,
    @matrinustreveri
    Da brauch man keine Colormatrix...

    @Topic
    Schau dir mal den Alpha wert von Color an (Color.FromArgb).
    Wenn du jetzt ein LineargradientBrush benutzt und z.b. von Color.FromArgb(0, 255, 255, 255) zu color.fromargb(255, 255, 255, 255) hast du einen Farbverlauf von einem Unsichtbaren Schwarz bis hin zu einem Sichtbaren Schwarz.
    Mfg
    Mike
    Hm und wie benutzt man so einen LinearGradientBrush?
    LinearGradientBrush.Draw gibts nicht, DrawLinearGradientBrush auch nicht...

    EDIT: Bzw was muss ich hiernach machen:

    VB.NET-Quellcode

    1. Private myBrush As LinearGradientBrush = _
    2. New LinearGradientBrush(New Point(0, 0), New Point(250, 250), Color.FromArgb(0, 255, 255, 255), Color.FromArgb(255, 255, 255, 255))
    Hi,
    So in etwa musst natürlich nocht z.b. Point1 durch die Position ersetzen:

    VB.NET-Quellcode

    1. Dim brush As New System.Drawing.Drawing2D.LinearGradientBrush(Point1, Point2, color1, color2) ' Farbverlauf anlegen
    2. g.FillRectangle(brush, Rectangle) ' Rechteck Füllen
    Ah ok jetzt ist auch mein Edit beantwortet^^

    Edit: Transparenz geht zwar nicht wirklich aber ich glaube das geht auch so

    Edit2:

    VB.NET-Quellcode

    1. Public Class TestButton : Inherits Button
    2. Dim g As Graphics = CreateGraphics()
    3. Dim RandA As New Rectangle
    4. Public Sub New()
    5. Me.Size = New Size(100, 15)
    6. Me.FlatStyle = Windows.Forms.FlatStyle.Flat
    7. Me.FlatAppearance.BorderSize = 0
    8. End Sub
    9. Private Sub ProBar_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    10. RandA.Width = Me.Width - 1
    11. RandA.Height = Me.Height - 1
    12. RandA.Location = New Point(1, 1)
    13. g.DrawRectangle(Pens.Red, RandA)
    14. End Sub
    15. End Class


    Das müsste doch eigentlich einen Rand auf den Button malen oder? ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pes1899.vb“ ()

    Ahh jetzt kapier ich ^^ du machst einen eigenen Button.
    Also ich würde es so machen:

    VB.NET-Quellcode

    1. Public Class TestButton : Inherits Button
    2. Dim g As Graphics
    3. Dim RandA As New Rectangle
    4. Public Sub New()
    5. Me.Size = New Size(100, 15)
    6. Me.FlatStyle = Windows.Forms.FlatStyle.Flat
    7. Me.FlatAppearance.BorderSize = 0
    8. Me.Backgroundimage = new bitmap(Me.width, Me.height)
    9. g = graphics.fromimage(Me.Backgroundimage)
    10. DrawRand
    11. End Sub
    12. Private Sub DrawRand()
    13. RandA.Width = Me.Width - 1
    14. RandA.Height = Me.Height - 1
    15. RandA.Location = New Point(1, 1)
    16. g.DrawRectangle(Pens.Red, RandA)
    17. End Sub
    18. End Class