Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: 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 вся ветка

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
3-70641
Дмитрий757567
2002-07-01 17:58
2002.07.22
SP_WHO


14-70895
Роман Василенко
2002-06-21 10:39
2002.07.22
Ищу братьев по разуму (Advantage TDataset Descendant)


1-70721
Prog_mail
2002-07-09 11:52
2002.07.22
Как сделать интерфейс XP


3-70619
Боева Наталья
2002-07-01 07:23
2002.07.22
Обновление данных


1-70827
Andrew_k
2002-07-02 11:09
2002.07.22
трабл с ParamStr!!! Хелп, плз!!!