![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установка фокуса [D6, Win95/98]
skiph © (2002-10-30 09:54:00)На форме расположены две кнопки (TBitBtn), событие OnEnter, которых переопределено. Управляя клавишами клавиатуры "вправо - влево", можно можно фокусировать поочередно каждую из кнопок. Пусть фокус на кнопке №2, в результате некоторых действий я делаю кнопку №1 недоступной (BitBtn1.Enabled:=False). Пользователь нажимает на клавишу "влево", после чего управление должно перейти на кнопку 1, но поскольку она недоступна, это становится невозможным и бог с этим. Но возникает ошибка "Cannot focus a disabled or invisible window", не смотря на то, что в этот момент процедура OnEnter даже не вызывается. Как избежать таких сообщений?
skiph (2002-11-01 05:16:00) [1]Спасибо, конечно, но куда бы мне это впихнуть?
Alex4444444444 (2002-10-31 11:09:00) [2]
with MyButton do try
if CanFocus then SetFocus;
except // just in case
end;
skiph (2002-10-31 09:25:00) [3]Так и делал. Но в том-то и дело, что до выполнения OnEnter очередь даже не доходит. В ручную (через SetFocus) я фокус не передавал.
А вообще спасибо всем, я по-другому сделал.
Separator (2002-10-31 08:02:00) [4]Когда передаешь фокус, делай проверку на Enable
skiph (2002-10-31 07:53:00) [5]Ну, примерно так. Но при передаче фокуса выскакивает егог.
PKT (2002-10-31 04:17:00) [6]to: skiph © (30.10.02 09:54)
Я правильно принцип понял ?
procedure TForm1.Button1Enter(Sender: TObject);
begin
ShowMessage("Enter 1");
end;
procedure TForm1.Button2Enter(Sender: TObject);
begin
ShowMessage("Enter 2");
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Button1.Enabled := not Button1.Enabled;
end;
Ошибка у меня не возникает.
skiph (2002-10-31 03:58:00) [7]Так как не давать фокус? Я брекпоинт ставил на начало OnEnter, так ошибка возникает раньше, чем вызывается этот метод, т.е. на основании самого факта передачи управления!
Song (2002-10-30 14:01:00) [8]Надо вставлять проверку в то, место которое ответственно за перемещение фокуса.
roadster (2002-10-30 12:47:00) [9]ну либо фокус не давать на задизабленную и невидимую,
либо енаблить и визиблить, а потом фокус давать