Я знаю, как заставить формы появляться на том же мониторе, что и запущенное приложение, но я не вижу, как обращаться к диалоговым окнам «Справка» или «Настройка принтера» для отображения на одном мониторе. Справка отображает, где она отображается в последний раз, но мы хотим, чтобы она отображалась на мониторе приложения. Диалоговое окно «Настройка принтера» всегда появляется на основном мониторе.Как заставить диалоговые окна справки и настройки принтера отображаться на том же мониторе, что и работающее приложение?
ответ
Передача исходной формы Handle
на TPrinterSetupDialog.Execute
, похоже, делает трюк.
if PrinterSetupDialog1.Execute(Self.Handle) then
//
Используя Delphi 7 (где TPrinterSetupDialog.Execute
не принимает параметр), у вас есть два варианта.
Самый простой способ - создать собственный потомок TPrinterSetupDialog
. Execute
является виртуальным в TCommonDialog
, предком TPrinterSetupDialog
, где он переопределяется. Вы можете переопределить его в своем собственном потомке, используйте код в TPrinterSetupDialog
в качестве основы для своего собственного Execute
переопределения, добавив overload
. Ваш перегруженный Execute
принял бы параметр ParentHandle: HWND
и установил PrintDlgRec.hWndOwner
этому ручку окна.
Я думал о том, чтобы попытаться написать это для вас (или, по крайней мере, запустить его), но есть дополнительные вещи, которые вам нужно будет скопировать из блока Dialogs
(функции, определенные в разделе реализации, которые обертывают некоторый API вызовы и функция обратного вызова, которая используется для цикла сообщений диалога), и у меня нет D7, доступного там, где я даже пытаюсь его скомпилировать.
Другой альтернативный вариант (как упоминал Давид Хеффернан в своем комментарии ниже) должен был непосредственно вызвать Windows API PrintDlgEx. Это обсуждается в MSDN, в разделе Print Dialog Box (Windows). Еще раз, у меня нет D7, поэтому я не могу дать вам пример использования его из Delphi. (Я проверил, и нигде не спрятался.)
Я не уверен, что вы можете установить положение окна справки; Я думаю, что это делается автоматически Windows на основе предыдущего использования пользователя. (Я так и не смог).
- 1. Как сделать диалог (просмотр) открытым на том же мониторе, что и главное окно
- 2. IOS 8 и диалоговые окна
- 3. JQuery и диалоговые окна Safari
- 4. pygtk: как заставить диалоговые окна сообщений появляться в центре экрана?
- 5. WPF, диалоговые окна и формы
- 6. Как заставить Gui на самом деле запрашивать диалоговые окна?
- 7. Как заставить ImageViews отображаться в одном и том же месте на разных дисплеях?
- 8. Как показать форму в максимизированном состоянии на том же мониторе, что и ее родитель?
- 9. Как заставить iTerm2 отображаться на текущем экране?
- 10. Как просмотреть папку в том же каталоге, что и приложение
- 11. jQuery мобильные и всплывающие диалоговые окна
- 12. Открыть JFrame на том же экране (мониторе), что и диалог JavaFX '8
- 13. Как запустить приложение node.js, Java и PHP на том же сервере и том же порту
- 14. Изменение положения окна по умолчанию на втором мониторе?
- 15. Модальные диалоговые окна моделирования
- 16. iOs 8 показывает одно и то же приложение на том же устройстве, что и у iOs7
- 17. Ответ на диалоговые окна процессов
- 18. Сохраните параметры настройки принтера
- 19. Файлы cookie и JQuery: Диалоговые окна
- 20. Веб-приложение, работающее как на Oracle, так и на MySQL
- 21. VSTO Outlook Addin Диалоговые окна
- 22. Модель-просмотр-презентатор и модальные диалоговые окна .... Как?
- 23. окна магазина приложение настройки
- 24. окна отображения на дополнительном мониторе
- 25. Виджет android работает в том же процессе, что и приложение
- 26. Как принести приложение AngularJS и Flask в том же домене?
- 27. Отключить настройки окна и перехода
- 28. Диалоговые окна в MVC
- 29. Диалоговые окна в макросах
- 30. Общие диалоговые окна Win32
Спасибо. В Delphi 7, TPrinterSetupDialog.Execute не принимает параметр ... –
Спасибо, но вы отметили свой вопрос Delphi ** 2007 **, который делает. :-) –
Вы правы! Мое замешательство! Проблема справки находится в Delphi 2007. Проблема установки принтера находится внутри DLL, которая вызывается из приложения Delphi 2007; к сожалению (?!?), DLL написана в Delphi 7. –