Вопрос

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

ГМКГ

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

  Application.MainFormOnTaskbar := True;

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

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

Удачи!

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

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

http://sourceforge.net/projects/tcycomComponents/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top