vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Transparente Bilder 
Autor: dm1485
Datum: 15.02.18 09:03

Hallo zusammen,

ich komme bei einer Sache nicht weiter. Ich habe folgenden Fall.

Ich habe ein Hintergrundbild. Über dieses Hintergrundbild will ich beliebig viele transparente Bilder, die unterschiedlich sind, zur Laufzeit hinzufügen können. Die transparenten Bilder sollen sich mit der Maus vergrößern und bewegen lassen. Das Ganze auch so, dass es nicht flackert beim Bewegen.

Ich habe das Ganze soweit auch schon umgesetzt, nur habe ich das Problem, wenn ich ein transparentes Bild anklicke, dass sich alle anderen transparenten Bilder dem angeklickten Bild anpassen. Das ist natürlich nicht gewollt.

Das ist mein bisheriger Code:

Bei Klick auf einen Button füge ich ein neues Bild ein
 
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
  Handles Button1.Click
        nPanel = New NonFlickerPanel
        Dim fstream As FileStream
 
        xPan += 1
 
        nPanel.Parent = PictureBox
        nPanel.Name = "pan_" & xPan
        nPanel.BackgroundImageLayout = ImageLayout.Zoom
 
        SelectedControl = nPanel
 
        MyControls.Add(nPanel)
 
        fstream = New FileStream("Pfad zu meinem Bild", IO.FileMode.Open, _
          IO.FileAccess.Read)
        nPanel.BackgroundImage = Image.FromStream(fstream)
        Application.DoEvents()
 
        fstream.Close()
        fstream.Dispose()
 
        nPanel.Width = nPanel.BackgroundImage.Width * _scale
        nPanel.Height = nPanel.BackgroundImage.Height * _scale
 
        nPanel.BringToFront()
 
        AddHandler nPanel.MouseDown, AddressOf control_MouseDown
        AddHandler nPanel.MouseEnter, AddressOf control_MouseEnter
        AddHandler nPanel.MouseLeave, AddressOf control_MouseLeave
        AddHandler nPanel.MouseMove, AddressOf control_MouseMove
        AddHandler nPanel.MouseUp, AddressOf control_MouseUp
        AddHandler nPanel.Click, AddressOf control_Click
        AddHandler nPanel.Paint, AddressOf control_Paint
 
        pubControl = nPanel
 
    End Sub
Ich habe eine extra Klasse, um ein transparentes Panel zu erzeugen:

  Partial Public Class NonFlickerPanel
        Inherits Panel
 
        Public Sub New()
            DoubleBuffered = True
            Me.SetStyle(ControlStyles.Opaque, True)
            Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, False)
            Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
            Me.SetStyle(System.Windows.Forms.ControlStyles.ResizeRedraw, True)
            MyBase.BackColor = System.Drawing.Color.Transparent
        End Sub
 
 
        Protected Overrides ReadOnly Property CreateParams() As _
          System.Windows.Forms.CreateParams
            Get
                Dim cp As CreateParams = MyBase.CreateParams
                cp.ExStyle = cp.ExStyle Or &H20  ' Turn on WS_EX_TRANSPARENT
                Return cp
            End Get
        End Property
 
        Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
            Dim ctrl As Control = Form1.SelectedControl
            MyBase.OnPaint(e)
 
            If MyBase.BackgroundImage IsNot Nothing Then
                e.Graphics.DrawImage(ctrl.BackgroundImage, 0, 0, ctrl.Width, _
                  ctrl.Height)
            End If
        End Sub
    End Class
Beim MouseMove Event aktualisiere ich die Bilder
    Private Sub control_MouseMove(ByVal sender As Object, ByVal e As _
      MouseEventArgs)
 
        If e.Button = MouseButtons.Left Then
            Dim control As Control = CType(sender, Control)
            Dim nextPosition As System.Drawing.Point = New System.Drawing.Point( _
              )
            nextPosition = control.Parent.PointToClient(MousePosition)
            nextPosition.Offset(mouseX, mouseY)
            Dim test As String = control.Name
            control.Location = nextPosition
            control.Invalidate()
            control.Cursor = Cursors.Default
            PictureBox.Invalidate()
 
        End If
    End Sub
Und hier das Paint Event um die Bilder zu zeichnen.
    Private Sub control_Paint(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.PaintEventArgs)
        Dim ctrl As Control = SelectedControl
        Dim bmp As Bitmap = New Bitmap(ctrl.BackgroundImage)
        e.Graphics.DrawImage(bmp, 0, 0, ctrl.Width, ctrl.Height)
    End Sub
Beim Paint Event scheint es immer alle Panel zu aktualisieren. Wie kann ich das verhindern???

Gruß
Dominik
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Transparente Bilder1.918dm148515.02.18 09:03
Re: Transparente Bilder1.014Manfred X15.02.18 11:52
Re: Transparente Bilder1.118dm148515.02.18 13:27
Re: Transparente Bilder979Manfred X15.02.18 18:06
Re: Transparente Bilder990dm148516.02.18 10:07
Re: Transparente Bilder998Manfred X16.02.18 11:53
Re: Transparente Bilder970dm148516.02.18 13:44
Re: Transparente Bilder988Manfred X16.02.18 15:16
Re: Transparente Bilder991dm148516.02.18 15:29
Re: Transparente Bilder1.068dm148516.02.18 13:54
Re: Transparente Bilder947dm148516.02.18 14:44
Re: Transparente Bilder968Kuno6016.02.18 22:26
Re: Transparente Bilder939GPM17.02.18 15:43
Re: Transparente Bilder975dm148519.02.18 12:01
Re: Transparente Bilder1.018GPM19.02.18 23:56
Re: Transparente Bilder1.025dm148520.02.18 09:17
Re: Transparente Bilder978GPM20.02.18 11:08
Re: Transparente Bilder1.090dm148520.02.18 11:18
Re: Transparente Bilder971GPM20.02.18 22:26
Re: Transparente Bilder1.042dm148520.02.18 22:55
Re: Transparente Bilder957dm148521.02.18 08:50
Re: Transparente Bilder904GPM21.02.18 14:39
Re: Transparente Bilder875dm148521.02.18 21:18
Re: Transparente Bilder869dm148524.02.18 21:15

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel