![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте! 
		
	
		
		
		
		
		
	
		
		
	
	
	Есть такой компонент, как ComboBox. Если его свойство AutoComplete = true, то он "подбирает" из списка его строк те, которые НАЧИНАЮТСЯ с текста, вводимого пользователем в поле редактирования. Нельзя ли сделать, чтобы компонент подбирал строки, которые СОДЕРЖАТ (необязательно - в начале) текст, вводимый пользователем?  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Можно сделать всё 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	  Код: 
	var
  SList: TStringList;
...
function CBFilter(AText: String): TStringList;
var
  I: LongInt;
  SL: TStringList;
begin
  SL := TStringList.Create;
  for I := 0 to SList.Count - 1 do
    if Pos(AnsiUpperCase(AText), AnsiUpperCase(SList[i])) > 0 then
      SL.Add(SList[i]);
  Result := SL;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Edit1.Text <> '' then
    ComboBox1.Items := CBFilter(Edit1.Text)
  else
    ComboBox1.Items := SList;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
  I: LongInt;
begin
  SList := TStringList.Create;
  for I := 0 to ComboBox1.Items.Count - 1 do
    SList.Add(ComboBox1.Items[i]);
end; | 
| Этот пользователь сказал Спасибо Kailon за это полезное сообщение: | ||
 
Cafabuiter (05.05.2022)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Спасибо за ответ! Но, судя по Вашему коду, это решение использует два экранных элемента: TEdit и TComboBox. То есть, ComboBox фильтруется используя строку,вводимую в Edit. Я же хотел обойтись одним ComboBox.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Делал подобнцую штуку. Только так именно был поиск с начала строки, т.к. по результатам поиска в поле редактирования ComboBox вписвывася текст найденной строки и делалось выделение (select) текста после найденного отрезка. Как результат, при наборе с клавиатуры следующего символа происходила замена "хвоста" на введенный символ и поиск повторялся. 
		
	
		
		
		
		
		
		
			В твоем случае не понятно что выделять. Тут действительно можно только отфильтровать выпадающий список. Код: 
	uses System.StrUtils;
procedure TForm1.InitCbDropList;
begin
  ComboBox1.Items.Clear;
  ComboBox1.Items.Add('Item1');
...
  ComboBox1.Items.Add('ItemN');
end;
procedure TForm1.ComboBox1Change(Sender : TObject);
var
  I : Integer;
  SL : TStringList;
begin
  If ComboBox1.Text = '' 
    Then InitCbDropList
    Else
      Begin
        SL := TStringList.Create;
       Try
         For I := 0 To ComboBox1.ITems.Count-1 Do
           If ContainsText(ComboBox1.ITems[i],ComboBox1.Text) Then
             SL.Add(ComboBox1.ITems[i]);
        ComboBox1.Items.Assign(SL);
       Finally
         SL.Free;
       End;
      End;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  InitCbDropList;
end;Последний раз редактировалось lmikle, 06.05.2022 в 22:35.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.Text <> '' then
    ComboBox1.Items := CBFilter(ComboBox1.Text)
  else
    ComboBox1.Items := SList;
end;
  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну да, обо всё это я уже споткнулся. 
		
	
		
		
		
		
		
	
		
		
	
	
	Теперь пытаюсь делать некий эрзац-комбобокс: новый компонент, состоящий из TEdit и TList (возможно, вместо TList - TMemo), всё это - на TPanel. Будет некий исходный набор строк TStringList, из которого, по мере ввода текста в TEdit, при помощи Pos() будут подбираться и вноситься в TList подходящие строки. Собранная на скорую руку пара из TEdit и TList работает нужным мне образом. Теперь нужно наладить их правильное взаимодействие. Для этого и делаю компонент. Если получится что дельное - отпишусь.  |