|
#1
|
||||
|
||||
Логотип
Есть программа, которая мониторит папку и воспроизводит из нее видео (tWindowsMediaPlayer) и презентации PowerPoint. Так вот, в момент, когда заканчивается видео и следует презентация, проигрыватель сворачивается, обнажая саму программу и рабочий стол на секунду до открытия презентации. Хотелось бы, чтобы вместо этого люди видели либо просто черный экран, либо наш логотип (fullscreen)
Помогите, подскажите, как это лучше всего осуществить? |
#2
|
||||
|
||||
Во-первых, с рабочего стола можно скрыть панель задачь и иконки, в топорном случае завершить explorer.exe
Во-вторых, можно установить свои обои на рабочий стол, лого, н-р. А так вариантов решения очень много... |
#3
|
||||
|
||||
Цитата:
Короче логотип/черный экран должны быть программные. Причем картинка должна висеть поверх всего, кроме полноэкранных режимов wmp и powerpoint. То есть как только wmp свернулся, не должна открываться картинка (на это ведь все равно нужно время), она уже должна там быть. Ну и при нажатии горячих клавиш - пропадать. Желательно все это осуществить в этой же программе. Мне нужен код. Спасибо. |
#4
|
|||
|
|||
Вставляй wmp и powerpoint прямо в свое окно.
|
#5
|
||||
|
||||
Цитата:
В любом случае мне это не подходит. Даже если я и PP компонент на форму добавлю, мне это не поможет. Есть еще идеи? Неужели нельзя закрасить рабочий стол картинкой? Рисовать же на нем можно через LineTo например. |
#6
|
||||
|
||||
Нашел решение. Если кому то понадобится подобное.
Во первых потребуется модуль Код:
{ Модуль: FullScreenUnit Описание: Поддержка разворота клиентской части окна во весь экран. Источник: статья Пола Дилация в MSDN Magazine № 6(12) 2002 г. Особенности использования: Окно, клиентская часть которого должна быть развернута во весь экран, должно обрабатывать сообщение WM_GETMINMAXINFO и устанавливать свой максимальный размер больше, чем размер экрана. Авторы: Пол Дилация (С++, MFC), Игорь Шевченко (Delphi) Дата создания: 09.01.2003 История изменений: } unit FullScreenUnit; interface uses Windows, Controls; type TFullScreenHandler = class private FRestoreRect : TRect; function GetInFullScreenMode : Boolean; function GetMaxSize : SIZE; public { Развернуть клиентскую область окна во весь экран } procedure Maximize (AWinControl : TWinControl); { Восстановить клиентскую область окна } procedure Restore (AWinControl : TWinControl); { Развернута ли клиентская область окна во весь экран } property InFullScreenMode : Boolean read GetInFullScreenMode; { Максимально возможный размер окна, такой, чтобы клиентская область уместилась во весь экран. } property MaxSize : SIZE read GetMaxSize; end; var FullScreenHandler : TFullScreenHandler; implementation uses Forms; { Для Screen } function TFullScreenHandler.GetInFullScreenMode : Boolean; begin Result := not IsRectEmpty(FRestoreRect); end; function TFullScreenHandler.GetMaxSize : SIZE; var ARect : TRect; begin { При большом желании обращение к свойствам переменной Screen можно заменить на вызовы функции GetSystemMetrics(SM_CXSCREEN) и GetSystemMetrics(SM_CYSCREEN). } SetRect(ARect, 0, 0, Screen.Width, Screen.Height); InflateRect(ARect, 10, 50); //Любые числа, лишь бы превышали размер //неклиентской области окон Result.cx := ARect.Right - ARect.Left; Result.cy := ARect.Bottom - ARect.Top; end; procedure TFullScreenHandler.Maximize (AWinControl : TWinControl); var RcClient, RcNewWindow : TRect; begin RcClient := AWinControl.ClientRect; { Перевод координат клиентской области окна в экранные } MapWindowPoints(AWinControl.Handle, HWND_DESKTOP, RcClient, 2); { Сохраним размеры окна для восстановления } GetWindowRect(AWinControl.Handle, FRestoreRect); { При большом желании обращение к свойствам переменной Screen можно заменить на вызовы функции GetSystemMetrics(SM_CXSCREEN) и GetSystemMetrics(SM_CYSCREEN). } SetRect(RcNewWindow, 0, 0, Screen.Width, Screen.Height); with RcNewWindow do begin Inc(Left, FRestoreRect.Left - RcClient.Left); Inc(Top, FRestoreRect.Top - RcClient.Top); Inc(Right, FRestoreRect.Right - RcClient.Right); Inc(Bottom, FRestoreRect.Bottom - RcClient.Bottom); SetWindowPos (AWinControl.Handle, 0, Left, Top, Right - Left, Bottom - Top, SWP_NOZORDER); end; end; procedure TFullScreenHandler.Restore (AWinControl : TWinControl); begin with FRestoreRect do SetWindowPos (AWinControl.Handle, 0, Left, Top, Right - Left, Bottom - Top, SWP_NOZORDER); SetRectEmpty(FRestoreRect); end; initialization FullScreenHandler := TFullScreenHandler.Create(); finalization FullScreenHandler.Free(); end. Модуль нужно добавить в uses на нужной форме. В моем случае это дополнительная форма Form2. Чтобы поверх формы ничего не возникало, можно установить ей свойство stay on top. Form.FormStyle:=fsStayOnTop; ОБЯЗАТЕЛЬНО установите свойство BorderStyle формы на значение bsNone. Вот код для разворачивания формы на полный экран или ее сворачивания. Можно добавить в нужное событие. Код:
if not FullScreenHandler.InFullScreenMode then FullScreenHandler.Maximize(Self) else FullScreenHandler.Restore(Self); Пожалуй все. |
#7
|
||||
|
||||
Еще можно создавать отдельный десктоп, чтоб всякая ерунда с рабочего стола не пролезала.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
||||
|
||||
Цитата:
|
#9
|
||||
|
||||
Цитата:
|
#10
|
||||
|
||||
Цитата:
Так вот научитесь ставить правильно задачи, тут не экстрасенсы Я же не заставляю делать как я, привел лишь пример, не нравиться, тогда ищите другие варианты, тем более их уйма, да и тут накидали еще вагон и маленькую тележку. |
#11
|
||||
|
||||
Цитата:
Цитата:
Цитата:
В моем примере клик по фуллскрин-форме закрывает ее и отображает основную. То есть все быстро и просто - в 3 клика (с учетом закрытия текущего воспроизведения). |
#12
|
||||
|
||||
Цитата:
Цитата:
|