значок на панели задач не перемещается на второй монитор - PullRequest
0 голосов
/ 14 января 2019

Недавно я получил новый компьютер для разработки с двумя мониторами, но, к сожалению, у него Windows 10.
Теперь у меня также есть некоторые инструменты, все еще разработанные в Delphi 7, и они работают, но с одной досадной проблемой.

Когда я запускаю приложение Delphi 7, icon на панели задач не перемещается на второй монитор.
Панель задач настроена на отображение значков на панели задач монитора, когда они открыты. Это работает для всех приложений, кроме приложений Delphi 7.
Значок всегда остается на основном мониторе.

У меня есть доступный исходный код, поэтому мне интересно, есть ли что-то, что я должен добавить в исходный код или настроить какое-либо свойство, чтобы это работало?

При поиске в Google возникает множество случаев, когда форма не перемещается на второй монитор, но я ничего не нашел в значке на панели задач.

1 Ответ

0 голосов
/ 14 января 2019

Это связано с тем, что дескриптор окна, связанный с кнопкой панели задач, является дескриптором окна, принадлежащим объекту Application, а не дескриптором окна вашей основной формы.

В более поздних версиях Delphi вы будете писать Application.MainFormOnTaskBar := True в своем файле .dpr, и это изменит поведение так, чтобы вместо этого кнопка панели задач была связана с вашей основной формой. Я считаю, что MainFormOnTaskBar был представлен в Delphi 2007.

Переход на современную версию Delphi является идеальным способом решения проблемы. Если вы не можете этого сделать, вам нужно будет обойти код VCL, чтобы убедиться, что дескриптор окна основной формы связан с кнопкой панели задач. Это вряд ли будет легкой работой. По сути, вы платите цену за продолжение разработки с помощью инструментов, которые давно устарели.


Как указывает Реми, для достижения минимума не требуется много взлома. Измените стиль окна Application, чтобы удалить стиль WS_EX_APPWINDOW, и пусть основная форма переопределит метод CreateParams, чтобы установить для его окна-владельца значение NULL, т.е. Params.WndParent := 0.

Я подозреваю, что поведение будет не таким гладким, как с современным приложением VCL. Например, VCL был изменен, чтобы уменьшить количество воссоздания окна, которое он делает, что более важно теперь, когда главное окно связано с кнопкой панели задач.

...