GDI Drawing Graphics Handler *erledigt*

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Mangafreak1995.

    GDI Drawing Graphics Handler *erledigt*

    HI , ist es möglich für gezeichnet graphik objekte Handler hinzuzufügen ?
    Also Beispiel:

    VB.NET-Quellcode

    1. Dim g As Graphics = MyBase.CreateGraphics
    2. Dim p As New Pen(Color.Red, 5)
    3. Dim r = New Rectangle(60, Me.Height - 100, 23, 23)
    4. g.FillEllipse(Brushes.Red, r)


    Ein einfacher Kreis auf der Form. Ich möchte das man diesen per Mouseclick "nehmen" kann und auf der Form bewegen, dazu müsste ich ein MouseDown und MouseUp event haben. Die frage ist, muss ich dies über das Form mouse event mit eingeschränkter location (die des Graphik objekts) tun, oder gibs ne möglichkeit dem g handler zu adden ?

    2. Frage.

    Wenn ich so einen Kreis zeichne, dann passiert folgendes:
    Da ich den Kreis über ein DropDown Menu per knopfdruck zeichnen lasse, ist der BEreich des Dropdown Menus nicht mit gezeichnet..

    Kann man das umgehen, und wenn ja wie ?
    Bilder
    • Kreis.JPG

      15,54 kB, 640×512, 122 mal angesehen
    Das ist meine Signatur und sie wird wunderbar sein!

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

    Man kann auch einfach einen Neuen Thread (oder Backgroundworker) oder nicht so performatn einen Timer nehmen und immer die Position und den Status der Maus überprüfen ;). Wenn man das dann ohne Rechtecke macht also genau das was gezeichnet wird nimmt, dann wirds kompliziert. Aber zu jedem Zeichnen muss man ja ein Rechteck angeben ;) oder es entsteht aus den Argumenten ein Rechteck ;).

    EDIT:
    du kannst auch einen Pixel check machen. So kannst du immer prüfen ob es in sonstwelcher Form drin ist. Das Problem dabei ist du benötigst feste Farben ;).
    wieso feste Farben ?

    VB.NET-Quellcode

    1. Dim cl as Color
    2. Dim M as Point
    3. Dim moc as Boolean ''MouseOnCircle
    4. cl = Circle.Color
    5. M = Mouse.Position
    6. If PictureBox.Image.Pixels[M] = cl Then moc = True Else moc = false


    hab ich jetzt alles aus dem Kopf geschrieben
    es werden ganz sicher nicht die Begriffe vorkommen, die ich genutzt haben, aber ich hoffe du weißt jetzt wie du vorgehen kannst
    dann kannst du einfach abfragen ob moc = true ist und dann weißt du ja auch ob die Mouse auf dem Kreis liegt
    immer wenn die Farbe geändert wird dann mach lieber dass du cl änderst und einfach immer in cl den Kreis zeichnest dann hast du immer cl als Kreisfarbe

    hoffe hilft
    danke -.-
    reich doch bei MouseDown
    solange dauert das auch nich
    funzt bei mir flüssig
    jeden einzelnen Pixel xDD
    ne nich ganz nur den wo die Maus halt ist ^^
    aber das haste ja auch festgestellt

    jeden Pixel oO ... sind wir hier in der endlosen Geschichte xD ich hab nich undendlich Zeit
    Hi.

    Also, das mit dem Pixel Vergleich klingt gut, wie aber bekomm ich das Gezeichnete als Bitmap, um die Pixel zu bekommen..

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private ColA As Color = New Color
    2. Private ColB as Color = New color
    3. Private bmp As Bitmap
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. PicB = New PictureBox
    6. PicB.Location = New Point(22, 22)
    7. PicB.Size = New Point(Me.Width / 2, Me.Height / 2)
    8. PicB.BackColor = Color.Transparent
    9. AddHandler PicB.MouseDown, AddressOf Moused
    10. Me.Controls.Add(PicB)
    11. End Sub
    12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    13. Dim myGraphics As Graphics
    14. Dim myBrush As System.Drawing.Drawing2D.HatchBrush
    15. Dim myRectangle As Rectangle
    16. myGraphics = Graphics.FromHwnd(hwnd:=PicB.Handle)
    17. myRectangle = New Rectangle(x:=5, y:=5, Width:=70, Height:=60)
    18. myGraphics.DrawEllipse(pen:=New Pen(Color.Red), rect:=myRectangle)
    19. myBrush = New System.Drawing.Drawing2D.HatchBrush( _
    20. hatchstyle:=Drawing.Drawing2D.HatchStyle.LargeCheckerBoard, _
    21. ForeColor:=Color.Red, _
    22. BackColor:=Color.White)
    23. myGraphics.FillEllipse(brush:=myBrush, rect:=myRectangle)
    24. bmp = New Bitmap(70, 60, myGraphics)
    25. ColA = Color.Red
    26. ColB = Color.White
    27. End Sub
    28. Private PicB As PictureBox
    29. Private Sub Moused(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    30. Dim Moc As Boolean
    31. Dim M As Point = e.Location
    32. Dim pointCol As New Color
    33. pointCol = bmp.GetPixel(M.X, M.Y)
    34. If pointCol = Col Then
    35. Moc = True
    36. MsgBox("drauf")
    37. Else
    38. Moc = False
    39. End If
    40. End Sub


    Das Bitmap ist ja nicht PicB.Image .... kann mir da noch jemand auf die Sprünge helfen..

    das zeichnen in vb ist für mich ziehmlich neu

    thx für jeden tip

    *edit* Habs hinbekommen danke für die Hilfe :)
    Das ist meine Signatur und sie wird wunderbar sein!

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

    dann klick mal ganz unten hier im Thread auf erledigt ^^