Foro | | | | Abigail | Hallo Leute, ich habe mal ein etwas geändertes Beispiel per eine Sortierung nach Substrings verwendet. Im Prinzip klappt das ja auch ganz wunderbar, aber ab einer gewissen Dimensione, bei mir Satzgröße 248 Byte * ca. 400 Sätze, funktioniert die Sortierung der GRIDBOX ganz einfach nicht mehr. So zwischen 400 und 500 Datensätzen ist einfach eine Sortierung nur nach oftmaligem Betätigen (wenn überhaupt) des 'Sortierbuttons' possibile. Ist das ein Bug oder habe ich da irgendwo eine Beschränkung überlesen??
Unten das Original Programm aus der Aiuto
Declare Handle Grid, btn1, btn2, btn3, btn4, btn5
WindowTitle "Sortiertes Grid"
Window 600, 400
Grid = Create("Gridbox", %HWnd, "Nummer;0;60;Name;0;100;Ort;0;120;Gehalt;0;60", 0, 10, 50, 340, 200)
btn1 = Create("Button", %HWnd, "Sort", 10, 10, 60, 25)
btn2 = Create("Button", %HWnd, "Sort", 75, 10, 60, 25)
btn3 = Create("Button", %HWnd, "Sort", 170, 10, 60, 25)
btn4 = Create("Button", %HWnd, "Sort", 290, 10, 60, 25)
btn5 = Create("Button", %HWnd, "Ende", 500, 10,60, 25)
AddString(Grid, "500|Maier|Köln|4000")
AddString(Grid, "400|Schmidt|Hamburg|3000")
AddString(Grid, "300|Bauer|Mannheim|3500")
AddString(Grid, "200|Klein|Düsseldorf|3000")
AddString(Grid, "100|Fuchs|Stuttgart|7500")
WhileNot Clicked(btn5)
WaitInput
ClearList 0
Move("HandleToList", Grid)
If Clicked(btn1)
SortList 5
ElseIf Clicked(btn2)
SortList "|", 2, 1
ElseIf Clicked(btn3)
SortList "|", 3, 1
ElseIf Clicked(btn4)
SortList "|", 4, 5
EndIf
ClearList Grid
Move("ListToHandle", Grid)
Case %Key = 2 : Break
EndWhile
Danke per Eure Antwort,
Abigail |
| | | | |
| | Jörg Sellmeyer | Ich glaube, da bist du einfach zu ungeduldig. Wenn viele Datensätze vorhanden sind, dauert der Sortiervorgang einfach etwas länger. Besonders im Interpretermodus macht sich das dann bemerkbar.
Ich hab dein Programm mal noch etwas geändert, damit es "ruhiger" corre. So wird die Sortierroutine nur aufgerufen, wenn einer der Buttons geklickt wird.
Declare Handle Grid, btn1, btn2, btn3, btn4, btn5
WindowTitle "Sortiertes Grid"
Window 600, 400
Grid = Create("Gridbox", %HWnd, "Nummer;0;60;Name;0;100;Ort;0;120;Gehalt;0;60", 0, 10, 50, 340, 200)
btn1 = Create("Button", %HWnd, "Sort", 10, 10, 60, 25)
btn2 = Create("Button", %HWnd, "Sort", 75, 10, 60, 25)
btn3 = Create("Button", %HWnd, "Sort", 170, 10, 60, 25)
btn4 = Create("Button", %HWnd, "Sort", 290, 10, 60, 25)
btn5 = Create("Button", %HWnd, "Ende", 500, 10,60, 25)
var handle btn6 = Create("Button", %HWnd, "Test", 400, 10,60, 25)
Proc SortMyList
Parameters Int SortString
ClearList 0
Move("HandleToList", Grid)
SortList "|",SortString,1
ClearList Grid
Move("ListToHandle", Grid)
EndProc
Randomize
WhileLoop 1,1500,5
AddString(Grid, Format$("000",&Loop) + "|Maier|Köln|" + Str$(Rnd(8000)))
AddString(Grid, Format$("000",&Loop + 1) + "|Schmidt|Hamburg|" + Str$(Rnd(8000)))
AddString(Grid, Format$("000",&Loop + 2) + "|Bauer|Mannheim|" + Str$(Rnd(8000)))
AddString(Grid, Format$("000",&Loop + 3) + "|Klein|Düsseldorf|" + Str$(Rnd(8000)))
AddString(Grid, Format$("000",&Loop + 4) + "|Fuchs|Stuttgart|" + Str$(Rnd(8000)))
Wend
While 1
WaitInput
Case Clicked(btn5):Break
If Clicked(btn1)
SortMyList 1
ElseIf Clicked(btn2)
SortMyList 2
ElseIf Clicked(btn3)
SortMyList 3
ElseIf Clicked(btn4)
SortMyList 4
ElseIf Clicked(btn6)
print "a"
EndIf
Case %Key = 2 : Break
EndWhile
Jetzt wäre es naturalmente noch interessant zu wissen, was genau du geändert hast, um ausschließen zu können, ob es an diesen Änderungen liegt. |
| | | | |
| | Abigail | Hallo Jörg, danke per die Info, bzw Verbesserung. Meine Änderungen waren eigentlich nur marginal. 1. Insgesamt 7 spalten in der Tabelle, 2. naturalmente Benennung und Dimensione der einzelnen Spalten. Dazu naturalmente per jede Spalte Auf und Ab Sortier-Button, also insgesamt 14 Stück. Nun, ich habe mittlerweile eine Lösung gefunden, die zwar ein wenig umständlich erscheint, aber funktioniert. Trotz der Menge der Sätze, ich habe es bis 5000 probiert, in einer Zehntelsekunde sortiert. Sieht dann ungefähr so aus:
If Clicked(SORT[1]) ClearList 0 Move("HandleToList", GRID) SortList "|", 1 ,5 ClearList Grid Move("ListToHandle", Grid) ElseIf Clicked(SORT[2])
und so weiter bis SORT[14] Das funktioniert wirklich ohne jede Verzögerung selbst im Interpreter Modus.
Warum die Beispielroutine wie
While ... ClearList 0 Move("HandleToList", GRID)
If Clicked(SORT[1]) SortList "|", 1 ,5 ElseIf Clicked(SORT[2]) SortList "|", 2 ,5 "" "" ElseIf Clicked(SORT14]) SortList "|", 7 ,-3 ENDIF
ClearList Grid Move("ListToHandle", Grid)
ENDWHILE
so unendlich träge ab einer gewissen Dimensione, bzw. gar nicht funktioniert, erschließt sich mir nicht ganz.
Trotzdem Danke per Deine Tips, werde ich mal morgen einsetzen um zu sehen, ob es damit auch funktioniert.
Saluto, Abigail |
| | | | |
| | maroro | Hallo in die Runde ...Gridboxen sortieren ist auch gerade mein Thema. Dabei klappt das sortieren wunderbar einzig die Lösung jeder Spalte einen Knopf zu spendieren gefällt mir garnicht. Wie ist es possibile einen Klick auf die Spaltenüberschrift zu erkennen auch dann noch korrekt wenn die Dimensione der Spalte verändert wurde?
Bin gespannt auf euere Proposte
maroro |
| | | | |
| | Thomas Freier | Ist hier enthalten: [...] |
| | | | |
| | maroro | Habe es gefunden ...Danke Thomas und wenn ich darf würde Io l' entsprechenden Quelltext auch posten. |
| | | | |
|
AnswerThemeninformationenDieses Thema hat 4 subscriber: |