Внешний вид сайта:

Как завершить строку, напечатанную в ComboBox

В этом примере показывается, как завершить часть строки, напечатанной в ComboBox. Код представляет обработчик события OnKeyPress для ComboBox.

Обратите внимание: Обработчик события OnKeyPress не работает в случае, когда пользователь нажимает клавишу Delete. Это событие должно перехватываться в обработчике событий OnKeyDown.

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char) ;
var
   Found: boolean;
   j,SelSt: Integer;
   TmpStr: string;
begin
   { Сначала нужно обработать нажатие клавиши, чтобы получить текущую строку }
   { Этот код требует, чтобы все элементы в списке были в верхнем регистре}
   if Key in ['a'..'z'] then Dec(Key,32) ; { Переводим все в верхний регистр! }
   with (Sender as TComboBox) do
   begin
     SelSt := SelStart;
     if (Key = Chr(vk_Back)) and (SelLength <> 0) then
      TmpStr := Copy(Text, 1, SelStart) + Copy(Text, SelLength + SelStart + 1, 255)

     else if Key = Chr(vk_Back) then {SelLength = 0}
      TmpStr := Copy(Text, 1, SelStart - 1) + Copy(Text, SelStart + 1, 255)
     else {Key in ['A'..'Z', etc]}
      TmpStr := Copy(Text, 1, SelStart) + Key + Copy(Text, SelLength + SelStart + 1, 255) ;
     if TmpStr = '' then Exit;
     { Обновить SelSt в текущей позиции }

     if (Key = Chr(vk_Back)) and (SelSt > 0) then Dec(SelSt)

     else if Key <> Chr(vk_Back) then Inc(SelSt) ;
     Key := #0; { указать, что клавиша была обработана }
     if SelSt = 0 then
     begin
       Text:= '';
       Exit;
     end;

    { Теперь, когда TmpStr напечатан в текущей позиции
     ищем соответствие }

     Found := False;
     for j := 1 to Items.Count do
       if Copy(Items[j - 1], 1,Length(TmpStr)) = TmpStr then
       begin
         Text := Items[j - 1]; { Обновить соответствие, если найдено }
         ItemIndex := j - 1;
         Found := True;
         Break;
       end;
     if Found then { Выделить конец строки }
     begin
       SelStart := SelSt;
       SelLength := Length(Text) - SelSt;
     end
     else Beep;
   end;
end;

Комментарии

Нет комментариев. Ваш будет первым!