Hallo NG,
ich sitze seit ein paar Tagen schon an dem Problem, dass ich einen Newsticker programmieren möchte, der aber innerhalb eines Programms läuft was noch andere Funktionen hat. Damit der Nutzer keine zu großen Leistungseinbußen hinnehmen muss, habe ich den Ticker nicht mit einem Timer sondern mit einem BackgroundWorker erstellt. Da die Oberfläche optisch etwas aufwenidg ist, lasse ich den Text in einer Picturebox laufen. Das funktioniert soweit auch sehr soft und ohne flickern und sieht auch top aus.
Jetzt kommt aber mein Problem. Wenn ich währen der Ticker läuft andere Programmfenster wie zum Beispiel einen IE mit einer Seite a la Bild aufmache und da hin und her scrolle, dann kommt nach kurzer eine Fehlermeldung von meinem Programm "Das Grafikobjekt wird schon an einer anderen Stelle verwendet". Wie schon gesagt, ich versuche seit Tagen dem Problem Herr zu werden, aber leider ohne Erfolg. Anbei der Programmteil der den Newsticker zeichnet. Ansonsten ist in dem Programm nichts anderes am Laufen.
Sub Grafik_aufbauen()
Try
Dim Image_Laufschrift, newPicture As Image
Dim Position As Point
Dim temptext As String
temptext = "Newsticker +++ " & strLauftext
Dim Schriftart As Font = New System.Drawing.Font("Times New Roman", _
16.0!, System.Drawing.FontStyle.Bold, _
System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Dim Brush As New SolidBrush(Color.LightGray)
Image_Laufschrift = Bitmap.FromFile(Application.StartupPath & _
"\GrafikBanner.jpg")
newPicture = New Bitmap(560, 60)
Dim size As SizeF = TextRenderer.MeasureText(temptext, Schriftart)
Dim intcount As Integer = size.Width + 560
For i As Integer = 1 To intcount
graphic = Graphics.FromImage(newPicture)
graphic.DrawImage(Image_Laufschrift, New Rectangle(0, 0, _
Image_Laufschrift.Width, Image_Laufschrift.Height))
Position = New Point(560 - i, 18)
graphic.DrawString(temptext, Schriftart, Brush, Position.X, _
Position.Y)
Picbox1.Image = newPicture
Threading.Thread.Sleep(int_Speed_Ticker)
Next
graphic.Dispose()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End SubGestartet wird das ganze per BackgroundWorker1.RunWorkerAsync().
Ich nutze für dieses Projekt VB 2008.
Ich habe das Gefühl, dass meine Newstickergrafik mit irgendwas im allgemeinen Speicher kolidiert, kann das sein oder liege ich da völlig daneben.
Bin für jeden Tipp sehr dankbar!
Gruß
Lars |