ListIconGadget 2-stufig sortieren ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kleiner Wink mit dem Zaunpfahl:

Gonzal hat diese LIB programmiert. Dann auch Gonzal zu fragen ist nicht ganz abwegig, nicht wahr? Bild

Also wie ist jetzt der Stand der Dinge? Stehts in der Doku oder geht es nicht?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Fluid Byte hat geschrieben:Kleiner Wink mit dem Zaunpfahl:

Gonzal hat diese LIB programmiert. Dann auch Gonzal zu fragen ist nicht ganz abwegig, nicht wahr?
Lieber Fliud,der Gonzal schreibt sich gnozal. Bild
Also wie ist jetzt der Stand der Dinge? Stehts in der Doku oder geht es nicht?
Ich habe in der Doku nichts entsprechendes gefunden, deswegen hab ich doch gefragt !

Es kann aber sein, daß ich mal wieder eine(n) Hinweis/Parameter/Bemerkung nicht (richtig) verstanden habe oder bei der Verwendung der richtigen Suchbegriffe (die ich oft nicht treffe, deswegen der Hinweis auf mein Suchschwäche) hier im deutschen oder drüben im englischen Forum eine auch aus meiner Sicht einfache Lösung per PureLVSORT gefunden hätte.

Da nur Deine PLVS-unabhängige Lösung als Antwort kam, gehe ich davon aus, daß es mit PLVS nicht so einfach geht und damit ist das 'Problem' für mich durch.

bis denne... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag von gnozal »

scholly hat geschrieben: 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.
I don't understand your problem, the following code (based on Fluid Byte's one to compare) seems to do exactly the same ?!
With only one line : PureLVSORT_SelectGadgetToSort(#LST_Filelist, #PureLVSORT_ShowClickedHeader_Icon)
Or am I missing something ?

Code: Alles auswählen

;-Define Varibales 
#LST_Filelist = 101 

;-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) 


;-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 

;
PureLVSORT_SelectGadgetToSort(#LST_Filelist, #PureLVSORT_ShowClickedHeader_Icon)
;

; ------------------------------------------------------------------------------------------------------ 
; 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 
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Nö, von dem hätte ich keine Antwort bekommen :wink:
Soviel dazu! :twisted:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

gnozal hat geschrieben:I don't understand your problem, the following code (based on Fluid Byte's one to compare) seems to do exactly the same ?!
With only one line : PureLVSORT_SelectGadgetToSort(#LST_Filelist, #PureLVSORT_ShowClickedHeader_Icon)
Or am I missing something ?
Sowohl Dein als auch Fliuds Beispiel funktionieren, aber meine Realität nicht:

LIG nach dem Einlesen der nach UID sortierten SQLite-DataBase:

Code: Alles auswählen

 1|Blackbeard           |Abenteuer |
 2|Eine Millionen Jahre |Abenteuer |
 3|Ayla und der Clan    |Abenteuer |
 4|Der letzte Dino      |Abenteuer |
 5|Der Patriot          |Abenteuer |
 6|Die Spur des Windes  |Abenteuer |
 7|Indiana Jones 2      |Abenteuer |
......
jetzt sortiere ich nach Titel:

Code: Alles auswählen

1829|10.5 - Apokalypse          |Sci-Fi
1756|2001 - Odyssee im Weltraum |Sci-Fi
1757|2010 - Das Jahr in dem wir |Sci-Fi
 378|2071 - Mutan Bestien       |_lohnt nich
1758|2149 - Kampf in der Todesz.|Sci-Fi
 945|28 Days later              |Horror
1726|40 Jahre Beat-Club         |Musik-Doku
.......
Wenn ich jetzt nach Genre sortiere:

Code: Alles auswählen

 1|Blackbeard           |Abenteuer |
 2|Eine Millionen Jahre |Abenteuer |
 3|Ayla und der Clan    |Abenteuer |
 4|Der letzte Dino      |Abenteuer |
 5|Der Patriot          |Abenteuer |
 6|Die Spur des Windes  |Abenteuer |
 7|Indiana Jones 2      |Abenteuer |
......
Die Titel sollten aber sortiert bleiben:

Code: Alles auswählen

 3|Ayla und der Clan    |Abenteuer |
 1|Blackbeard           |Abenteuer |
 4|Der letzte Dino      |Abenteuer |
 5|Der Patriot          |Abenteuer |
 6|Die Spur des Windes  |Abenteuer |
 2|Eine Millionen Jahre |Abenteuer |
 7|Indiana Jones 2      |Abenteuer |
.....
Ist das Problem nun klarer ?
[edit]
Es ändert sich auch nichts, wenn ich nicht nach UID sortiert das LIG fülle, sondern mit

Code: Alles auswählen

"SELECT * FROM maintable order by Titel ASC"
nach Titel vorsortiere.
[/edit]

bis denne... scholly
Zuletzt geändert von scholly am 11.10.2007 11:14, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@scholly

Was Du möchtest, das musst Du Dir wohl selbst schreiben. Die PureLVSORT-Prozeduren reagieren auf einen Klick in eine Tabellenspalte und sortieren nach dem so bezeichneten Kriterium. Die anderen Spalten folgen, wirken sich aber auf die Sortierung selbst wohl nicht aus. Woher sollen sie auch wissen, welche Spalte das jeweils zweite oder dritte Kriteruim bilden soll?

Du könntest Dir ein paar Buttons anlegen, die die gewünschten Sortierungen auslösen.

Die Sortierung selbst ist recht einfach, auch wenn das Folgende kompliziert klingt:

- die Tabelle Zeile für Zeile auslesen in eine strukturierte Liste
- die Struktur bestehend aus einem Indexfeld und einem Sortierstring fester Länge
- in das Indexfeld setzt Du die Satznummer Deiner Datenbasis
- den Sortierstring füllst Du so, dass sich die gewünschte Sortierung ergibt
- der Inhalt der Spalte des ersten Sortierkriteriums nach vorn, den des zweiten dahinter usw.
- jeweils auf feste Längen geschnitten oder mit Spaces aufgefüllt
- Zahlenwerte musst Du als String rechtsbündig mit führenden Nullen speichern
- dann die strukturierte Liste sortieren lassen
- die Tabelle löschen und entsprechend der Inhalte der Indexfelder wieder füllen
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

jear hat geschrieben:Was Du möchtest, das musst Du Dir wohl selbst schreiben.
Ich vermute das Problem darin, daß ich in der ersten Spalte die UID stehen habe. Fliud und gnozal haben in der ersten Spalte File/Foldernamen stehen. Was ihre und meine Ergebnisse gemeinsam haben, ist, daß die erste Spalte immer so "mitsortiert" wird, wie bei mir die 2. Spalte sollte ;)
Das ist aber FMPOV eher eine kosmetische Sache, die ich hoffentlich hinterher mal irgendwie umgehen kann.
Du könntest Dir ein paar Buttons anlegen, die die gewünschten Sortierungen auslösen.
Was meinst Du, warum ich PureLVSort nutze ?
Richtig, ich bin blutiger Anfänger (steht das nich irgendwo ?) und gnozals Libs erleichtern mir das Leben/Lernen ungemein, weil ich mich auf die schwierigeren Sachen (Sqlite, MediaLib) konzentrieren kann.
Trotzdem danke für Deinen Lösungsansatz, vielleicht hilfts mir ja später mal weiter.

bis denne... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten