Google как редактирование/комбинация управляет для Delphi?

Все, вероятно, знают то, что я имею в виду, но разъяснить, что управление должно было бы:

  • Запустите событие, когда пользователь отредактирует текст. Событие обеспечило бы SuggestionList: TStrings, которого Вы могли заполнить соответствиями/предложениями.
  • если SuggestionList не пуст, выпадающее должно появиться.
  • В отличие от комбинации, управление не должно пытаться автоматически избранное/автоматическое завершенный или иначе влиять на редактирование.

Так, есть ли управление редактированием/комбинацией Delphi, которое работает как этот?

17
задан kapa 18 May 2012 в 17:31
поделиться

2 ответа

Вы можете использовать стандартную системный вызов Unix , как OS.Fork () . FORK () создаст новый процесс с тем же сценарием. В новом процессе он вернется 0, в то время как в старом процессе он вернет идентификатор процесса нового процесса.

child_pid = os.fork()
if child_pid == 0:
  print "New proc"
else:
  print "Old proc"

Для библиотеки более высокого уровня, которая обеспечивает многопроцессорную поддержку, которая обеспечивает портативную абстракцию для использования нескольких процессов, модуль модуль . Есть статья на IBM DeveloperWorks, Многопроцессора с Python , с кратком введением в обе методы.

-121--1029730-

Используйте функцию AutoCollition , встроенный для всех управлений редактирования Windows.

Во-первых, заполните ваши TStrings , однако вы хотите. Затем используйте GetoleStrings , чтобы создать TSTringsAdapter , чтобы обернуть его. (Адаптер не претендует на право собственности на объект TStrings , поэтому вы должны убедиться, что вы не уничтожаете его, пока адаптер все еще живет.) Адаптер дает вам интерфейс , который вам понадобится, потому что функция автозаполнения требует интерфейса IENUMSTRING , чтобы обеспечить соответствия завершенности. Позвоните _newenum для этого.

Далее вызовите CoCreateInstance для создания объекта Iautocomplete . Позвоните своему методу INIT , чтобы связать его с рукояткой окна вашего управления редактированием. Если вы используете поле комбо, затем отправьте его сообщение CBEM_GETEDITCONTROL , чтобы найти базовое окно редактирования.

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

Вы говорите, что не хотите автозаполнения, но в ОС терминологии, я думаю, что вы действительно не хотите, называется Auto Papend , где остаток строки вводится в поле редактирования Автоматически как типы пользователей, но выбраны так, что дальнейшее набрав будет перезаписать его, и пользователю необходимо удалить избыток текста, если требуемое значение короче одного из матчей.

Также есть Авто рекомендуется , что отображает раскрывающийся список предложений.

Вы можете включить либо или оба варианта. Вам не нужно фильтровать список предложений самостоятельно; Автозаполненный объект фильтрует список IENUMSTRING сама по себе.

24
ответ дан 30 November 2019 в 12:13
поделиться

Можно использовать стандартную TComboBox и библиотеку faststrings (для функции stringMatches()).

procedure TForm1.cbChange(Sender: TObject);
var
  s:Integer;
  tmpstr:string;
begin
  //suggestions: tstringlist
  cb.AutoComplete:=false;
  tmpstr:=cb.Text;
  cb.Items.Clear;
  for s:=0 to suggestions.Count - 1 do
    if StringMatches(suggestions[s],cb.Text+'*') then
      cb.Items.Add(suggestions[s]);
  cb.DroppedDown:=(cb.Items.Count<>0) and (Length(cb.Text)<>0);
  cb.Text:=tmpstr;
  cb.SelStart:=Length(cb.Text)
end;
4
ответ дан 30 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: