Hallo RSBasic.
Klasse. Spitze. So war's erhofft.
Danke.
Bernd.
PS. Bitte nicht böse sein, das ich "EnableExplicit" aus kommentiert habe.
So experimentiert es sich leichter. Smile.
Code: Alles auswählen
;EnableExplicit
Define i
Enumeration
#gadg_combo1
#gadg_combo2
#gadg_combo3
#gadg_rt_trackbar
EndEnumeration
Global ComboBoxCB
Procedure MouseOver(gadg)
GetWindowRect_(GadgetID(gadg),re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(re, pt\y << 32 + pt\x)
EndProcedure
Procedure ComboBoxCB(hWnd, Message, wParam, lParam)
Select Message
Case #WM_MOUSEWHEEL
ProcedureReturn 1
EndSelect
ProcedureReturn CallWindowProc_(ComboBoxCB, hWnd, Message, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(#gadg_combo1, 10, 10, 80, 26)
For i = 1 To 10
AddGadgetItem(#gadg_combo1, -1, "Eintrag " + Str(i))
Next
SetGadgetText(#gadg_combo1, "Eintrag 5")
ComboBoxGadget(#gadg_combo2, 100, 10, 80, 26)
For i = 1 To 10
AddGadgetItem(#gadg_combo2, -1, "Eintrag " + Str(i))
Next
SetGadgetText(#gadg_combo2, "Eintrag 6")
ComboBoxGadget(#gadg_combo3, 190, 10, 80, 26)
For i = 1 To 10
AddGadgetItem(#gadg_combo3, -1, "Eintrag " + Str(i))
Next
SetGadgetText(#gadg_combo3, "Eintrag 6")
x = 10
y = 50
w = WindowWidth(0) -50
h = 26
TrackBarGadget(#gadg_rt_trackbar, x,y, w, h, 0, 100);, #PB_TrackBar_Vertical);#PB_TrackBar_Ticks |
SetWindowLongPtr_(GadgetID(#gadg_rt_trackbar), #GWL_STYLE, GetWindowLongPtr_(GadgetID(#gadg_rt_trackbar), #GWL_STYLE) | #TBS_ENABLESELRANGE) ; Vertiefung
SetWindowLongPtr_(GadgetID(#gadg_rt_trackbar), #GWL_EXSTYLE, GetWindowLongPtr_(GadgetID(#gadg_rt_trackbar), #GWL_EXSTYLE) | #WS_EX_LAYOUTRTL) ; Spiegeln
#schritt = 25 : schritt = 25
; For a=0 To 100 Step #schritt ; (Schade. Eine einfache var wäre schöner).
; SendMessage_(GadgetID(#gadg_rt_trackbar),#TBM_SETTIC,0,a)
; Next
a = 0
Repeat ; Dann also so.
SendMessage_(GadgetID(#gadg_rt_trackbar),#TBM_SETTIC,0,a)
a + schritt
Until a > 100
ComboBoxCB = SetWindowLongPtr_(GadgetID(#gadg_combo1), #GWL_WNDPROC, @ComboBoxCB())
ComboBoxCB = SetWindowLongPtr_(GadgetID(#gadg_combo2), #GWL_WNDPROC, @ComboBoxCB())
ComboBoxCB = SetWindowLongPtr_(GadgetID(#gadg_combo3), #GWL_WNDPROC, @ComboBoxCB())
ComboBoxCB = SetWindowLongPtr_(GadgetID(#gadg_rt_trackbar), #GWL_WNDPROC, @ComboBoxCB())
; Wird eine Box auskommentiert, kann man die Box mit der Maus scrollen.
; Das es auch mit der Trackbar funktioniert sieht man,
; wenn man den "CASE #WM_MOUSEWHEEL" Block aus der Eventschleife auskommentiert.
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #WM_KEYDOWN ;----- ( #WM_KEYDOWN
;Debug EventwParam()
Select EventwParam()
Case #VK_UP ; 38
speed + 1 : If speed > 100 : speed = 100 : EndIf
SetGadgetState(#gadg_rt_trackbar, speed)
;rt_draw_regler(speed)
Case #VK_DOWN ; 40
speed - 1 : If speed < 0 : speed = 0 : EndIf
SetGadgetState(#gadg_rt_trackbar, speed)
;rt_draw_regler(speed)
EndSelect
Case #WM_MOUSEWHEEL ;----- ( #WM_MOUSEWHEEL
If Not MouseOver(#gadg_combo1) And Not MouseOver(#gadg_combo2) And Not MouseOver(#gadg_combo3)
a = EventwParam()
If a > 0
speed = speed / schritt : speed = speed * schritt ; Funktioniert, weil INTEGER rundet auf / ab.
speed + schritt : If speed > 100 : speed = 100 : EndIf
Else
a = speed % schritt : If a : speed - a + schritt : EndIf
speed - schritt : If speed < 0 : speed = 0 : EndIf
EndIf
SetGadgetState(#gadg_rt_trackbar, speed)
EndIf
EndSelect
ForEver
EndIf