Delphi sortowanie w 2 listboxach z przemieszczaniem się itemów

0

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 ?

0
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.

0

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ą.

0

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

0
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.

0

Przepraszam... czy ja to napiszłam o stringgrid ????? A jeszcze lepiej użyć: TVirtualTreeView lub TListView lub TStringGrid od najlepszego.

0

To moze pomożesz z tym Treeview?

0

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 ?

0

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

2

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.
0

Wypada napisać dziekuje :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1