Halli Hallo,
ich habe folgendes Problem. Ich habe ein ListView in dem jedes Item ein SubItem hat. Dazu habe ich ein Edit. Ich möchte nun, dass beim OnChange des Edit's jedes SubItem im ListView nach jedem einzelnen Wort aus dem Edit durchsucht wird und die höchste Übereinstimmung dann zurück gegeben wird. Hier ein Beispiel:
Caption SubItem-0
38745612 11380 L apple green
23049572 521EG ivory
04569242 11380 L deep black
Nun habe ich mir folgenden Code zurechtgebastelt ...
Code:
var Bestand: Double;
Ts : TStrings;
S,S2 : String;
I,I2 : LongInt;
Fnd : Integer;
begin
If Pos(' ',Form1.Barcode.Text) = 0 then DbItem := Form1.BarCode.Text
else
Begin
TS := TStringlist.Create;
S := Form1.BarCode.Text;
While Pos(' ',S) > 0 do
Begin
S2 := Copy(S,1,Pos(' ',S)-1);
Delete(S,1,Pos(' ',S));
TS.Add(UpperCase(S2));
end;
If length(S) > 0 then TS.Add(S);
For I := 0 to Form1.ArtikelView.Items.Count-1 do
Begin
Fnd := 0;
For I2 := 0 to TS.Count-1 do
Begin
If (I2 = 0) or (I2 = TS.Count) then
Begin
If Pos(Ts[I2],UpperCase(Form1.ArtikelView.Items[I].SubItems[0])) > 0 then Fnd := Fnd + 1;
end;
If (I2 > 0) and (I2 < TS.Count) then
Begin
If Pos(Ts[I2]+' ',UpperCase(Form1.ArtikelView.Items[I].SubItems[0])) > 0 then Fnd := Fnd + 1;
end;
end;
If Fnd = Ts.Count then
Begin
DbItem := Form1.ArtikelView.Items[i].Caption;
Break;
end;
end;
TS.Free;
end;
Das funktioniert allerdings nicht. Suche ich jetzt z.B. nach 11380 L black ..... krieg ich das Ergebnis 11380 L apple green. Eine einfach "if Pos(Form1.Barcode.Text,Form.ArtikelView.Items[i].SubItems[0]" kommt als Lösung leider nicht in Frage, da ich nicht sicher sein kann das die Sucheingabe exakt so eingegeben wird, wie der Artikel hinterlegt ist.
Ich hoffe auf eure Hilfe....
Vielen Dank, Patrick.
Niveau ist keine Cremè.