|
Вопрос # 357/ вопрос открыт / |
|
Здравствуйте уважаемые эксперты!
Подскажите, как получать Index подсвеченной строки в выпавшем списке компонента TComboBox при передвижении по этому списку курсора, до того как пользователь сделает выбор, т.е. до нажатия кнопки. Возможность редактирования в элементе ввода компонента должна сохраняться.
 |
Вопрос задал: NickStNew (статус: Посетитель)
Вопрос отправлен: 26 февраля 2007, 13:59
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Вадим К
Единственный способ, который я знаю - это сделать отрисовку вручну. Тогда в OnDrawIten вам будет приходить сообщение о необходимости перерисовать себя вы смотрите, у данного итема состояние не выделеное случайно.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 26 февраля 2007, 14:24
Оценка за ответ: 4
Комментарий к оценке: Index подсвеченной строки получается, но только если выбрать Style=csOwnerDrawFixed или csOwnerDawVariable. При этом не работает редактирование в строке ввода
|
Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, NickStNew!
Попробуйте так:см приложение.
Через таймер, запуск таймера когда ComboBox получает фокус и останов когда ComboBox его теряет. Interval = 100.
Если пользователь ничего не выбрал остается тот индекс который был до получения фокуса.
Удачи!
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ESBPCSEdit, ESBPCSDbEdit, ESBPCSDbNumEdit, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- ComboBox1: TComboBox;
- Timer1: TTimer;
- procedure ComboBox1Enter(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure ComboBox1Exit(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.ComboBox1Enter(Sender: TObject);
- begin
- Timer1.Enabled:=true;
- end;
-
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- Caption:=IntToStr(ComboBox1.ItemIndex)
- end;
-
- procedure TForm1.ComboBox1Exit(Sender: TObject);
- begin
- Timer1.Enabled:=false;
- end;
-
- end.
-
 |
Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 26 февраля 2007, 17:23
Оценка за ответ: 5
Комментарий к оценке: Спасибо, все работает
|
Ответ #3. Отвечает эксперт: Шарайчук Сергей Олександрович
Здравствуйте, NickStNew!
Попробу написать код для событея ONChange, а Index получить попробуй следуйщим способом:
i:=ComboBox1.item.itemindex
 |
Ответ отправил: Шарайчук Сергей Олександрович (статус: 2-ой класс)
Время отправки: 26 февраля 2007, 20:17
Оценка за ответ: 3
Комментарий к оценке: К сожелению ответ неточен. Событие OnChange при перемещении курсора (и подсвеченной строки) по выпавшему списку компонента TComboBox не вызывается
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|