![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по 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 и загрузить его ДО попадания на него фокуса