ComboBox с поиском по возрастанию
Нужно сделать так, чтобы в ComboBox при вводе символов работал поиск по возрастанию? В настоящее время в ComboBox используется только первый символ, но что делать, если несколько элементов списка начинаются с одной буквы? ComboBox ведет себя не так, как хотелось бы.
Чтобы это реализовать, создайте новый ComboBox, унаследованный от TCustomComboBox и измените его событие Change всего в нескольких строках:
{...}
protected
procedure Change; override;
{...}
procedure TExtComboBox.Change;
var
str: String;
Index: Integer;
begin
inherited Change;
str := Text;
if (FLastKey = VK_DELETE) or (FLastKey = VK_BACK) then
begin
SelStart := Length(str);
SelLength := 0;
Exit;
end; { попытаемся найти самый близкий соответствующий элемент }
Index := Perform(CB_FINDSTRING, -1, LPARAM(str)); if Index <> CB_ERR then
begin
ItemIndex := Index;
SelStart := Length(str);
SelLength := Length(Items[Index]) - SelStart;
end
else Text := str; { вызываем стандартное событие }
if Assigned(FOnChange) then FOnChange(Self);
end;
|