Hallo.
Die Sortierung innerhalb der ListBox ist ja immer noch nicht gelöst. Im Array muss zur Bestimmung der Ordnungszahl einer Karte eine lineare Suche erfolgen. Hier noch eine Alternative. Die Ordnungszahl wird über eine Funktion StrToValue() bestimmt, die an verschiedene Regeln angepasst werden kann.
Delphi-Quellcode:
function CompareInteger(i1, i2: Integer): Integer;
begin
if i1 < i2 then Result := -1 else
if i1 > i2 then Result := 1 else
Result := 0;
end;
function StrToValue(name: String): Integer;
const
FARBEN = '.KA.HE.PI.KR.';
WERTE = '.7.8.9.D.K.10.A.';
begin
name := Uppercase(name);
Result := Pos(Copy(name, 1, 2), FARBEN) shl 8
+ Pos(Copy(name, 3, 2), WERTE);
end;
function CustomCompare(sl: TStringList; index1, index2: Integer): Integer;
begin
Result := CompareInteger(StrToValue(sl[index1]), StrToValue(sl[index2]));
end;
procedure SortValues(lb: TListBox);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Assign(lb.Items);
sl.CustomSort(CustomCompare);
lb.Items.Assign(sl);
sl.Free;
end;
procedure TDemoForm.SortButtonClick(Sender: TObject);
begin
ListBox.Items.CommaText := 'krK,kr7,kaA,he9,piD';
SortValues(ListBox);
ShowMessage(ListBox.Items.Text);
end;
Viel Spaß beim Analysieren
marabu