Ostatnio zadawałem na forum pytanie o tablice dynamiczną (array of string). Pytanie dotyczyło sortowania. Otóż mój program składa się z listboxa i memo. Itemy w listboxie jak wiecie mają swoje indexy. Aby wyświetlił mi się żądany opis musiałem zdeklarować zmienną typu integer o nazwie PIndex. Przypisałem tą zmienną PIndex:=Listbox.ItemIndex i w ten sposób, po kliknięciu na dany item, lądował w memo odpowiedni opis. Wszystko było pięknie i cacy, gdy Listbox.Sorted:=False. Kiedy zmieniłem tą wartość na true wszystkie itemy w listbox ustawiły mi się alfabetycznie a opisy do nich już nie pasowały. Nazwy zmieniły swoje położenie w listbox, a opisy pozostawały w tych samych miejscach.
Stworzyłem więc dwie procedury, które miały za zadanie "ręcznie" posortować tablicę. Kiedy użytkownik kliknął na BtnUpClick wtedy Item w listbox był przesuwany w tablicy o "piętro" wyżej wraz z przypisanym wcześniej do niego opisem. Podobnie w procedurze BtnDownClick z tym, że Item w listbox był przesuwany w tablicy o "piętro" niżej.
procedure TForm1.BtnUpClick(Sender: TObject);
var
S : string;
n : integer;
begin
n := Lista.ItemIndex;
if n <= 0 then exit;
Lista.Items.Exchange(n,n-1);
S := Game[n]; //Game : array of string
Game[n] := Game[n-1];
Game[n-1] := S;
PIndex := n-1; //Index opisu w Game
end;
procedure TForm1.BtnDownClick(Sender: TObject);
var
S : string;
n : integer;
begin
n := Lista.ItemIndex;
if n >= ilosc-1 then exit; //Ilosc to funkcja, w której Result:=Lista.Items.Count
Lista.Items.Exchange(n,n+1);
S := Game[n];
Game[n] := Game[n+1];
Game[n+1] := S;
PIndex := n+1;
end;
Wszystko byłoby ok, gdyby nie fakt, że nie wiem ile tych itemów w przyszłość będzie. Może być ich 100 a nawet 1000. I co, użytkownik będzie wciskał przycisk 1000 razy, żeby item ustawić na pierwszej pozycji, bo akurat tytuł zaczyna się na literę "A".
Bez sensu, prawda? Dlatego pomóżcie rozwiązać mi ten problem. Wcześniej jeszcze używałem QuickSorta, ale on tylko sortował tablicę, a mi chodzi o posortowanie tytułów w listbox tak, żeby opisy były do nich przyklejone(przypisane).