10-23-2022, 07:35 AM
Hi QB64 Fan Community
here a perfectable demo of a Vertical Scrolling List in ASCII mode
It's a start and can be expanded to support mouse Drag & Drop, Keyboard shortcuts, and moreover the customizable setting (i.e. how many rows to show on screen, position on the screen, colors for text and background).
Moreover it can become a function that return the selected item.
here a perfectable demo of a Vertical Scrolling List in ASCII mode
Code: (Select All)
'ASCII scrollbar output Demo
Dim Num(1 To 100), First As Integer, Last As Integer, Selected As Integer
Dim Stopp, MB1, MB2, Max, MY, MX
Max = 100
For a = 1 To Max
Num(a) = a * 10
Next
_MouseMove 10, 10
First = 1: Last = 15: Selected = First + 4
While Stopp = 0
While _MouseInput: Wend
MB1 = _MouseButton(1)
MB2 = _MouseButton(2)
MY = _MouseX 'column
MX = _MouseY 'row
If MB1 Then
If Chr$(Screen(MX, MY, 0)) = "Ý" Then ' if leftmousebuttonclick is on the scrollingbar
If MX > (Selected Mod 16) Then ' if mouseclick below selected item it scrolls down
Selected = Selected + 5
If Selected > Last Then ' if scrolling Selected goes below LastitemShown it adjourns pointers of listToShow
First = Selected
Last = First + 15
If Last > Max Then Last = Max - Selected + 1 ' if lastItemShown is more than LastItemList it adjourns pointer of listToShow
End If
Else 'if mouseclick over selected item it scrolls up
Selected = Selected - 5
If Selected < First Then
First = Selected
Last = First + 15
If Selected < 1 Then ' if scrolling up selected goes over FirstItemShown it adjourns pointer of ListToShow
First = 1
Selected = 1
Last = First + 15
End If
End If
End If
End If
If Chr$(Screen(MX, MY, 0)) = "Û" Then ' if leftMouseClick is on ruler of scrollingBar
Do While _MouseInput: Loop ' it waits that MouseInput stops
If MX > _MouseY Then
' if actual vertical position of mouse is less than previous the ruler has been brought up
Selected = Selected - 1
If Selected < 1 Then
First = 1
Selected = 1
Last = First + 15
End If
Else ' if actual vertical position of mouse is more than previous ther ruler has been brought down
Selected = Selected + 1
If Selected > Last Then
First = Selected
Last = Selected + 15
If Last > Max Then Last = Max - Selected
End If
End If
End If
End If
If MB2 Then Stopp = 1
Do While _MouseInput: Loop ' it waits that MouseInput stops
Cls
For a = First To Last
If a = Selected Then Color 14, 1
Print Num(a); Space$(5 - Len(LTrim$(Str$(a))));
If a = Selected Then Print "Û" Else Print "Ý"
Color 7, 0
Next
_Limit 5
Wend
End
It's a start and can be expanded to support mouse Drag & Drop, Keyboard shortcuts, and moreover the customizable setting (i.e. how many rows to show on screen, position on the screen, colors for text and background).
Moreover it can become a function that return the selected item.