Как скрыть значок окна в TaskBar'e
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.249] |
|
|
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Как скрыть значок окна в TaskBar'e
|
Сообщ.
#1
,
|
|
|
|
Доброго времени суток
Собственно проблема в сабже При переходе со старушки delphi7 на delphi 2010 возникла проблемма при скрытии значка окна в TaskBar'e. Он, гад, не скрывается ![]() Нужно чтобы сама форма была на экране, а зачка - небыло подскажите как быть пожалуйста |
|
Сообщ.
#2
,
|
|
|
|
![]() ![]() ShowWindow(Application.Handle, SW_HIDE); |
|
Сообщ.
#3
,
|
|
|
|
В Delphi 2010 по-умолчанию нет скрытого окна приложения (Application.Handle). Вместо него - главное окно.
Дальше сами догадайтесь. P.S. Поведение переключается MainFormOnTaskBar. P.P.S. Ставить MainFormOnTaskBar := False - плохая идея. |
|
Сообщ.
#4
,
|
|
|
|
Ну можно выставить форме стиль WS_EX_TOOLWINDOW через SetWindowLong или через эту функцию подменить родительское окно или можно все это проделать через интерфейс ITaskBarList.
|
|
Сообщ.
#5
,
|
|
|
|
Спасибо огромное! Сделал таки
|
|
Сообщ.
#6
,
|
|
|
|
Цитата Maksim V. @ Ну можно выставить форме стиль WS_EX_TOOLWINDOW через SetWindowLong Ну, сделать-то можно разными способами. Есть несколько правил, согласно которым приложения появляются на панели задач. Нарушьте любое условие и кнопка пропадёт. Весь вопрос в том, над чем это делать, а уж как именно делать - вопрос скорее вкуса. |
|
Сообщ.
#7
,
|
|
|
|
Цитата CodeMonkey @ Ставить MainFormOnTaskBar := False - плохая идея. это с чего это плохая идея? в связке с ShowWindow(Application.Handle, SW_HIDE); отлично работает |
|
Сообщ.
#8
,
|
|
|
|
(вздох) Если что-то работает - это ещё не значит, что это правильно.
Вам не приходило в голову, а почему это MainFormOnTaskBar равен True по-умолчанию? Наверное, это не просто так? (это домашнее задание) |
|
Сообщ.
#9
,
|
|
|
|
лучше чем вздыхать, объяснили бы в чём подвох. форум для этого и существует.
|
|
Сообщ.
#10
,
|
|
|
|
Это было несложное упражнение на дом, но раз вам так лениво, то жмёте F1:
Application.MainFormOnTaskbar: Цитата The MainFormOnTaskBar property controls how Windows taskbar buttons are handled by VCL. If the property is true, a taskbar button represents the application's main form and displays its caption. If false, a taskbar button represents the application's (hidden) main window and bears the application's Title. MainFormOnTaskBar must be true to use Windows Vista Aero effects. These include live taskbar thumbnails, Dynamic Windows, Windows Flip, and Windows Flip 3D. If a change to default behavior is required, MainFormOnTaskBar should be set in the .dpr file after Application.Initialize and before main form creation. The MainFormOnTaskBar setting is intended to persist for the life of the application; later runtime changes of this property could result in unexpected behavior. MainFormOnTaskBar defaults to True for applications created in Delphi 2007 and later products and False for earlier products. The property can be applied to older applications. Note that it affects the Z-order of your MainForm in case your application depends on this. To update existing VCL applications, add the following line to the project's .dpr file after Application.Initialize;: ![]() ![]() Application.MainFormOnTaskbar := True; This line is automatically added to new projects. For further information, see http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx На случай, если вам лениво делать перевод: Цитата Свойство MainFormOnTaskBar контролирует, как кнопки в панели задач Windows обрабатываются VCL. Если свойство установлено в True, то кнопка на панели задач ассоциирована с главным окном приложения и показывает его заголовок. Если же свойство установлено в False, то кнопка на панели задач ассоциирована со специальным невидимым окном Application и показывает заголовок объекта Аpplication. MainFormOnTaskBar должна быть установлена в True для работы эффектов Аэро в Windows Vista и выше. Это включает в себя предпросмотр (live thumbnails), Dynamic Windows, Windows Flip и Windows Flip 3D. Если вам нужно сменить поведение, то свойство MainFormOnTaskBar должно устанавливаться в .dpr файле сразу после Application.Initialize и до создания главной формы. Свойство MainFormOnTaskBar не следует менять после начальной установки. В противном случае вы получите неожиданное поведение программы. MainFormOnTaskBar устанавливается в True для новых приложений и равно False для старых приложений по соображениям совместимости. Вы можете менять это свойство и в старых приложениях. Заметьте, что это свойство может менять Z-порядок ваших окон. Для обновления старых VCL-приложений, добавьте следующую строку в ваш файл .dpr сразу после Application.Initialize;: ![]() ![]() Application.MainFormOnTaskbar := True; Эта строка автоматически создаётся у новых проектов. Для дальнейшей информации - см. http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx Если интересно - см. также http://transl-gunsmoker.blogspot.com/2009/03/windows-vista-delphi-1.html |
|
Сообщ.
#11
,
|
|
|
|
ничего страшного не вижу в этом
|
|
Сообщ.
#12
,
|
|
|
|
...ну если вы не видите ничего страшного в том, что программа работает неправильно, то флаг вам в руки...
|
|
Сообщ.
#13
,
|
|
|
|
Цитата Алексей @ MainFormOnTaskBar должна быть установлена в True для работы эффектов Аэро в Windows Vista и выше. Это включает в себя предпросмотр (live thumbnails), Dynamic Windows, Windows Flip и Windows Flip 3D. Если вы считаете нормальным отказаться от этих трёх примочек(кстати именно из-за них большинство знакомых юзеров перешло с ХР на Vista/7) то я поддерживаю предыдущий пост Цитата CodeMonkey @ то флаг вам в руки... ИМХО Отказываясь от поддержки(использования) новых примочек ос, вы заранее обрекаете свои программа на "провал". |
|
Сообщ.
#14
,
|
|
|
|
Цитата VahaC @ Отказываясь от поддержки(использования) новых примочек ос, вы заранее обрекаете свои программа на "провал". К моему глубокому сожалению, вынуждена согласиться с данным утверждением. |
|
Сообщ.
#15
,
|
|
|
|
Вообще, если отвлечься от Vista/7, существует доступная и простая концепция: у вас есть окно? -> на панели задач есть его кнопка. Взаимно-однозначное соответствие.
Однако, энцать лет тому назад при разработке Delphi было принято решение, использовать хак для введения иного поведения. Да, это кривой хак, потому что он делает что-то, что не предусматривалось системой (каждое Delphi приложение кидает вам на рабочий стол видимое окно с нулевым размером). Но это как-то работало и потому всех устраивало, не задумываясь о том, что, вообще говоря, это не есть нормально. Хороший пример на тему не идти против системы, кстати. Так что с MainFormOnTaskBar = True программа получается чуть попрямее, чем без него (вне зависимости от новых фишек ОС). |