У меня есть приложение, предназначенное для нескольких мониторов. Он запускается, и мы стараемся не активировать окна, которые не нужно активировать, потому что пользователь вводит только ввод с клавиатуры в одном месте, и каждый раз, когда мы активируем новую форму на дополнительном мониторе, он захватывает фокус клавиатуры, что-то мы хочу избежать.Как я могу сделать видимую форму и максимизировать ее, чтобы заполнить дополнительный монитор без активации?
Наш дом в базовый класс ТГогт имеет метод, как это, который с помощью функции Win32 ShowWindow напрямую, избегая внутренней системы изменения видимости фреймворка VCL, которая захватывает внимание:
procedure TOurForm.ShowWithoutActivate;
begin
ShowWindow(Self.Handle, SW_SHOWNOACTIVATE);
Self.Visible := true;
end;
Если бы я просто сделал это было бы захватить внимание:
Self.Visible := true; // TWindow.Visible = true, will grab focus, plus make window visible.
Это работает, но следующая вещь, которую я хотел бы быть в состоянии сделать, это установить развернутое состояние, так что формы будет максимально себя на мониторе, что в настоящее время на. Как мы получаем его на конкретный монитор? Точно так же он всегда работал, с изменением свойств Left и Top формы. Мы должны позаботиться о том, что если мы сохраним Left/Top/Width/Height в форме, а затем восстановим его, результаты будут действительны при перезагрузке. Это НЕ то, о чем я прошу.
Я спрашиваю о том, как максимизировать форму теперь, когда я «показал» ее, используя вышеуказанную пользовательскую функцию. Один взлом порождает еще один хак. Вот как далека по этой кроличьей норе я пошел:
- Когда ТГет, который также является частным полем FShowing TWinControl ложно, установка Form.Maximized не имеет никакого эффекта.
- Когда TForm имеет поле TWinControl.FShowing, значение true, установка windowState для wsMaximized также вызывает активацию формы.
Возможно ли сделать эту форму видимой и заставить ее принять состояние окна, которое я хочу, чтобы оно было выполнено без активации? Если я не смогу это сделать, тогда пользователи потеряют фокус клавиатуры, когда я покажу эту форму на дополнительном мониторе, чего я действительно хочу избежать.
То, что я пытался это использовать Win32 API ShowWindow
сделать SW_SHOWMAXIMIZED
:
ShowWindow(Self.Handle, SW_SHOWMAXIMIZED);
выше, кажется, чтобы захватить фокус (реактивировать).
Это очень легко переводит на любой язык, спасибо! –