Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
ВнизВопрос по TComboBox.SetFocus. Найти похожие ветки
← →
Дельфятник (2002-07-10 09:48) [0]Есть у меня 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:01) [1]На ComboBoxEnter фокус и так на него установлен.
На событии OnEnter выдавать SetFocus не рекомендуется.
В крайнем случае, после его заполнения, можно послать в очередь пользовательское сообщение родителю ComboBox, с требованием установить фокус на ComboBox.
IMHO, такой интерфейсный подход (заполнять по обращению) - неумный.
Лучше по условиям задачи спрогнозировать обращение к ComboBox и загрузить его ДО попадания на него фокуса
← →
Дельфятник (2002-07-10 11:35) [2]У меня в программе есть TRadioGroup, по одному из пунктов которого появляется (Visible:=True) этот TComboBox. Я отлавливаю этот случай и делаю ComboBox1.SetFocus, что приводит к срабатыванию ComboBox1Enter. Вы хотите сказать, что вместо ComboBox1.SetFocus лучше писать ComboBox1Enter(ComboBox1)? Попробую.
А вот по поводу "послать в очередь пользовательское сообщение родителю ComboBox, с требованием установить фокус на ComboBox" - как это сделать?
← →
Игорь Шевченко (2002-07-10 11:39) [3]
>Вы хотите сказать, что вместо 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:41) [4]В общем, по RadioGroupClick"у я перед ComboBox1.SetFocus поставил непосредственный вызов ComboBox1Enter и всё заработало. Спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c