Приложение не отображается на панели задач, когда главная форма скрыта

Sovv
Дата: 29.04.2011 21:07:45
Раньше с такой проблемой не сталкивался. Возможно причина в том, что это первое приложение написанное изначально на Delphi 2010. Практически у всех форм стиль - bssingle. Регулирую отображение нужной формы на экране:
FormMain.Visible := false;
Form2.Show;
Нужная форма отображается, но само приложение из панели задач исчезает (пока не сделаешь видимой главную форму).
Как это исправить?
DetSimen
Дата: 30.04.2011 05:05:43
Application.MainFormOnTaskbar := True;
Sovv
Дата: 30.04.2011 09:41:45
DetSimen
Application.MainFormOnTaskbar := True;
Не помогает (тем более, что эту строчку я не удалял). Пробовал писать её в OnHide главной формы, в OnShow вызываемой - нуль! Даже замена MainFormOnTaskbar := True на false никак не влияет:
- главная форма скрыта > на панели задач ничего нет
- показывам главную форму > на панели появляется значок (кнопка) приложения

Откопал код:
type
TForm2 = class(TForm)
private
{ Private declarations }
procedure CreateParams(VAR Params: TCreateParams);
override;
...
procedure TForm2.CreateParams(VAR Params: TCreateParams);
begin
Inherited CreateParams(Params);
WITH Params DO
ExStyle := ExStyle OR WS_EX_APPWINDOW;
end;
тоже не помагает!

Менял стиль форм - тоже безрезультатно. Почему панель задач привязывается к главной форме?
Sovv
Дата: 30.04.2011 10:18:30
Нет, код с CreateParams всё-таки работает. Первый раз не дописал "override". Вот только что теперь за фигня такая - это в каждую не главную форму этот код совать?! Можно как-то стиль WS_EX_APPWINDOW по умолчанию для всех форм установить?
Sovv
Дата: 30.04.2011 11:08:14
Не знаю - на сколько это правильно, поэтому делюсь тем, что получилось:
uses ...Windows, ...
var
ExtendedStyle : integer;
begin
 Application.Initialize;
 //Application.MainFormOnTaskbar := True; - убираем, иначе не работает
 Application.Title := 'Программка';
 ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
 SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR 
       WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
Пока косяков не замечал - программа стала всё время отображаться на панели задач. Правда при использовании CreateParams надпись на TaskBar менялась на название активной формы (мне даже понравилось), а теперь всегда написано "Программка".

Главный вопрос - что такого сделали в новых версиях Delphi, что теперь придётся в каждом проекте лечить этот косяк? Может можно какие-то настройки выставить, чтобы было всё по-старому? Если таких настроек нет - стоит ещё что-то добавлять в данный код?
fd00ch
Дата: 30.04.2011 12:09:20
DetSimen
Application.MainFormOnTaskbar := True;
Это свойство не регулирует отображение/скрытие кнопки программы на Панели задач :-)
Sovv
Дата: 30.04.2011 12:46:58
fd00ch
DetSimen
Application.MainFormOnTaskbar := True;
Это свойство не регулирует отображение/скрытие кнопки программы на Панели задач :-)
Вы правы - от того false оно или true - ничено не меняется! А вот отсутствие этой строчки возвращает всё в нормальное русло! ))) Так что правильный ответ - не нужно ничего, и эта строчка в том числе )