Ik ben in het programmeren van visual basic nog echt een beginner. Maar omdat ik net een afstandbediening voor mijn comp heb gehaald wilde ik een pop up menu maken in VB.
Hierbij wil ik het menu, een paar regels tekst dus, heel soepeltjes omhoog of omlaag laten bewegen, bij het indrukken van een toets.
Ik heb het nu op twee manieren gedaan. Met de Drawstring methode en daarbij wel anti aliasing aan(anders ziet het er niet uit). en met een paar labels onder elkaar die ik dan gewoon van positie verander. Dit laatste gaat helemaal niet, dit duurt echt eeuwen.
Verder heb ik met beide methoden tijdens het bewegen van de tekst een processor verbruik van 80-90%. Ongeacht doublebuffer aan of uit staat.
Het lijkt me dat het beter moet kunnen maar ik zou niet weten hoe.
Ik gebruik verder een form met een backgroundimage en een opacity van 90%. Op 100% loopt het al een stukje beter, maar mijn comp (866mHz) moet dit toch wel aankunnen neem ik aan?
Wie weet op welke manier ik wel een weinig rekenkracht vereisende soepele scroll kan maken?
heb nu dit:
Hierbij wil ik het menu, een paar regels tekst dus, heel soepeltjes omhoog of omlaag laten bewegen, bij het indrukken van een toets.
Ik heb het nu op twee manieren gedaan. Met de Drawstring methode en daarbij wel anti aliasing aan(anders ziet het er niet uit). en met een paar labels onder elkaar die ik dan gewoon van positie verander. Dit laatste gaat helemaal niet, dit duurt echt eeuwen.
Verder heb ik met beide methoden tijdens het bewegen van de tekst een processor verbruik van 80-90%. Ongeacht doublebuffer aan of uit staat.
Het lijkt me dat het beter moet kunnen maar ik zou niet weten hoe.
Ik gebruik verder een form met een backgroundimage en een opacity van 90%. Op 100% loopt het al een stukje beter, maar mijn comp (866mHz) moet dit toch wel aankunnen neem ik aan?
Wie weet op welke manier ik wel een weinig rekenkracht vereisende soepele scroll kan maken?
heb nu dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| Public Class MainMenu
Private anim_int As Integer
Private anim_richting As Integer
Private regels(4) As String
Dim TextFont As New System.Drawing.Font("Verdana", 18, FontStyle.Bold)
Dim TextBrush As New System.Drawing.SolidBrush(Color.FromArgb(200, 255, 255, 255))
Private Sub MainMenu_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = 40 Then 'down
anim_richting = 2
Timer1.Start()
ElseIf e.KeyCode = 38 Then 'up
anim_richting = -2
Timer1.Start()
End If
End Sub
Private Sub MainMenu_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
regels(0) = "Media Portal"
regels(1) = "Winamp"
regels(2) = "DVD speler"
regels(3) = "Media speler"
regels(4) = "Afsluiten"
DoubleBuffered = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
anim_int = anim_int + anim_richting
If anim_int > 30 Or anim_int < -30 Then
anim_int = 0
Timer1.Stop()
Dim i = 1
If (anim_richting > 0) Then
Dim temp = regels(regels.Length - 1)
Dim z As Integer = regels.Length - 1
Do Until z < 1
' MsgBox(regels(z - i))
regels(z) = regels(z - 1)
z -= 1
Loop
regels(0) = temp
Else
Dim temp = regels(0)
Dim z As Integer = 0
Do Until z > regels.Length - 2
regels(z) = regels(z + 1)
z += 1
Loop
regels(regels.Length - 1) = temp
End If
End If
Invalidate()
End Sub
Private Sub MainMenu_onPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim objCanvas = e.Graphics
objCanvas.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit
For x As Integer = 0 To regels.Length - 1
objCanvas.DrawString(regels(x), TextFont, TextBrush, 35, 90 + (x * 30) + anim_int)
Next x
End Sub
End Class |
[ Voor 55% gewijzigd door Vjenne op 15-10-2005 19:01 ]