Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
1-70683
AFROLOV
2002-07-10 12:35
2002.07.22
Как подовить вывод всех сообщений об ошибках?


3-70653
Roughneck
2002-06-20 11:00
2002.07.22
Компонент - запрос в фоновом режиме


14-70916
kull
2002-06-26 11:04
2002.07.22
Hot-key и ShortCut пересекаются!


3-70583
Muhin-av
2002-06-28 12:09
2002.07.22
Помогите разобраться с суммированием по столбцу


1-70811
Malax
2002-07-10 15:44
2002.07.22
Мышь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский