Простое решение, которое Вы можете приспособить под Ваши требования.
Не забудьте установить свойство Sorted в True.
Добавьте переменную в секцию var Вашей формы:
var
lastKey: Word;
Поместите следующие строки в событие OnChange Вашего TCombobox:
procedure TForm1.AutoCompleteChange(Sender: TObject);
var
SearchStr: string;
retVal: integer;
begin
// копируем образец поиска
SearchStr := (Sender as TCombobox).Text;
// backspace: VK_BACK или $08
if lastKey = VK_BACK then
begin
retVal := (Sender as TCombobox).Perform(
CB_FINDSTRING, -1, LongInt(PChar(SearchStr)));
if retVal > CB_Err then
begin
(Sender as TCombobox).ItemIndex := retVal;
(Sender as TCombobox).SelStart := Length(SearchStr);
(Sender as TCombobox).SelLength :=
(Length((Sender as TCombobox).Text) - Length(SearchStr));
end; // retVal > CB_Err
end; // lastKey VK_BACK
// сбросим lastKey
lastKey := 0;
end;
Поместите следующие строки в событие OnKeyDown Вашего TCombobox:
procedure TForm1.AutoCompleteKeyDown(
Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
lastKey := Key;
end;
По материалам http://delphi.3000.com
|