Aż się boje zamieszczać tu posty a nawet krótkie prośby by sie nie narażać oszołomowi :)
Chodzi o 2 Listbox-y w których są stringi w pierwszym (Nazwiska) a w drugim liczby typy REAL (single) jak je sortowć aby "wędrowały" zawsze w tych samych indexach a z a b z b itd ?
if costam then
begin
ListBox1.Items.Exchange(J,K);
ListBox2.Items.Exchange(J,K);
end;
A jeszcze lepiej użyć: TVirtualTreeView lub TListView lub TStringGrid od najlepszego.
Aż się boje zamieszczać tu posty a nawet krótkie prośby by sie nie narażać oszołomowi
No skoro masz z tym problem to może po prostu znak że nie powinieneś tutaj pytać.
Co do pytania to przecież niedawno zadałeś pytanie o to samo: ListBox1 i ListBox2 zmiany pozycji indexes
Ale oczywiście tam nabrałeś wody w usta i zadajesz kolejne, takie same pytanie. No ale debile na drzewach nie rosną.
Torozumiem ale ja mam Stringgrida a w nim w rows różne ilości nazwisk i imion w col 1 dalej jest suma pkt(col2) i miejsaca na wpisy pkt za kolejne rundy a ich może być od 5 do 15 za pół pkt mamy 0,5 pkt (Real) a jak to wpisze i chce sortować to musi 'wędrowa " nazwisko za punktami Mam nadzieje ze mnie rozumiesz? z zwycięstwo masz 1 pkt za przegraną 0 a za remis 0,5
if StringGrid1.Cells[0,J]>StringGrid1.Cells[0,J+1] then
begin
for X:=0 to StringGrid1.ColCount-1 do
begin
Tmp:=StringGrid1.Cells[X,J];
StringGrid1.Cells[X,J]:=StringGrid1.Cells[X,J+1];
StringGrid1.Cells[X,J+1]:=Tmp;
end;
end;
Naprawdę jesteś wielkim dziwakiem, po kiego wybierasz najgorsze rozwiązanie? Ba później pytasz o jeszcze gorsze.
Użyj najlepsze, czyli: TVirtualTreeView.
Przepraszam... czy ja to napiszłam o stringgrid ????? A jeszcze lepiej użyć: TVirtualTreeView lub TListView lub TStringGrid od najlepszego.
To moze pomożesz z tym Treeview?
Znasz sie na szachch? masz Turniej X w nim N zawodników którzy muszą zaistnieć w czyms jak tabela turnieju. Każdy turniej to X- rund (od 5 do 15 max) zatem w każdej komórce dla zawodnika muszą być nadpisywane rezultaty rund. Komasowanie ich lub jak ja (nieszczęśliwie) wymysliłem w każdej kolumnie do tego celu w StringGrid .... Poza tym najtrudniejsze dla mnie: jak dodawać wyniki rund gdzie grają pary zawodników aby każdy po rundzie otrzymał to co mu sie nalleży czyli: 1 pkt 0 pkt lub 0,5 i aby wyświetlał sie wynik (suma indywidualna) zawodnika w kolumnie np col2 Jak to zrobic ?
13th_Dragon pozwól że złożę Tobie i najbliższym najlepsze życzenia świąteczno- Noworoczne :) to chyba jedyne wyjście :) co do opisu to masz kawę na ławę nawet ktoś nie znajacy szachów ani kodeksy szachowego ani informatyki zrozumiałby bez "pudła" co pisze :)
Przykład z ListView:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Math;
type
TForm1 = class(TForm)
ListView1: TListView;
procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Desc: Boolean;
SortColumnIndex: Integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//zdarzenie OnColumnClick
procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
if SortColumnIndex <> Column.Index then //czy kliknieto tą samą kolumne co poprzednio
begin
SortColumnIndex:= Column.Index; //jezeli nie zapamietujemy numer kolumny
Desc:= False; //i ustawiamy sortowanie rosnace
end
else
Desc:= not Desc; //jezeli tak odwracamy sortowanie
ListView1.CustomSort(nil, Column.Index); //uruchamiamy sortowanie
end;
//zdarzenie OnCompare
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
case Data of //w data jest to co podalismy jako 2 paramtr proceury CustomSort a wiec w tym wypadku indeks kolumny
0: begin
//w kolumnie 1 (czyli index 0) sa nazwiska wiec porownujemy tekst
Compare:= CompareText(Item1.Caption, Item2.Caption);
end;
1: begin
//w kolumnie 2 (czyli index 1) sa liczby wiec porównujemy wartosci
Compare:= CompareValue(StrToFloat(Item1.SubItems[0]), StrToFloat(Item2.SubItems[0]));
end;
end;
if Desc then //gdy sortujemy w dół
Compare:= -Compare; //wynik porównania trzeba odwrocic
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Desc:= False; //inicjujemy wartosci zmiennych
SortColumnIndex:= 0;
ListView1.CustomSort(nil, SortColumnIndex); //uruchamiamy sortowanie to oczywiscie
//dopiero gdy w ListView będą dane (domyslnie beda posortowane rosnaco wg. nazwisk czyli kolumny 1 (indeks 0))
end;
end.
Wypada napisać dziekuje :)