ListIconGadget 2-stufig sortieren ?
ListIconGadget 2-stufig sortieren ?
moin, moin...
Ich sortiere mein LIG mit PureLVSort.
Spalten: ID, Titel, Genre, Jahr,.......
Gibt es irgendeine Möglichkeit, die ich Dussel mal wieder nicht finde, daß beim sortieren nach einer anderen Spalte als Titel (z.B. Genre oder Jahr)
die Spalte Titel innerhal des Genres/Jahres auch sortiert bleibt/wird ?
War das verständlich genug ?
TIA... scholly
			
			
									
									Ich sortiere mein LIG mit PureLVSort.
Spalten: ID, Titel, Genre, Jahr,.......
Gibt es irgendeine Möglichkeit, die ich Dussel mal wieder nicht finde, daß beim sortieren nach einer anderen Spalte als Titel (z.B. Genre oder Jahr)
die Spalte Titel innerhal des Genres/Jahres auch sortiert bleibt/wird ?
War das verständlich genug ?
TIA... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
						seit 17.12.08: PB 4.3 unter XP Home(SP3)
- Fluid Byte
 - Beiträge: 3110
 - Registriert: 27.09.2006 22:06
 - Wohnort: Berlin, Mitte
 
Heißt das im Klartext das wenn du nach "Genre" oder "Jahr" sortierst die Spalte "Titel" unverändert bleibt?
			
			
									
									Windows 10 Pro, 64-Bit / Outtakes | Derek
						Ich glaube eher, dass er zwei oder mehr Sortierkriterien verwenden können will, ca. so:
Wenn das nicht passt, Beispiel bitte wie du das meinst 
			
			
									
									
						Code: Alles auswählen
vorher:
spalte A | spalte B
 1       |  B
 3       |  B
 2       |  A
 3       |  A
 1       |  A
 
danach (Sortierkriterium 1: Spalte A, 2: Spalte B:
spalte A | spalte B
 1       |  A
 1       |  B
 2       |  A
 3       |  A
 3       |  B
- Fluid Byte
 - Beiträge: 3110
 - Registriert: 27.09.2006 22:06
 - Wohnort: Berlin, Mitte
 
Nein, was du da schliderst ist normales Sortieren. Das sich die restlichen Spalten nach der zu sortierenden richten ist ja wohl selbstverständlich.
			
			
									
									Windows 10 Pro, 64-Bit / Outtakes | Derek
						Hallo,
So selbstverständlich ist das nicht. Wenn in der zu sortierenden Spalte mehrere gleiche Werte vorkommen kann man sich ja wünschen, das dann nach einen zweiten Kriterium sortiert wird.
Wenn es nicht funktioniert, erst nach dem Nebenkriterium zu sortieren und dann nach dem Hauptkriterium gibt es keine Anfängergeeignete Lösung. Du müsstest dann den Listicongadget eine Message #LVM_Sortitems schicken und als lParam eine selbstgeschriebene Sortierfunktion angeben, die du dann wohl so schreiben könntest das sie eine Nebenbedingung überprüft. Näheres dazu im MSDN.
Gruß,
Ligatur
			
			
									
									
						So selbstverständlich ist das nicht. Wenn in der zu sortierenden Spalte mehrere gleiche Werte vorkommen kann man sich ja wünschen, das dann nach einen zweiten Kriterium sortiert wird.
Wenn es nicht funktioniert, erst nach dem Nebenkriterium zu sortieren und dann nach dem Hauptkriterium gibt es keine Anfängergeeignete Lösung. Du müsstest dann den Listicongadget eine Message #LVM_Sortitems schicken und als lParam eine selbstgeschriebene Sortierfunktion angeben, die du dann wohl so schreiben könntest das sie eine Nebenbedingung überprüft. Näheres dazu im MSDN.
Gruß,
Ligatur
- Fluid Byte
 - Beiträge: 3110
 - Registriert: 27.09.2006 22:06
 - Wohnort: Berlin, Mitte
 
Code: Alles auswählen
; ***********************************************
; *                                             *
; *      'List-View Item Sorting'               *
; *                                             *
; * Author:  Christian Kemna (Fluid Byte)       *
; * Created: October 09, 2007                   *
; * Updated: n.a                                *
; * Version: PureBasic V4.10b4                  *
; *                                             *
; * Web: http://codedreality.purearea.net/	    *
; * eMail: ckemna@t-online.de                   *
; *                                             *
; ***********************************************
;-Declare Functions
Declare WindowCallback(hWnd,uMsg,wParam,lParam)
Declare CompareFunc(*Item1.LONG,*Item2.LONG,lParamSort) 
;-Define Varibales
#LST_Filelist = 101
Global *hwndListView
Global Sortmode, LastCol
;-Application Window
OpenWindow(0,0,0,500,400,"untitled",#WS_OVERLAPPEDWINDOW | 1)
CreateGadgetList(WindowID(0))
ListIconGadget(#LST_Filelist,0,0,0,0,"Name",200)
AddGadgetColumn(#LST_Filelist,1,"Size",70)
AddGadgetColumn(#LST_Filelist,2,"Type",190)
*hwndListView = GadgetID(#LST_Filelist)
SetWindowCallback(@WindowCallback())
;-Examine Directory
Filepath$ = "C:\WINDOWS\"
ExamineDirectory(0,Filepath$,"*.*")
While NextDirectoryEntry(0)	
	Filename$ = DirectoryEntryName(0)
	
	SHGetFileInfo_(Filepath$ + Filename$,0,shi.SHFILEINFO,SizeOf(SHFILEINFO),#SHGFI_TYPENAME)
	If DirectoryEntryType(0) = #PB_DirectoryEntry_File
		ItemText$ = Filename$ + Chr(10) 
		ItemText$ + StrF(DirectoryEntrySize(0)/1024,1) + " KB" + Chr(10)
		ItemText$ + PeekS(@shi\szTypeName)
	
 		AddGadgetItem(#LST_Filelist,-1,ItemText$)
	EndIf
	
	If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory And Filename$ > ".."
 		AddGadgetItem(#LST_Filelist,-1,Filename$ + Chr(10) + Chr(10) + "Folder")
	EndIf	
Wend
;-Update Item lParam
ItemsNUM = CountGadgetItems(#LST_Filelist) - 1
For i = 0 To ItemsNUM
	SetGadgetItemData(#LST_Filelist,i,i) 
Next 
; ------------------------------------------------------------------------------------------------------
; MAIN LOOP
; ------------------------------------------------------------------------------------------------------
Repeat
	EventID = WaitWindowEvent()
	If EventID = #PB_Event_SizeWindow
		ResizeGadget(#LST_Filelist,5,5,WindowWidth(0)-10,WindowHeight(0)-10)
	EndIf
Until EventID = #WM_CLOSE
; ------------------------------------------------------------------------------------------------------
; FUNCTIONS
; ------------------------------------------------------------------------------------------------------
Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
	Protected *pnmh.NMHDR, *pnmv.NM_LISTVIEW, ItemsNUM, i
	
	Select uMsg
		Case #WM_NOTIFY
		*pnmh = lParam
		
		Select *pnmh\code
			Case #LVN_COLUMNCLICK
			*pnmv = lParam
			
			If LastCol <> *pnmv\iSubItem : Sortmode = 0 : EndIf
			
			SendMessage_(*hwndListView,#LVM_SORTITEMS,*pnmv\iSubItem,@CompareFunc())
			LastCol = *pnmv\iSubItem
			Sortmode = 1-Sortmode
			
			; * Update Item lParam
			ItemsNUM = CountGadgetItems(#LST_Filelist) - 1
			
			For i = 0 To ItemsNUM
				SetGadgetItemData(#LST_Filelist,i,i) 
			Next 
		EndSelect
	EndSelect
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Procedure CompareFunc(*Item1.LONG,*Item2.LONG,lParamSort) 
	Protected lvi.LV_ITEM, Buffer1$ = Space(255), Buffer2$ = Space(255), Result
	
	lvi\iSubItem = lParamSort & $FFFF
	lvi\cchTextMax = 255
	
	lvi\pszText = @Buffer1$
	SendMessage_(*hwndListView,#LVM_GETITEMTEXT,*Item1\l,lvi)
	
	lvi\pszText = @Buffer2$
	SendMessage_(*hwndListView,#LVM_GETITEMTEXT,*Item2\l,lvi)		
	If Sortmode
		Result = lstrcmpi_(Buffer2$,Buffer1$)
	Else
		Result = lstrcmpi_(Buffer1$,Buffer2$)
	EndIf
	
	ProcedureReturn Result
EndProcedureWindows 10 Pro, 64-Bit / Outtakes | Derek
						Danke für den Code, Fluid, er zeigt genau, wie ich mir das vorstelle.
Meine Frage zielte aber nicht auf eine "selbstständige Lösung", sondern darauf, ob ich bei meiner "Suchschwäche" etwas in der Doku zu PureLVSORT übersehen habe, das das Gleiche erreicht.
Da weder von gnozal noch anderen, die erfahrungsgemäß seine Libs recht gut kennen, ein solcher Hinweis gekommen ist, lasse ichs wohl dabei bewenden.
bis denne... scholly
			
			
									
									Meine Frage zielte aber nicht auf eine "selbstständige Lösung", sondern darauf, ob ich bei meiner "Suchschwäche" etwas in der Doku zu PureLVSORT übersehen habe, das das Gleiche erreicht.
Da weder von gnozal noch anderen, die erfahrungsgemäß seine Libs recht gut kennen, ein solcher Hinweis gekommen ist, lasse ichs wohl dabei bewenden.
bis denne... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
						seit 17.12.08: PB 4.3 unter XP Home(SP3)
- Fluid Byte
 - Beiträge: 3110
 - Registriert: 27.09.2006 22:06
 - Wohnort: Berlin, Mitte
 
Tja, solange du aber nicht weisst wie oder zur Erkenntniss kommst das es generell nicht geht kann ich dir das Snippet nur ans Herz legen. Außerdem warum fragst du hier im deutschen Forum danach? Wende dich doch lieber an Gonzal direkt.
			
			
									
									Windows 10 Pro, 64-Bit / Outtakes | Derek
						Weil mir hier bisher immer freundlich geholfen wurde, auch wenn ich zu doof war, an der richtigen Stelle zu suchen.Fluid Byte hat geschrieben: Außerdem warum fragst du hier im deutschen Forum danach?
Nö, von dem hätte ich keine Antwort bekommenWende dich doch lieber an Gonzal direkt.
Und wenn das in so einem Fall (Suchschwäche) jeder machen würde, käme gnozal nicht mehr dazu, so produktiv für die PB-Community zu schaffen.
'nen Anschiß, weil ich mal wieder an der falschen Stelle gesucht habe oder den entsprechenden Vermerk in der englischen Doku nicht verstanden habe, hätte ich ja verstanden - aber daß ich hier gefragt habe ???
Ich hab mich lieb für Deinen Code, den ich zwar nicht verstehe, der aber genau das zeigt, was ich meinte, bedankt, weil mir klar ist, daß er anderen weiterhelfen kann.
Was willst Du mehr ?
Den hier:
Kannste haben.
Aber ob ich dazu in der Lage bin, Deinen Code zu verstehen und einzubauen, mußt Du schon mir überlassen; darüber brauchste nicht eingeschnappt zu sein und als PB-Experte 'nen Anfänger anzumachen.
bis denne... scholli
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
						seit 17.12.08: PB 4.3 unter XP Home(SP3)