Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 357

/ вопрос открыт /

Здравствуйте уважаемые эксперты!
Подскажите, как получать Index подсвеченной строки в выпавшем списке компонента TComboBox при передвижении по этому списку курсора, до того как пользователь сделает выбор, т.е. до нажатия кнопки. Возможность редактирования в элементе ввода компонента должна сохраняться.

NickStNew Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: NickStNew (статус: Посетитель)
Вопрос отправлен: 26 февраля 2007, 13:59
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

Единственный способ, который я знаю - это сделать отрисовку вручну. Тогда в OnDrawIten вам будет приходить сообщение о необходимости перерисовать себя вы смотрите, у данного итема состояние не выделеное случайно.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 26 февраля 2007, 14:24
Оценка за ответ: 4

Комментарий к оценке: Index подсвеченной строки получается, но только если выбрать Style=csOwnerDrawFixed или csOwnerDawVariable. При этом не работает редактирование в строке ввода

Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, NickStNew!
Попробуйте так:см приложение.
Через таймер, запуск таймера когда ComboBox получает фокус и останов когда ComboBox его теряет. Interval = 100.
Если пользователь ничего не выбрал остается тот индекс который был до получения фокуса.
Удачи!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ESBPCSEdit, ESBPCSDbEdit, ESBPCSDbNumEdit, ExtCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. ComboBox1: TComboBox;
  12. Timer1: TTimer;
  13. procedure ComboBox1Enter(Sender: TObject);
  14. procedure Timer1Timer(Sender: TObject);
  15. procedure ComboBox1Exit(Sender: TObject);
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. var
  23. Form1: TForm1;
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.ComboBox1Enter(Sender: TObject);
  30. begin
  31. Timer1.Enabled:=true;
  32. end;
  33.  
  34. procedure TForm1.Timer1Timer(Sender: TObject);
  35. begin
  36. Caption:=IntToStr(ComboBox1.ItemIndex)
  37. end;
  38.  
  39. procedure TForm1.ComboBox1Exit(Sender: TObject);
  40. begin
  41. Timer1.Enabled:=false;
  42. end;
  43.  
  44. end.
  45.  


Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 26 февраля 2007, 17:23
Оценка за ответ: 5

Комментарий к оценке: Спасибо, все работает

Ответ #3. Отвечает эксперт: Шарайчук Сергей Олександрович

Здравствуйте, NickStNew!
Попробу написать код для событея ONChange, а Index получить попробуй следуйщим способом:
i:=ComboBox1.item.itemindex

Ответ отправил: Шарайчук Сергей Олександрович (статус: 2-ой класс)
Время отправки: 26 февраля 2007, 20:17
Оценка за ответ: 3

Комментарий к оценке: К сожелению ответ неточен. Событие OnChange при перемещении курсора (и подсвеченной строки) по выпавшему списку компонента TComboBox не вызывается

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.