[delphi] Form.show и фокус

milochka11

Если в делфях вызвать Form.show
причем на форме есть некоторые компоненты,фокус на чем будет,на форме или на какой ни будь компоненте?

yolki

на дефолтной.
SetFocus пользуй

milochka11

а если нет дефолтной компоненты и SetFocus не юзается,но форма эта юзалась до этого?
кстати почему может следующее происходить :
на все компоненты на форме и на саму форму сделан обработчик FormKeyDown
в котором при нажатии F4 выполняется следующая строка ComboBox1.SetFocus.
Дебагером смотрел,до строки доходит,а фокус не устанавливается.:(
где я туплю?

yolki

На форме: Комбобокс, кнопка, чекбокс
у всех на KeyDown стоит обработчик:

procedure TForm1.CheckBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_F4 then ComboBox1.SetFocus;
end;
Всё работает.
D7, Win2003Server
Что занчит форма юзалась? Show/Hide? Activate/Close?

milochka11


procedure TLoadingForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift=[ssAlt]) and
Key=Ord('x'or(Key=Ord('X'or(Key=Ord('÷'or(Key=Ord('×' then
LoadingExitButton.Click;
case key of
VK_F3 : LoadingFilterButton.Click;
VK_F4 : LoadingBox.SetFocus;
end;
end;
Сначала фокус на Боксе,потом жму F3
открывается другая форма,ета не скрывается,а потом последняя скрывается,и вроде делается Form.show
сколько не жми F4 управление Боксу не передается,притом кнопки нормально пашут

yolki

Поставь Form.KeyPreview в True

milochka11

ты не понимаешь,keydown срабатывает,код кнопки правилный передается,просто фокус не устанавливается почему то

yolki

Некоторым контролам не положено фокус устанавлвать - меткам например. хотя в таком случае у них метода .SetFocus нет..
LoadingBox - это точно комбобокс?
У меня всё работает.
На форме два мемо, кнопка, радиокнопка, чекбокс, комбобокс
у формы стоит .KeyPreview в True, обработчик такой же, как указан выше.
при нажатии F4 происходит перенос фокуса на комбобокс.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_F3 : Button1.Click;
VK_F4 : ComboBox1.SetFocus;
end;
end;

procedure TForm1.ComboBox1Enter(Sender: TObject);
begin
Memo1.Lines.Add('Òèïà âîøëè');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Click!');
end;

Для отладки сделай обработчик OnEnter у комбобокса - может, поможет.

milochka11

Я делал очень интересную вещь я в KeyDown в конце дописавал примерно следующее
if not LoadingBox.Focused then
<какая либо не значащая строка>
так вот,проверял в дебагере,он туда не заходил,на ету строку,несмотря на то,что в case строчка LoadingBox.SetFocus прорабатывалась.
И еще одня интересная деталь.
Я скрывал форму на которой комбобокс а потом снова показывал и фокус оказывался на Боксе.У меня такое ощущения,что фокус то на Бокс переводится,но почему то не работает =)
хотя хз,мож он где по дороге застревает

gopnik1994

маза ты где-то перемудрил с фокусами и твой фокус перескакивает по какому-нть событию в другое место..

milochka11

Я вот и думаю,где бы ето могло быть
Кроме форм шоу а потом хайд ничего не делается
и строка,где фокус на бокс ставится выполняется,а в следующей строке на боксе уже нет фокуса
Оставить комментарий
Имя или ник:
Комментарий: