Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Подстановка в TEdit

Delphi , Компоненты и Классы , TEdit

Подстановка в TEdit


Последние новости от Microsoft: Билл Гейтс привезет 10 октября в Москву последнюю разработку своей компании - партию картриджей для Dendy и Super Nintendo с новой версией операционной системы Windows и пакета MSOffice на русском языке, и лично будет продавать их на Митинском радиорынке (место G9) под усиленной охраной ОМОН.


var
  words: TStringList;

procedure TForm1.FormCreate(Sender: TObject);
begin
  words := TStringList.Create;
  words.Sorted := true;
  words.Add('one');
  words.Add('two');
  words.Add('four');
  words.Add('five');
  words.Add('six');
  words.Add('seven');
  words.Add('eight');
  words.Add('nine');
  words.Add('ten');
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
  chars: set of char = ['A'..'Z', 'a'..'z', 'А'..'Я', 'а'..'я'];
var
  w: string;
  i: integer;
  s: string;
  full: string;
  SelSt: integer;
begin
  case Key of
    VK_RETURN, VK_TAB:
    begin
      Edit1.SelStart := Edit1.SelStart + Edit1.SelLength;
      Edit1.SelLength := 0;
      Exit;
    end;
    VK_DELETE, VK_BACK:
    begin
      Edit1.ClearSelection;
      Exit;
    end;
  end;
  s := Edit1.Text;
  SelSt := Edit1.SelStart;
  i := SelSt;
  if (length(s) > i) and (s[i+1] in chars) then
    Exit;
  w := '';
  while (i >= 1) and (s[i] in chars) do
  begin
    w := s[i] + w;
    dec(i);
  end;
  if length(w) <= 0 then
    Exit;
  words.Find(w, i);
  if (i >= 0) and (UpperCase(copy(words[i], 1,
  length(w))) = UpperCase(w)) then
  begin
    full := words[i];
    insert(copy(full, length(w) + 1, length(full)), s, SelSt + 1);
    Edit1.Text := s;
    Edit1.SelStart := SelSt;
    Edit1.SelLength := length(full) - length(w);
  end;
end;

Код, который вы предоставили, это приложение на Delphi, использующее компонент TEdit для имитации автодополнения слов на основе предопределенного списка слов.

Вот как работает код:

  1. Когда форма создается, TStringList, называемый words, инициализируется 10 английскими словами (от одного до десяти). Свойство Sorted установлено в True, что означает, что список будет отсортирован алфавитно.
  2. В процедуре Edit1KeyUp код проверяет, нажата ли клавиша Enter или Tab. Если так, то курсор перемещается к концу выбранного текста и выбор очищается.
  3. Если пользователь нажимает клавишу Delete или Backspace, код очищает выбор и выходит.
  4. Для других клавиш код извлекает текущий символ в позиции курсора и проверяет, является ли он буквой (либо заглавной, либо строчной). Если нет, то код выходит.
  5. Если символ является буквой, код конструирует слово, перемещаясь назад от позиции курсора до тех пор, пока не найдет не-буквенный символ или не дойдет до начала текста.
  6. Затем код ищет это слово в списке words и, если его находит, вставляет соответствующее полное слово в позицию курсора.

Альтернативное решение:

Вместо ручного конструирования слова и поиска его в списке можно использовать встроенную функциональность автодополнения Delphi, предоставляемую компонентом TAutoComplete. Это сделает ваш код более эффективным и проще для поддержки.

Вы также можете добавить дополнительные функции к вашему системе автодополнения, такие как:

  • Независимость от регистра
  • Поддержка нескольких языков
  • Возможность фильтровать слова, не совпадающие с префиксом
  • Сuggestions для неоконченных слов

Вот пример реализации этого с помощью TAutoComplete:

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  AutoComp: TAutoComplete;
begin
  AutoComp := TAutoComplete.Create(nil);
  try
    AutoComp.AutoCompleteList := words;
    AutoComp.AutoCompleteEdit := Edit1;
    if AutoComp.DoAutoComplete then
      Exit;
  finally
    FreeAndNil(AutoComp);
  end;
end;

В этом коде создается компонент TAutoComplete и устанавливаются его свойства для использования списка words как источника автодополнения и контрола Edit1 как целевого для завершенного текста. Метод DoAutoComplete вызывается для выполнения фактического операции автодополнения. Если пользователь нажимает Enter после выбора предложения автодополнения, код выходит без выполнения дальнейших инструкций.

В статье описывается подстановка текста в поле ввода TEdit, используя список строк и выполняемая обработка на основе вводимых символов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:53:38/0.0036230087280273/0