I know how to get this information using some API function, but i'm looking into a solution that would work on any platform.
I've tried many tricks (i call them algorithms, to generate more respect and admiration), but none were satisfactory.
Following is a simple ListView program showing what i want.
It's Windows ONLY, since it makes Windows API calls, the very thing i wish to replace :
Code: Select all
EnableExplicit
;-
;- ********************************
;- gadgets ids
Enumeration
#cmd_SCROLL
#input
#liste
#top_LABEL
#top
EndEnumeration
; ********************************
Procedure CheckTopItem()
Static iPrec
Define iTop
iTop = SendMessage_(GadgetID(#liste),#LB_GETTOPINDEX,0,0) ;- .... read top item
If iTop <> iPrec
SetGadgetText(#top,Str(iTop))
iPrec = iTop
EndIf
EndProcedure
; ********************************
If 0 = OpenWindow(0,10,10,300,200,"ListView",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
End
EndIf
; ********************************
;- creating gadgets
Define gX = 10
Define gW = WindowWidth(0) - gX - gX
ListViewGadget(#liste,10,10,280,160)
Define gY = GadgetY(#liste) + GadgetHeight(#liste) + 6
gW = 56
TextGadget(#top_LABEL,gX,gY+2,gW,20,"Top item = ", #PB_Text_Right)
gX + gW + 4
gW = 24
TextGadget(#top,gX,gY+2,gW,20,"0")
SetGadgetColor(#top, #PB_Gadget_FrontColor, #Red)
gW = 30
gX = GadgetX(#liste) + GadgetWidth(#liste) - gW
StringGadget(#input ,gX,gY,gW,20,"22", #PB_String_Numeric)
gW = 75
gX - gW - 4
ButtonGadget(#cmd_SCROLL ,gX,gY,gW,20,"Scroll to >>>")
; ********************************
;- initializing list
Define i
For i = 0 To 100
AddGadgetItem(#liste, i, "Ligne "+Str(i))
Next
;-
;- ********************************
;- Windows loop
Define event, evType, gadget, iTop, iPrec
Repeat
event=WaitWindowEvent(222)
CheckTopItem()
Select event
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
gadget = EventGadget()
Select gadget
Case #liste
SetGadgetText(#input,Str(GetGadgetState(#liste)))
Case #cmd_SCROLL
i = Val(GetGadgetText(#input))
SendMessage_(GadgetID(#liste), #LB_SETTOPINDEX, i, 0)
Case #input
i = Val(GetGadgetText(#input))
If i >= CountGadgetItems(#liste)
SetGadgetState(#liste,CountGadgetItems(#liste)-1)
SetGadgetText(#input,Str(GetGadgetState(#liste)))
EndIf
EndSelect
EndSelect
ForEver
End