Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выпадающий список в ComboBox 
:(
    Опции темы
Albinos_x
Дата 24.4.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Пример:

1. введено 'Alninos_x|'
2. переходим в позицию 'Al|ninos_x' или 'Aln|inos_x'
3. нажимием #Del или #BackSpace cooтветственно
4. получаем 'Al|inos_x'
5. нажимаем 'b'
6. получаем ' Alb|inos_x'

где | - позиция курсора

PS: в принципе, выше есть пример.
Просто, в проге хочу учесть все возможные действия пользователя и совместить с удобством работы в ней


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.4.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Делаем упомянутый выше обработчик на нажатие клавиши...
и изменяем процедуру:
Код

procedure TForm1.ComboBox1Change(Sender: TObject);
var
 s:string;
 j:integer;
begin
    s:=ComboBox1.Text;
    ComboBox1.Items.Clear;
    j:=-1;
    for i:=0 to ListBox1.Items.Count-1 do
     begin
      if Copy(ListBox1.Items[i], 1, Length(s)) = s
       then
        begin
         ComboBox1.Items.Add(ListBox1.Items[i]);
         if ListBox1.Items[i] = s
          then
           j:=ComboBox1.Items.Count-1;
        end;
      Application.ProcessMessages
     end;
    ComboBox1.ItemIndex:=j;
    if flag
     then
      ComboBox1.SelStart:=Length(s)
     else
      flag:=true;
   end
end;

PM   Вверх
Albinos_x
Дата 24.4.2005, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



В этом случае курсор перемещяется в начало текста... что в принципе не отличается от других вариантов...

Ладно сделаю пока так как есть...
Вот что получилось:


Код
...
var
  List : TStringList;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
...
List:=TStringList.Create;
ComboBox1.Tag:=1:
...
end;

....

procedure TForm1.ComboBox1Enter(Sender: TObject);
begin
IniFilter(Table1,inttostr(ComboBox1.Tag));
IniList(Table1, List);
ComboBox1.Items:=List;
end;

procedure FilterComboList(Combo: TComboBox; L:TStringList);
var i, k:word;
begin
k:=L.Count;
if k<>0 then
   begin
   Combo.Items.Clear;
   for i:=0 to (k-1) do
      begin
      if AnsiLowerCase(Copy(L.Strings[i], 1, Length(Combo.Text))) = AnsiLowerCase(Combo.Text) then
         Combo.Items.Add(L.Strings[i]);
      Application.ProcessMessages;
      end;
   Combo.SelStart:=Length(Combo.Text);
   end;
end;
...
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
FilterComboList(ComboBox1, List);
end;
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.4.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



О! Вспомнил.... Вроде так получится

Код

procedure TForm1.ComboBox1Change(Sender: TObject);
var
 s:string;
 j,k:integer;
begin
    s:=ComboBox1.Text;
    k:=ComboBox1.SelStart;
    ComboBox1.Items.Clear;
    j:=-1;
    for i:=0 to ListBox1.Items.Count-1 do
     begin
      if Copy(ListBox1.Items[i], 1, Length(s)) = s
       then
        begin
         ComboBox1.Items.Add(ListBox1.Items[i]);
         if ListBox1.Items[i] = s
          then
           j:=ComboBox1.Items.Count-1;
        end;
      Application.ProcessMessages
     end;
    ComboBox1.ItemIndex:=j;
    if flag
     then
      ComboBox1.SelStart:=Length(s)
     else
      ComboBox1.SelStart:=k;
      flag:=true;
   end
end;


Да, так работает... курсор сохраняет позицию...
Добавлено @ 13:20
Кстати, а почему ты не изменяешь ItemIndex? У меня без него нельзя было выбрать корректно элемент из списка... smile
PM   Вверх
Albinos_x
Дата 24.4.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Ок!!! Всё работает!!!

Внес изменения в
Код

procedure FilterComboList(Combo: TComboBox; L:TStringList);
var i, k:word;
    pos:word;
    j: integer;
begin
pos:=Combo.SelStart;
k:=L.Count;
j:=-1;
if k<>0 then
   begin
   Combo.Items.Clear;
   for i:=0 to (k-1) do
      begin
      if AnsiLowerCase(Copy(L.Strings[i], 1, Length(Combo.Text))) = AnsiLowerCase(Combo.Text) then
         begin
         Combo.Items.Add(L.Strings[i]);
         if L.Strings[i] = Combo.Text then
            j:=Combo.Items.Count-1;
         end;
      Application.ProcessMessages;
      end;
   Combo.ItemIndex:=j;
   Combo.SelStart:=pos;
   end;
end;


Цитата
Кстати, а почему ты не изменяешь ItemIndex? У меня без него нельзя было выбрать корректно элемент из списка...


Не заметил косяк, увлёкся фильтрацией и курсором... Спасибо за замечание!... smile

Спавибо за оказанную помощь!!! smile
Добавлено @ 14:32
Pakshin A. S.
+1


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.4.2005, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Не за что... рад немного подсобить... обращайся, если что не так пойдет... smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.