type PStringArray = array of String; // before you use the method, // the objects you will search have to be sort ascending function BinarySearch(Strs: PStringArray; Count: Integer; const str: String): Integer; var Left, Right, Middle: Integer; ResultValue: Integer; begin Left := 0; Right := pred(Count); while (Left <= Right) do begin Middle := (Left + Right) div 2; ResultValue := CompareText(Strs[Middle], str); if (ResultValue = 0) then begin Result := Middle; Exit; end else if (ResultValue < 0)then Left := Middle + 1 else Right := Middle - 1; end; Result := -1; end; procedure TForm1.Button1Click(Sender: TObject); var str: String; value: Integer; i: Integer; PStringArr: PStringArray; begin str := Edit1.Text; SetLength(PStringArr, ListBox1.Items.Count); for i := 0 to ListBox1.Items.Count - 1 do begin PStringArr[i] := ListBox1.Items[i]; end; //value := SequenSearch(PStringArr, ListBox1.Items.Count, str); value := BinarySearch(PStringArr, ListBox1.Items.Count, str); if value <> -1 then ShowMessage('Congregate you! You find it') else ShowMessage('Sorry, you don''t find it!'); end;