Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Приложение с двумя фокусами


Автор: mistrmax 10.5.2012, 21:05
Здравствуйте. Существует приложение состоящее из двух форм. При нажатии на кнопку на первой форме создаётся и показывается вторая форма, и нужно чтобы эта вторая форма не забирала фокус у первой. Пробовал сразу после показа второй формы отдавать фокус первой, но этот вариант не подходит, так как прерывает работу пользователя с компонентами ввода текста. Собственно, как такое сделать? Заранее благодарен.

Автор: northener 10.5.2012, 23:22
Фокус может быть только один.

Автор: C4EBA 11.5.2012, 10:05
А зачем вообще два фокуса? Ведь пользователь в конкретный момент времени работает с одной из форм.
mistrmax, расскажи, как должно работать приложение, может быть, ты пытаешься реализовать не то, что нужно для его работы.

Автор: mistrmax 11.5.2012, 16:42
Иногда при обработке некоторых данных в моей программе появляется ошибка по той или иной причине и нужно сообщить об этом пользователю. Было рассмотрено несколько вариантов: 
— стандартное окно ошибки (MessageBox, MessageDlg, ShowMessage и.т.п.) но они мешают при работе с программой; 
— вывод ошибки в лог, однако лог занимает много рабочего пространства в программе и делать лог для одних лишь ошибок как-то бессмысленно;
— небольшое окно внизу экрана, какие появляются к примеру в QIP, ICQ при печати или появлении нового сообщения; 
Последний вариант и был выбран. Уже все реализовано только существует проблема с фокусом.

Автор: mistrmax 11.5.2012, 17:04
Всё, всем спасибо. Вот что нашёл:
Код

var
  AcitveWnd:THandle;
begin
  //получаем текущее активное окно
  ActiveWnd:=GetActiveWindow;
  //показываем форму в неактивном состоянии
  ShowWindow(Handle,SW_SHOWNOACTIVATE);
  //отдаём фокус главной форме
  SetActiveWindow(ActiveWnd);
end;

Автор: MetalFan 12.5.2012, 12:03
Цитата(mistrmax @  11.5.2012,  17:04 Найти цитируемый пост)
SW_SHOWNOACTIVATE

Тоже об этом подумал... но одним ShowWindow не обойдетесь. Скорее всего получите грабли в виде TForm.Visible <> IsWindowVisible

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)