Clipboard als BackgroundImage

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Twometer.

    Clipboard als BackgroundImage

    Hallo,

    ich stehe vor einem Rätsel!

    folgender Code ist gegeben:

    Quellcode

    1. Public Class Form1
    2. Public Zaehler1 As Integer
    3. Public StartpunktX As Integer
    4. Public StartpunktY As Integer
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Clipboard.Clear()
    7. Timer1.Interval = 50
    8. Timer1.Enabled = True
    9. StartpunktX = CInt(Int(Me.Size.Width * Rnd()))
    10. StartpunktY = CInt(Int(Me.Size.Height * Rnd()))
    11. Zaehler1 = 1
    12. PictureBox1.Height = Me.Height
    13. PictureBox1.Width = Me.Width
    14. End Sub
    15. Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    16. Dim Radius As Integer = 50
    17. Zaehler1 = Zaehler1 + 1
    18. If Zaehler1 < Radius Then
    19. e.Graphics.FillEllipse(Brushes.Orange, StartpunktX + Radius - Zaehler1, StartpunktY + Radius - Zaehler1, 2 * Zaehler1, 2 * Zaehler1)
    20. Else
    21. e.Graphics.FillEllipse(Brushes.Orange, StartpunktX + Radius - Zaehler1, StartpunktY + Radius - Zaehler1, 2 * Zaehler1, 2 * Zaehler1)
    22. SendKeys.Send("{PRTSC}")
    23. PictureBox1.BackgroundImage = Clipboard.GetImage
    24. Randomize()
    25. StartpunktX = CInt(Int((Me.Size.Width * Rnd())))
    26. StartpunktY = CInt(Int((Me.Size.Height * Rnd())))
    27. Zaehler1 = 1
    28. End If
    29. End Sub
    30. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    31. PictureBox1.Refresh()
    32. End Sub
    33. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    34. If e.KeyCode = Keys.Escape Then
    35. Application.Exit()
    36. End If
    37. End Sub
    38. End Class


    Ich zeichne auf die Picturebox einen wachsenden Kreis. Wenn er fertig gezeichnet ist, wird ein Screenshot in der Zwischenablage erstellt, dieser der Picturebox als BackgroundImage zugewiesen und der nächste Kreis gezeichnet. Ziel ist es, den Bildschirm mit Kreisen zu füllen.

    Das funktioniert auch fast perfekt, außer daß immer zwei verschiedene Hintergrundbilder im Wechsel aktiv werden. Es scheint so, als ob in der Zwischenablage zwei Datensätze existieren, welche im Wechsel abgerufen werden. Ich möchte aber immer das gleiche Hintergrundbild.

    Ich hoffe, ich habe mein Problem verständlich dargelegt und Jemand kann mir sagen, wo der (mein?) Fehler liegt. Wer den Code testet: Abbruch mit ESC.

    Grüße

    Zerberus
    Hi,
    erstmal, Screenshots macht man nicht mit SendKeys, igitt... ;) Da verwendest du Graphics.FromScreen. Dann hast du auch keine Clipboard-Bugs
    //EDIT: CopyFromScreen, sorry
    //EDIT2: Das machste dann ungefähr so

    VB.NET-Quellcode

    1. Dim b As New Bitmap(PictureBox1.Size.Width, PictureBox1.Size.Height)
    2. Graphics.FromImage(b).CopyFromScreen(New Point(0, 0), New Point(0, 0), PictureBox1.Size)
    3. PictureBox1.BackgroundImage = b

    LG
    Twometer
    An Error 404 occurred while loading signature...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Twometer“ ()

    Hi,
    ersetze die 2. Zeile von meinem Code mal mit dieser hier:

    VB.NET-Quellcode

    1. Graphics.FromImage(b).CopyFromScreen(Me.PointToScreen(PictureBox1.Location), New Point(0, 0), PictureBox1.Size)

    Ich war halt davon ausgegangen, dass du ne fullscreen-anwendung hast...
    LG
    Twometer
    An Error 404 occurred while loading signature...
    Wunderbar, jetzt ist es so, wie ich es wollte.

    Zu Fullscreen: Ich habe Form1 (und damit PictureBox1) auf Maximized gesetzt. Da ich aber Form1 außerdem auf FormBorderStyle=None gesetzt habe, ist wahrscheinlich intern der Rahmen mit berechnet worden.

    Vielen Dank nochmal

    und Gruß

    Zerberus