Вниз
Скачать: CL | DM;

Вопрос по 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
1-70675
Maxuz
2002-07-09 01:26
2002.07.22
StatusBar


1-70764
Question
2002-07-09 09:36
2002.07.22
O Screen.DataModuleCount


3-70624
ize
2002-06-28 16:59
2002.07.22
помогите чайнику организовать поиск в таблице DBF (FoxPro)


1-70695
Дмитрий Селищев
2002-07-11 07:00
2002.07.22
Доступ к другому приложению.


3-70673
_dron_
2002-07-02 12:59
2002.07.22
Как сделать экспорт таблицы из базы Interbase в dbase, paradox




   Наверх