tyrope
Gebruiker
- Lid geworden
- 10 feb 2006
- Berichten
- 58
Hallo lezer,
Ik werk al een tijdje aan een programma dat data uit een spel servers haalt (zoals de namen, score en ping van spelers online) en dat netjes verwerkt in een interface.
sinds versie 1.2.2 is er onder het "spelers online" lijstje een nieuw lijstje gekomen, met de namen van alle clanleden in al onze server haalt, om ruimte te maken heb ik deze twee "groupBox"en een verticaal scrollbalkje gegeven, deze werkt niet helemaal.
stel er zijn 8 spelers in de geselecteerde server, in de lijst passen er maar 6, dus moeten er 2 "verstopt" worden achter het scrollbalkje. dit verstoppen werkt perfect, alleen het tevoorschijn halen niet helemaal.
omlaag scrollen: dit kan met 1 naam (dus speler 8 zal je nooit te zien krijgen), en hierna weigert de balk om omhoog of omlaag te gaan.
hieronder het deel van de source waar de scrollbalk veranderd word.
updateUI() - de functie die de data ververst, word aangeroepen door timer of knop.
playerListScroll() - je raad het al, de functie die de lijst van de spelers moet scrollen
whosPlayingScroll() - de scroll functie voor de nieuwe lijst. (is iets groter)
GetChildControls(parent) - de functie die alle labels (min de header, die in bold is) geeft aan de scroll functies
ik ben redelijk terughoudend wanneer het gaat om source code geven, dus als jullie meer nodig hebben moet je maar even roepen wat precies en ik plak 't erbij...
alvast bedankt voor de hulp, en uiteraard voor het lezen.
Mvg,
Tyrope
Ik werk al een tijdje aan een programma dat data uit een spel servers haalt (zoals de namen, score en ping van spelers online) en dat netjes verwerkt in een interface.
sinds versie 1.2.2 is er onder het "spelers online" lijstje een nieuw lijstje gekomen, met de namen van alle clanleden in al onze server haalt, om ruimte te maken heb ik deze twee "groupBox"en een verticaal scrollbalkje gegeven, deze werkt niet helemaal.
stel er zijn 8 spelers in de geselecteerde server, in de lijst passen er maar 6, dus moeten er 2 "verstopt" worden achter het scrollbalkje. dit verstoppen werkt perfect, alleen het tevoorschijn halen niet helemaal.
omlaag scrollen: dit kan met 1 naam (dus speler 8 zal je nooit te zien krijgen), en hierna weigert de balk om omhoog of omlaag te gaan.
hieronder het deel van de source waar de scrollbalk veranderd word.
updateUI() - de functie die de data ververst, word aangeroepen door timer of knop.
Code:
Public Sub updateUI()
[knip]
'prepare UI, empty boxes
mainWindow.boxPlayerList.Controls.Clear()
mainWindow.boxWhosPlaying.Controls.Clear()
[knip]
'print scrollbars
PLScrollbar.Parent = mainWindow.boxPlayerList
PLScrollbar.Location = New Point(242, 10)
PLScrollbar.Size = New Point(17, mainWindow.boxPlayerList.Height - 15)
WPScrollbar.Parent = mainWindow.boxWhosPlaying
WPScrollbar.Location = New Point(242, 10)
WPScrollbar.Size = New Point(17, mainWindow.boxWhosPlaying.Height - 15)
[knip]
'PlayerList Scrollbar
If arrPlayers.GetUpperBound(0) > 6 Then
PLScrollbar.Maximum = arrPlayers.GetUpperBound(0) + 1
PLScrollbar.Enabled = True
PLScrollbar.Minimum = 1
PLScrollbar.Value = 1
AddHandler PLScrollbar.Scroll, AddressOf playerListScroll
Else
PLScrollbar.Enabled = False
End If
PLScrollbar.Show()
[knip]
'Who's Playing Scrollbar
If Soggy.GetUpperBound(0) > 8 Then
WPScrollbar.Maximum = Soggy.GetUpperBound(0) + 1
WPScrollbar.Enabled = True
WPScrollbar.Minimum = 0
WPScrollbar.Value = 0
AddHandler WPScrollbar.Scroll, AddressOf whosPlayingScroll
Else
WPScrollbar.Enabled = False
End If
WPScrollbar.Show()
[knip]
End Sub
Code:
Private Sub playerListScroll()
For Each ctrl In GetChildControls(mainWindow.boxPlayerList)
ctrl.location = New Point(ctrl.location.X, ctrl.location.Y - (PLScrollbar.Value - prevValuePL) * 15)
If ctrl.Location.Y + ctrl.Height > mainWindow.boxPlayerList.Height - 2 Or ctrl.location.Y < 15 Then
ctrl.Hide()
Else
ctrl.show()
End If
Next
prevValuePL = PLScrollbar.Value
End Sub
Code:
Private Sub whosPlayingScroll()
For Each ctrl In GetChildControls(mainWindow.boxWhosPlaying)
ctrl.location = New Point(ctrl.location.X, ctrl.location.Y - (WPScrollbar.Value - prevValueWP) * 15)
If ctrl.Location.Y + ctrl.Height > mainWindow.boxPlayerList.Height - 2 Or ctrl.location.Y < 15 Then
ctrl.Hide()
Else
ctrl.show()
End If
Next
prevValueWP = WPScrollbar.Value
End Sub
Code:
Private Function GetChildControls(ByVal parent As Control) As ArrayList
Dim result As New ArrayList()
For Each ctrl As Control In parent.Controls
If ctrl.GetType.ToString = "System.Windows.Forms.Label" And ctrl.Font.Bold = False Then
result.Add(ctrl)
End If
Next
Return result
End Function
alvast bedankt voor de hulp, en uiteraard voor het lezen.
Mvg,
Tyrope