hmm er stødt ind i problemer :-/
Hele projektet er at jeg har en browser i min mainform, denne browser viser skiftevis noget video, eller noget html-indhold.
Så vil jeg have en "ticker" eller "marquee" om man vil, til at køre hen over skærmen over videoen.
Det er denne "ticker" jeg skal have kørende i sin egen tråd, da browseren ellers sløver tickeren meget ned, så snart den laver noget intenst, som fx at vise video, animationer eller overgangs-effekter.
Umiddelbart er det lykkedes mig at få oprettet min form i en ny tåd, og få den til at indeholde min ticker.
Men jeg har lidt bøvl med efterfølgende at styre formens placering (tickeren skal kunne flyttes).
selve tickeren er en ScrollerMarquee som jeg fandt her:
http://www.vbforums.com/showthread.php?t=545150den virker som sådan fint, og jeg kan sagtens ændre på selve ticker-objektets egenskaber såsom tekst og farve.
Det er selve formen jeg ikke kan flytte.
Når jeg forsøger at flytte formen, er der pludselig to af dem.
Én der indeholder min ticker, og en der ikke gør.
Her er lidt udsnit af min kode, håber det giver mening... jeg har ikke ryddet op i det, så noget er måske lidt irrelevant..
()
i min main-form har jeg:
Public Class frmMain
Public TickerForm As Form
Private TickerThread As Thread
Public TickerScroller As ScrollingMarquee
Public Sub InitializeTickerForm()
doInitializeTickerForm(TickerForm, TickerScroller)
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Thread.Sleep(100) 'giv lige ticker-formen 0,1 sekundt til at initialisere, inden vi checker for InvokeRequired.
If TickerForm.InvokeRequired Then
TickerForm.Invoke(DirectCast(Sub()
TickerForm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
TickerForm.ShowInTaskbar = False
'TickerForm.Visible = False
End Sub, MethodInvoker))
End if
End Sub
følgende funktioner har jeg liggende i et Module:
Public Sub doInitializeTickerForm(ByRef TargetForm As Form, ByRef TargetScroller As ScrollingMarquee)
Try
TargetForm = New Form()
TargetScroller = New ScrollingMarquee()
TargetForm.SuspendLayout()
TargetScroller.Parent = TickerForm
TargetScroller.Dock = DockStyle.Fill
TargetScroller.MarqueeText = "test"
TargetScroller.ScrollSpeed = 1
TargetForm.Controls.Add(TargetScroller)
TargetForm.Location = New Point(0, 0)
TargetForm.Size = New Size(1000, 150)
TargetForm.ResumeLayout(False)
TargetForm.Show()
TargetForm.BringToFront()
TargetForm.TopMost = True
Application.Run(TargetForm)
Catch ex As Exception
End Try
End Sub
Private TickerSettingsErrorCounter As Integer = 0 'anti-infinite-loop
Public Sub ApplySettingsToTicker()
If TickerSettings.ContainsKey("height") Then
TickerSettingsErrorCounter = 0
'settings er indlæst, brug dem:
TickerForm.Size = New Size(frmMain.ClientSize.Width, TickerSettings("height"))
If TickerSettings("placering") = "top" Then
TickerForm.Location = New Point(0, 0)
Else
TickerForm.Location = New Point(0, frmMain.ClientSize.Height - TickerSettings("height"))
End If
frmMain.TickerScroller.Location = New Point(0, 0)
frmMain.TickerScroller.Font = New Font(TickerSettings("fontfamily"), TickerSettings("fontsize"), FontStyle.Regular, GraphicsUnit.Pixel)
frmMain.TickerScroller.BackColor = ColorTranslator.FromHtml(TickerSettings("backgroundcolor"))
frmMain.TickerScroller.ForeColor = ColorTranslator.FromHtml(TickerSettings("fontcolor"))
frmMain.TickerScroller.ScrollSpeed = TickerSettings("scrollspeed")
Select Case TickerSettings("backgroundrepeat")
Case "center"
frmMain.TickerScroller.BackgroundImageLayout = ImageLayout.Center
Case "none"
frmMain.TickerScroller.BackgroundImageLayout = ImageLayout.None
Case "stretch"
frmMain.TickerScroller.BackgroundImageLayout = ImageLayout.Stretch
Case "tile"
frmMain.TickerScroller.BackgroundImageLayout = ImageLayout.Tile
Case Else '"zoom"
frmMain.TickerScroller.BackgroundImageLayout = ImageLayout.Zoom
End Select
If File.Exists(TickerSettings("backgroundimage")) Then
Try
frmMain.TickerScroller.BackgroundImage = Image.FromFile(TickerSettings("backgroundimage"))
Catch ex As Exception
Logger.LogInfo(ex)
End Try
End If
Else
'settings er ikke indlæst, forsøg at læse dem og prøv igen.
If TickerSettingsErrorCounter < 1 Then
TickerSettingsErrorCounter = TickerSettingsErrorCounter + 1
LoadTickerSettings()
ApplySettingsToTicker()
End If
End If
End Sub
Private Sub ShowTicker(ByVal TickerDBID As Integer, ByVal TickerText As String, ByVal TickerRSS As String)
'TickerRSS er ikke implementeret endnu...
ApplySettingsToTicker()
frmMain.TickerScroller.MarqueeText = TickerText
If TickerForm.InvokeRequired Then
TickerForm.Invoke(DirectCast(Sub()
TickerForm.Tag = TickerDBID
TickerForm.Visible = True
TickerForm.BringToFront()
TickerForm.TopMost = True
End Sub, MethodInvoker))
Else
TickerForm.Update()
End If
End Sub
Den sidste ShowTicker() fyres af fra en timer, hvis visse betingelser er opfyldt.
Det er når den fyres af, at der pludselig er to forms.
Meget mystisk.