Миниатюра приложения Vista - PullRequest
5 голосов
/ 02 июня 2009

По своему дизайну, миниатюра приложения панели инструментов в Vista не обновляется, когда приложение свернуто, так как само свернутое окно не перерисовывается. Для приложения мониторинга, которое у меня есть, было бы полезно обновить эскиз приложения, пока приложение остается свернутым. Я использую Delphi 2009. Кто-нибудь может предложить хороший обходной путь для этого?

HMcG

Ответы [ 6 ]

3 голосов
/ 02 июня 2009

Это интересно, я думаю, что это возможно в некотором роде с Windows API, я не нахожусь на Vista-машине в данный момент, но я думаю, что Windows Media Player по-прежнему показывает воспроизведение видео, когда свернуто.

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

2 голосов
/ 02 июня 2009

Я нашел что-то на форуме разработчиков Microsoft , посвященном этой теме. Вопрос был о том, как предоставить собственное миниатюрное изображение, на что Microsoft Леонардо Бланко ответил так:

Мы не планируем предоставлять приложению средства для создания пользовательское альтернативное представление эскизов, но мы будем предоставить API для отказа от обычного миниатюрного изображения в целом ....

Похоже, что эти планы могли бы измениться, судя по существованию в MSDN функций DwmSetIconicLivePreviewBitmap и DwmSetIconicThumbnail для Windows 7. Сейчас Записи на самом деле не содержат никаких объяснений, но их имена выглядят многообещающими.

Кто-то указал, что миниатюра для Windows Media Player показывает движущееся видео, даже когда окно свернуто. Объяснение Бланко:

WMP использует новый конвейер видео, который напрямую связывается с [Диспетчер окон рабочего стола], чтобы добиться более плавного воспроизведения опыт. Этот конвейер опирается на [DirectX] и не зависит от информации о видимости окна, поэтому миниатюра можно сохранить в живых, даже если окно свёрнуто Пока приложение продолжает отправлять кадры. Вы можете заметить, Тем не менее, пользовательский интерфейс вокруг видео больше не работает (это сложно наблюдать, потому что пользовательский интерфейс вокруг видео обычно не обновляется). Для получения дополнительной информации об этом методе, см. DwmSetPresentParameters API.

Боюсь, я больше ничего не могу найти по этому поводу. Документация по функциям DWM недостаточна.

Учитывая характер вашего приложения, возможно, стоит подумать о гаджете , чтобы жить на боковой панели Windows.

1 голос
/ 02 июня 2009

Я не знаю, если этот обходной путь все еще работает в Delphi 2009: переопределите CreateParams, чтобы установить GetDesktopWindow в качестве WndParent.

0 голосов
/ 26 июля 2010

перейдите в исходный проект и измените Application.MainFormOnTaskbar на false: Application.MainFormOnTaskbar: = false;

С уважением, Маурисио

http://sourceforge.net/projects/tcycomponents/

0 голосов
/ 02 июня 2009

В Delphi 2007 ваша основная форма находится на панели задач, если вы установите

  Application.MainFormOnTaskbar := True;

Чтобы поддерживать его обновление, вам нужно предотвратить сворачивание приложения и вместо этого просто переместить его обратно. Вы можете сделать это, поместив TApplicationEvents в форму и назначив обработчик события для события OnMinimize , а затем вызвав Application.Restore . Вы захотите отследить свое собственное состояние минимизации и убедиться, что вы скрываете все другие формы (если они у вас есть) и видна только ваша основная форма, но в самом низком Z-порядке, когда она «свернута».

Я не думаю, что Windows Vista позволяет вам перемещать формы с экрана, или вы могли бы просто сделать это. Может быть, есть взлом вокруг этого.

Удачи!

0 голосов
/ 02 июня 2009

Я изменил Application.Title в прошлом, чтобы показать некоторую информацию на кнопке панели задач. Я не думаю, что это вызывает перерисовку значка?

...