Sortieren eines Listicongadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Sortieren eines Listicongadget

Beitrag von dysti »

Hallo,
ich habe ein Listicon mit Spalten "Vorname" und "Name" erstellt.
Die eingegebenen Daten möchte ich sortiert haben.
Habe überall gesucht, aber nichts gefunden. Habe das Beispiel von Danilo probiert, aber da ich mich mit Sendmessage&Co nicht auskenne, mußte ich aufgeben. Dann habe ich die Gnozal-PureLVSort-LIB probiert. Aber......., alle sortieren nur auf Mausklick im Spaltenkopf. Ich möchte die Liste schon nach dem Aufbau automatisch sortiert angezeigt haben. Das muß doch möglich sein?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Sortieren eines Listicongadget

Beitrag von Kiffi »

> Ich möchte die Liste schon nach dem Aufbau automatisch sortiert angezeigt
> haben. Das muß doch möglich sein?

wie 'fütterst' Du denn das ListIconGadget? Sprich: Woher holst Du die Daten?
Wenn's beispielsweise eine Datenbank ist, hast Du die Möglichkeit, die
zugrunde liegende SQL-Anweisung bereits mit einer Order-Anweisung zu
versehen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Ich hole die Daten nicht über SQL sondern direkt zeilenweise aus einer Textdatei.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dysti hat geschrieben:Ich hole die Daten nicht über SQL sondern direkt zeilenweise aus einer Textdatei.
dann lies die Textdatei in eine LinkedList ein. Die kannst Du dann sortieren
lassen und danach deren Inhalt in das LI-Gadget einfügen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Re: Sortieren eines Listicongadget

Beitrag von gnozal »

dysti hat geschrieben:....., alle sortieren nur auf Mausklick im Spaltenkopf. Ich möchte die Liste schon nach dem Aufbau automatisch sortiert angezeigt haben. Das muß doch möglich sein?
1. If your listicon has only one column, use the #LVS_SORTASCENDING/#LVS_SORTDESCENDING styles.
2. Else, with PureLVSORT, you can use the PureLVSORT_SortListIconNow() function.
3. You can also sort the data before loading it in the listicon like Kiffi said.
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Also, nach dem Hinweis von Gnozal ist die Tabelle bei der Anzeige jetzt sortiert. Aber wenn ich jetzt auf den Spaltenkopf klicke, wird die umgekehrte Sortierung angezeigt. Aber der Click soll ohne Auswirkung bleiben. Meine Select-Abfrage funktioniert nicht.
Wie kann ich dieses Verhalten abschalten?

Code: Alles auswählen

#Window_0 = 0
#ListIcon_0 = 0
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 602, 302, "PureLVSORT Sortiertest", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#Window_0))
      ListIconGadget(#ListIcon_0, 5, 5, 590, 285, "Vorname", 110)
      AddGadgetColumn(#ListIcon_0, 2, "Name", 130)
      AddGadgetItem(#ListIcon_0, -1, "Egon" + Chr(10) + "Müller" )
      AddGadgetItem(#ListIcon_0, -1, "Willi" + Chr(10) + "Müller")
      AddGadgetItem(#ListIcon_0, -1, "Anton" + Chr(10) + "Müller") 
    EndIf
  EndIf
EndProcedure
Open_Window_0()
PureLVSORT_SelectGadgetToSort(#ListIcon_0, #PureLVSORT_ShowClickedHeader_No) ;IconLeft)
PureLVSORT_SetColumnType(#ListIcon_0, 0, #PureLVSORT_String)
PureLVSORT_SortListIconNow(#ListIcon_0, 0, #LVS_SORTDESCENDING)
Repeat
  Event = WaitWindowEvent()
  Select Event
Case #PB_Event_Gadget
  Select EventGadget()
    Case #ListIcon_0
      PureLVSORT_SelectGadgetToSort(#ListIcon_0, #PureLVSORT_ShowClickedHeader_No)
      PureLVSORT_SetColumnType(#ListIcon_0, 0, #PureLVSORT_String)
      PureLVSORT_SortListIconNow(#ListIcon_0, 0, #LVS_SORTDESCENDING)
    EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag von gnozal »

dysti hat geschrieben:Aber der Click soll ohne Auswirkung bleiben.
Wie kann ich dieses Verhalten abschalten?
Like this ?

Code: Alles auswählen

#Window_0 = 0 
#ListIcon_0 = 0 
Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 216, 0, 602, 302, "PureLVSORT Sortiertest", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered) 
    If CreateGadgetList(WindowID(#Window_0)) 
      ListIconGadget(#ListIcon_0, 5, 5, 590, 285, "Vorname", 110) 
      AddGadgetColumn(#ListIcon_0, 2, "Name", 130) 
      AddGadgetItem(#ListIcon_0, -1, "Egon" + Chr(10) + "Müller" ) 
      AddGadgetItem(#ListIcon_0, -1, "Willi" + Chr(10) + "Müller") 
      AddGadgetItem(#ListIcon_0, -1, "Anton" + Chr(10) + "Müller") 
    EndIf 
  EndIf 
EndProcedure 
Open_Window_0() 
PureLVSORT_SelectGadgetToSort(#ListIcon_0, #PureLVSORT_ShowClickedHeader_No) ;IconLeft) 
PureLVSORT_SetColumnType(#ListIcon_0, 0, #PureLVSORT_String) 
PureLVSORT_SortListIconNow(#ListIcon_0, 0, #LVS_SORTDESCENDING) 
; don't react to header click
PureLVSORT_SetColumnType(#ListIcon_0, 0, #PureLVSORT_NoSorting) 
PureLVSORT_SetColumnType(#ListIcon_0, 1, #PureLVSORT_NoSorting) 
;
Repeat 
  Event = WaitWindowEvent() 
Until Event = #PB_Event_CloseWindow 
End
or like that ?

Code: Alles auswählen

#Window_0 = 0 
#ListIcon_0 = 0 
Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 216, 0, 602, 302, "PureLVSORT Sortiertest", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered) 
    If CreateGadgetList(WindowID(#Window_0)) 
      ListIconGadget(#ListIcon_0, 5, 5, 590, 285, "Vorname", 110) 
      AddGadgetColumn(#ListIcon_0, 2, "Name", 130) 
      AddGadgetItem(#ListIcon_0, -1, "Egon" + Chr(10) + "Müller" ) 
      AddGadgetItem(#ListIcon_0, -1, "Willi" + Chr(10) + "Müller") 
      AddGadgetItem(#ListIcon_0, -1, "Anton" + Chr(10) + "Müller") 
    EndIf 
  EndIf 
EndProcedure 
Open_Window_0() 
PureLVSORT_SelectGadgetToSort(#ListIcon_0, #PureLVSORT_ShowClickedHeader_No) ;IconLeft) 
PureLVSORT_SetColumnType(#ListIcon_0, 0, #PureLVSORT_String) 
PureLVSORT_SortListIconNow(#ListIcon_0, 0, #LVS_SORTDESCENDING) 
; clear gadget
PureLVSORT_ClearGadget(#ListIcon_0) 
; 
Repeat 
  Event = WaitWindowEvent() 
Until Event = #PB_Event_CloseWindow 
End
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

super, funktioniert.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Beitrag von HemSA »

Hallole Ihr,
ich mache bei für mich interesanten Themen einfach mal schnell eine Kopie ( Ctrl+C) von dem dargestellten Code und füge es in das PureBasic v4.00 das ich habe ein ( ich gehe einfach mal davon aus, das sich da keiner einen "Scherz" erlaubt und den Leuten hier was unterjubelt - man lernt ja auch was dabei, wenn man das Ergebnis von einem neuen Bereich sieht, und dann versteht man den Code gleich viel besser).

Aber hier habe ich es z. B. mit allen "BeispielCodes" probiert, aber es kam immer die Fehlermeldeung wie z.B. diese hier:

"Zeile 15: PureLVSORT_SelectGadgetToSort() is not a function, array, macro or linked list"

1.) Woher bekomme ich dann jetzt diese "PureLVSORT_SelectGadgetToSort()" Funktion oder was mir fehlt, und wie baue ich das in mein PB ein?

So was ähnliches kommt mir auch bei anderen Themen vor, das die Beispiele wegen einem "Fehlen von einer Funktion, Array etc." nicht funktionieren - z.B. SQL-light oder anderen. Ich lasse es dann meistens gleich wieder mit dem Probieren.

2.) Wie sieht es dann mit einem "Update" aus - es soll ja jetzt schon PB 4.1 geben, muss man dann alles wieder neu Installieren, oder warten bis es eine Version für die neue PB-Version gibt? Dann wird man ja wohl immer mit mehreren PB-Versionen arbeiten müssen - vielleicht mit 3?

Vielen Dank schon mal - war einfach mal so ein Gedanke den ich da hatte nach den "Fehlversuchen" hier bei den Beispielen
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

HemSa: hier ist die Downloadadresse von Gnozal: http://people.freenet.de/gnozal/
Hier bekommst du die Libs. Gnozal hat alles so gut vorbereitet, nur das Installprogramm aufrufen, Pb neu starten und schon stehen dir alle Befehle zur Verfügung. Die Lib in diesem Thread ist die PURELVSort.
Lade dir auch die anderen Lib herunter. Überall Beispielprogramme dabei.
Die PBOSL PureBasic OpenSource Libraries solltest du unbedingt installieren. Fast ein Muß. Mit allen Lib kannst du fast alles realisieren, was dein Purebasic-Herz begehrt.

Du kannst die PB-Verion par. inst. Habe ich auch gemacht. Es gibt zumindest bei mir keine Schwierigkeiten.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten