-
ддень. стоит задача, набирая в комбобоксе ComboBox часть строки, перезаписывать его строки по набранному значению в середине, конце, начале исходного списка.Т.е. встроенный фильтр с поиском по началу строк не подходит. Исходный список находится в ComboBox1.items Вот кусок кода, надеюсь понятный:
procedure TForm1.ComboBoxKeyPress(Sender: TObject; var Key: Char);
begin
if integer(Key)>32 then
filladress(key);
end;
procedure TForm1.filladress(var Key: Char);
begin
if length(ComboBox.Text)>1 then begin
fillComboboxText;
addadress;
setDropDown;
end;
end;
procedure TForm1.fillComboboxText;
begin
while ComboBox.Items.Count>0 do
ComboBox.Items.Delete(0);
end;
procedure TForm1.addadress;
var i:integer;
begin
ComboBox.Items.BeginUpdate;
for i:=0 to ComboBox1.Items.Count-1 do begin
if AnsiContainsText(ComboBox1.Items[i],ComboBox.Text) then
ComboBox.Items.Add(ComboBox1.Items[i]);
end;
ComboBox.Items.EndUpdate;
end;
procedure TForm1.setDropDown;
begin
if ComboBox.Items.Count>1 then begin
ComboBox.DroppedDown:=false;
ComboBox.DroppedDown:=true;
end;
end; В принципе код работает.проблема в том, что постоянно меняется ComboBox.Text непонятным образом. Если кто решал подобную задачу, поделитесь плиз опытом.
-
> В принципе код работает.проблема в том, что постоянно меняется > ComboBox.Text непонятным образом
Значит установи порядок. Например, выбирай первый элемент из списка: ...
ComboBox.ItemIndex := 0;
ComboBox.Items.EndUpdate;
-
> Значит установи порядок. Например, выбирай первый элемент > из списка:
нет, это не поможет. видимо дело в том, что procedure TForm1.ComboBoxKeyPress(Sender: TObject; var Key: Char); работает так, что при выходе из нее var Key: Char обязательно присваивается буферу ComboBox.Text, причем добавляется в его начало. При этом если ComboBox.Text был выделен, а так и есть по умолчанию после действий по добавлению строк, то буфер перезаписывается, вот и получается что часть набранной фразы пропадает. Думаю, с этим можно бороться только написав потомка TComboBox и переопределив событие ComboBoxKeyPress. Как думаете?
-
> procedure TForm1.ComboBoxKeyPress(Sender: TObject; var Key: > Char);работает так, что при выходе из нее var Key: Char > обязательно присваивается буферу ComboBox.Text, причем добавляется > в его начало
Коль ты Кеy в обработчике уже взял, то в обраблтчике можещь присвоить Key := #0. Однако в TForm1.filladress(var Key: Char); надо учесть, что последний символ, переданный в Key, ешё отсутствует в ComboBox.Text и тебе самому придется определить, что же должно было там оказаться
-
да ЮЮ, спасибо. получилось боле мене. не идеально, но работать можно)
|