Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по TComboBox.SetFocus. [D5, Win2k]


Дельфятник ©   (2002-07-10 09:48:00) 

Есть у меня ComboBox, который заполняется не при загрузке программы, а когда к нему происходит первое обращение (это чтобы программа быстрее загружалась).
procedure TInputForm.ComboBox1Enter(Sender: TObject);
var Cur: TCursor;
begin
if ComboBox1.Items.Count=0 then
begin
Cur:=Screen.Cursor;
Screen.Cursor:=crHourGlass;
// тут идёт заполнение
Screen.Cursor:=Cur;
Beep;
ComboBox1.SetFocus
end
end;

Но почему-то после заполнения кусор не ставится в ComboBox1, а куда-то девается. Как его туда поставить?


Дельфятник   (2002-07-10 11:41:00) [1]

В общем, по RadioGroupClick"у я перед ComboBox1.SetFocus поставил непосредственный вызов ComboBox1Enter и всё заработало. Спасибо.


Игорь Шевченко   (2002-07-10 11:39:00) [2]


>Вы хотите сказать, что вместо ComboBox1.SetFocus лучше писать >ComboBox1Enter(ComboBox1)? Попробую.


Этого я не хочу сказать :-)

Я хочу сказать, что по пункту в RadioGroup и загружать ComboBox :-)

Как послать сообщение:

const
UM_COMBOBOXLOADED = WM_USER + 777;

procedure ComboBox1Load (...)
begin
...
PostMessage(ComboBox1.Parent.Handle, UM_COMBOBOXLOADED, 0, 0);
end;

и соответсвенно
procedure TComboBoxParentControl.UmComboBoxLoaded(var Message : TMessage); message UM_COMBOBOXLOADED;

procedure TComboBoxParentControl.UmComboBoxLoaded(var Message : TMessage);
begin
ComboBox1.SetFocus();
end;

С уважением,


Дельфятник   (2002-07-10 11:35:00) [3]

У меня в программе есть TRadioGroup, по одному из пунктов которого появляется (Visible:=True) этот TComboBox. Я отлавливаю этот случай и делаю ComboBox1.SetFocus, что приводит к срабатыванию ComboBox1Enter. Вы хотите сказать, что вместо ComboBox1.SetFocus лучше писать ComboBox1Enter(ComboBox1)? Попробую.

А вот по поводу "послать в очередь пользовательское сообщение родителю ComboBox, с требованием установить фокус на ComboBox" - как это сделать?


Игорь Шевченко   (2002-07-10 11:01:00) [4]

На ComboBoxEnter фокус и так на него установлен.
На событии OnEnter выдавать SetFocus не рекомендуется.

В крайнем случае, после его заполнения, можно послать в очередь пользовательское сообщение родителю ComboBox, с требованием установить фокус на ComboBox.

IMHO, такой интерфейсный подход (заполнять по обращению) - неумный.
Лучше по условиям задачи спрогнозировать обращение к ComboBox и загрузить его ДО попадания на него фокуса


Наверх

Титульная страница Поиск, карта сайта Написать письмо