Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Delphi 6 Enterprise Update pack 2 + WinXP SP1


Автор: Alex 24.2.2005, 00:29
Delphi 6 Enterprise Update pack 2 + WinXP SP1 
В Delphi 7 не замечено
Если в обычном TListBox включить AutoComplete:=True, то, согласно справке (и исходникам) когда я нажимаю в нем алфавитно-цифровые клавиши, он должен "искать" строку, которая начинается с введенных символов. (см. procedure TCustomListBox.KeyPress) Но, если в списке есть две строки начинающиеся с одного символа -- фокус устанавливается всегда на ВТОРУЮ. 
Думаю, дело в том, что после "поиска" строки методами VCL, срабатывет также стандартный поиск "виндовсовского" контрола List Box. Вроде-бы для предотвращения этого в указанной TCustomListBoxKeyPress есть следующие строки:
Код
if not Ord(Key) in [VK_RETURN, VK_BACK, VK_ESCAPE] then
      Key := #0;  // Clear so that the listbox's default search mechanism is disabled

Но они почему-то не срабатывают.
Если же отключить AutoComplete, то работает только стандарный "поиск" контрола Windows и все в порядке. Но искать он в отличие от TListBox умеет только по первой букве. :-(

Решение: Написал потомка от TCustomListBox чтобы не править VCL
Код

procedure TMyListBox.KeyPress(var Key: Char);
begin
.....
    inherited KeyPress(Key);
  Key:=#0;
.....
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)