Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
Singleton
175 / 70 / 8
Регистрация: 27.12.2012
Сообщений: 386
#1

Cannot focus a disabled or invisible window

08.02.2014, 20:05. Просмотров 4869. Ответов 4
Метки нет (Все метки)

В рабочий проект (D7) были внесены изменения, в частности при определенном событии запрещена смена раскладки клавиатуры:
Delphi
1
2
3
4
5
6
7
8
9
private
  { Private declarations }
  procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
...
procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
begin
 if Msg.message = WM_INPUTLANGCHANGEREQUEST then 
   Handled := true;
end;
После этого при запуске появилась ошибка выполнения cannot focus a disabled or invisible window на 8 строке:
Delphi
1
2
3
4
5
6
7
8
9
10
11
begin
  CreateMutex(nil, True, 'Test Lite');
  if GetLastError = ERROR_ALREADY_EXISTS then
  Exit;
  Application.Initialize;
  Application.Title := 'Test Lite 1.0.9';
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TAboutBox, AboutBox); //ошибка
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.
Лечиться правкой private процедуры locking (закомменторовал строку Form1.Edit1.SetFocus).
Получается что программа якобы пытается установить фокус ввода на Edit скрытого окна, хотя в FormCreate фокус не устанавливается.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.Minimize;
  ShowWindow(Application.Handle, sw_Hide);  //убрать кнопку с системной панели
  CoolTrayIcon1.HideMainForm;
  Label1.Font.Color:=Form1.Color;
  AddFontResource('DS-DIGII.TTF'); //регистрируем шрифт для программы
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
 
  LoadKeyboardLayout('00000409',KLF_ACTIVATE); //меняем язык на En
  Application.OnMessage := MsgHandler; //отправляем к заглушке изменения языка
 
  OptionsLoad();
 
  if Options.AutoActivate then
    locking();
end;
 
procedure TForm1.locking();
begin
  Application.ShowMainForm:=True;
  Form1.CoolTrayIcon1.ShowMainForm;
  ShowWindow(Application.Handle, sw_Hide);
  Form1.CoolTrayIcon1.IconVisible:=False;
  Form1.WindowState:=wsMaximized;
  Form1.FormStyle:=fsStayOnTop;
  Form1.Label1.Font.Size:=Round(Form1.Height/6);
  showtime();
  Form1.Label1.Font.Color:=clLime;
  ExitLock:=True;
  Form1.Edit1.SetFocus;
 
  Form1.Timer1.Enabled:=True;
end;
Пробовал перенести Application.OnMessage := MsgHandler; в процедуру locking() - без изменений. Как можно одновременно запретить смену раскладки и сохранить перевод фокуса на Edit?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 20:05
Ответы с готовыми решениями:

cannot focus a disabled or invisible window
На форме имеется PageControl с двумя вкладками на одной TreeView. В момент...

Cannot focus a disabled or invisible window [Delphi 7]
Ребят, проблема опять, с этими тупыми вкладками Приступим. Дано: С лева...

Есть две формы, при переходе с одной на другую, вылетает cannot focus a disabled or invisible window
В общем хочу что бы у меня были открыты две формы сразу, но при переходе между...

Ошибка: Cannot focus a disabled or invisible window
Добрый день, подскажите пожалуйста, при нажатии на кнопку выходит вот такая...

Ошибка "cannot focus disabled or visible window"
Здравствуйте. После запуска программы при нажатии на image2 выходит ошибка...

4
Singleton
175 / 70 / 8
Регистрация: 27.12.2012
Сообщений: 386
10.02.2014, 02:10  [ТС] #2
Перефразирую вопрос: какая связь между вмешательством в очередь сообщений ОС и установкой фокуса ввода (фокус устанавливается не в TFormOnCreate, а после максимизации данной формы)?
0
northener
пофигист широкого профиля
3418 / 2318 / 630
Регистрация: 15.07.2013
Сообщений: 13,699
10.02.2014, 02:56 #3
Цитата Сообщение от Singleton Посмотреть сообщение
фокус устанавливается не в TFormOnCreate
А в вышепредставленном коде именно в TFormOnCreate. Как прикажешь тебя понимать, Саид?
0
Singleton
175 / 70 / 8
Регистрация: 27.12.2012
Сообщений: 386
10.02.2014, 03:05  [ТС] #4
Вход в процедуру блокировки происходит по условию, а ошибка возникает даже если оно ложно. Пробовал поставить sleep(5000), т.е. форма гарантировано должна быть создана, развернута и перемещена наверх.
При трассировке вылетает именно на строке
Delphi
1
Application.CreateForm(TAboutBox, AboutBox);
Форма при этом так же не активизируется.
Саид в недоумении.
0
northener
пофигист широкого профиля
3418 / 2318 / 630
Регистрация: 15.07.2013
Сообщений: 13,699
10.02.2014, 03:20 #5
Цитата Сообщение от Singleton Посмотреть сообщение
ошибка возникает даже если оно ложно.
Значит ещё где-то сидит подобная засада.
Цитата Сообщение от Singleton Посмотреть сообщение
При трассировке вылетает именно на строке
Application.CreateForm(TAboutBox, AboutBox);
Именно там и должен находится курсор при "неглубокой" трассировке в случае ошибки при создании Form1.
1
10.02.2014, 03:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2014, 03:20

события window.focus/blur/beforeunload, element.load/error не работаю
почему? window.beforeunload = function(){ confirm("Вы уверенны что хотите...

Focus на поле input при открытии popup window (bootstrap popover)
Есть кнопка на сайте, при нажатии открывается popover окошко, с полем input в...

input[type="submit"][disabled!=disabled]:hover
Здравствуйте. У меня для кнопок типа submit и button есть стили input, input,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru