I found a user lib by gnozal but I have done my own thingie to be sure that my apps will work withour tailbited libs on further versions.
The following procedures sorts a ListView Gadget by your desired options.
This procedure copies also all colorinformation and itemdata set by SetGadgetItemData(). If this is not required you can modify the source for your own needs. Have fun.
Code: Select all
Syntax:
SortListView(ID.l,ColumnID,ColumnType,direction.b,mask$ = "")
ID : Gadget ID (Not handle!)
Column : Column position starting at 0
ColumnType: Can be one of the following constants:
#SCL_ColumnType_Byte
#SCL_ColumnType_Float
#SCL_ColumnType_Quad
#SCL_ColumnType_Long
#SCL_ColumnType_String
#SCL_ColumnType_Date
#SCL_ColumnType_Double
#SCL_ColumnType_Word
direction : See PB commands SortStructuredList option for details
mask$ : only needed for date fields. It defines the date formate as the same in the pb internal date formats. See FormatDate for more details on this. Mask$ is optional and must only be given in case ob #SCL_ColumnType_Date
Code: Select all
Enumeration
#SCL_ColumnType_Byte
#SCL_ColumnType_Float
#SCL_ColumnType_Quad
#SCL_ColumnType_Long
#SCL_ColumnType_String
#SCL_ColumnType_Date
#SCL_ColumnType_Double
#SCL_ColumnType_Word
EndEnumeration
Procedure SortListView(ID.l,ColumnID,ColumnType,direction.b,mask$ = "")
Structure SCLListViewStruct
SortBy_String.s
SortBy_Double.d
SortBy_Long.l
SortBy_Quad.q
SortBy_Byte.b
SortBy_Word.w
SortBy_Float.f
SortBy_Date.l
Row.s
LongData.l
BGColor.l
FNTColor.l
EndStructure
If IsGadget(id)=0
ProcedureReturn #False
EndIf
If CountGadgetItems(ID)=0
ProcedureReturn #True
EndIf
NewList Items.SCLListViewStruct()
;Ermittle Anzahl der Columns im gadget
headerid=SendMessage_(GadgetID(id),#LVM_FIRST + 31,0,0)
anzcolumns=SendMessage_(headerid,#HDM_GETITEMCOUNT,#Null,#Null)
For pos=0 To CountGadgetItems(ID)-1
AddElement(Items())
; Row erstellen
For row=0 To anzcolumns-1
items()\row + GetGadgetItemText(id,pos,row)+Chr(10)
Next
; ItemData holen
items()\LongData = GetGadgetItemData(ID,pos)
; Item Farben holen
items()\BGColor = GetGadgetItemColor(ID,pos,#PB_Gadget_BackColor)
items()\FNTColor= GetGadgetItemColor(id,pos,#PB_Gadget_FrontColor)
Select ColumnType
Case #SCL_ColumnType_Byte
items()\SortBy_Byte = Val(GetGadgetItemText(ID,pos,ColumnID))
Case #SCL_ColumnType_Float
items()\SortBy_Float = ValF(GetGadgetItemText(ID,pos,ColumnID))
Case #SCL_ColumnType_Quad
items()\SortBy_Quad = Val(GetGadgetItemText(ID,pos,ColumnID))
Case #SCL_ColumnType_Long
items()\SortBy_Long = Val(GetGadgetItemText(ID,pos,ColumnID))
Case #SCL_ColumnType_String
items()\SortBy_String = GetGadgetItemText(ID,pos,ColumnID)
Case #SCL_ColumnType_Date
items()\SortBy_Date = ParseDate(mask$,GetGadgetItemText(ID,pos,ColumnID))
Debug items()\SortBy_Date
Case #SCL_ColumnType_Double
items()\SortBy_Double = ValD(GetGadgetItemText(ID,pos,ColumnID))
Case #SCL_ColumnType_Word
items()\SortBy_Word = Val(GetGadgetItemText(ID,pos,ColumnID))
EndSelect
Next pos
; Sortieren
Select ColumnType
Case #SCL_ColumnType_Byte
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Byte),#PB_Byte)
Case #SCL_ColumnType_Float
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Float),#PB_Float)
Case #SCL_ColumnType_Quad
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Quad),#PB_Quad)
Case #SCL_ColumnType_Long
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Long),#PB_Long)
Case #SCL_ColumnType_String
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_String),#PB_String)
Case #SCL_ColumnType_Date
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Long),#PB_Long)
Case #SCL_ColumnType_Double
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Double),#PB_Double)
Case #SCL_ColumnType_Word
SortStructuredList(items(),direction.b,OffsetOf(SCLListViewStruct\SortBy_Word),#PB_Word)
EndSelect
; ListView leeren und neu anzeigen
ForEach Items()
AddGadgetItem(ID,-1,items()\row)
SetGadgetItemData(id,ListIndex(items()),items()\longdata)
If items()\BGColor <>-1
SetGadgetItemColor(ID,ListIndex(items()),#PB_Gadget_BackColor,items()\bgcolor)
EndIf
If items()\FNTColor <>-1
SetGadgetItemColor(ID,ListIndex(items()),#PB_Gadget_FrontColor,items()\fntcolor)
EndIf
Next
EndProcedure