Заставка Delphi не закрывает значки на панели задач

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

Заставка не закрыта

Код в моем файле проекта выглядит следующим образом

Application.Initialize;
SplashScreen := TSplashScreen.Create(nil); 
SplashScreen.Show; 
SplashScreen.Update; 
Application.Title := 'Frame';
Application.CreateForm(TMainform, Mainform);
Application.Create;
SplashScreen.Hide; 
SplashScreen.Free;
Application.Run;

person Christo    schedule 27.07.2015    source источник
comment
Мы не видим никакого кода и не знаем, какую версию Delphi вы используете.   -  person David Heffernan    schedule 27.07.2015
comment
Привет Дэвид. Мои извинения. Я использую Delphi XE8. Что касается кода, я использую точный код, как было упомянуто в моем вопросе.   -  person Christo    schedule 27.07.2015
comment
Это за пределами площадки. И читать эту ссылку больно. Так что не буду копать глубже. Если бы в вопросе был код, я бы попытался помочь.   -  person David Heffernan    schedule 27.07.2015
comment
Привет Дэвид. Код добавлен по запросу.   -  person Christo    schedule 27.07.2015
comment
Звонок Appplication.Create? Держу пари, в статье этого нет. Вероятно, вы захотите установить для Application.MainformOnTaskbar` значение True.   -  person David Heffernan    schedule 27.07.2015
comment
@David В этой статье, кажется, уже есть строка Application.Create(), которая, конечно, неверна. Я уверен, что статья имела в виду сказать Application.CreateForm().   -  person Jerry Dodge    schedule 27.07.2015


Ответы (3)


Вполне вероятно, что проблема в ложном Application.Create. Убери это. Hide тоже бессмысленно. Возможно, это то, что вам нужно:

Application.Initialize;
SplashScreen := TSplashScreen.Create(nil); 
SplashScreen.Show; 
SplashScreen.Update; 
Application.Title := 'Frame';
Application.CreateForm(TMainform, Mainform);
SplashScreen.Free;
Application.Run;

Вы также можете добавить Application.MainformOnTaskbar := True; после вызова Initialize.

person David Heffernan    schedule 27.07.2015

Я обычно делаю заставки следующим образом: На событии OnCreate (в вашей основной форме):

  F_Splash := TF_Splash.Create(Self);
  F_Splash.ShowModal;

В форме экрана-заставки поместите компонент TTimer и установите интервал (например, 500 миллисекунд). В событии OnTimer:

  Self.Close;

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

person R.P Silveira    schedule 27.07.2015
comment
Многое происходит перед вызовом события OnCreate моей формы, поэтому мне нужно отобразить заставку перед выполнением onCreate. Любые другие идеи? - person Christo; 27.07.2015

Ответ Дэвида Хеффернана в основном правильный. У меня была такая же проблема некоторое время назад. Я решил это с помощью этого:

  Application.Initialize;
  SplashScreen := TSplashScreen.Create(nil);
  Application.MainFormOnTaskbar := True;
  SplashScreen.Show;
  SplashScreen.Update;
  Application.Title := 'Frame';
  Application.CreateForm(TMainForm, MainForm);
  SplashScreen.Free;
  Application.Run;

Я также удостоверяюсь, что SplashScreen не указан как форма в коде, но я включаю SplashUnit в предложение Uses.

Это работало правильно в течение нескольких лет.

person Ron Maupin    schedule 27.07.2015
comment
Чем это отличается от ответа Дэвида? - person Jerry Dodge; 27.07.2015
comment
То, что у меня есть, проверено, оно использует строку, которую он говорит, чтобы рассмотреть возможность добавления (я думаю, что она должна быть там в этом месте), и объясняет, что SplashScreen не должен быть в списке форм, но чтобы включить модуль в Uses . Я просто собираю все вместе в рабочей версии. Как я уже писал, он в основном прав. - person Ron Maupin; 27.07.2015
comment
Я полагаю, вы имели в виду список автокорректных форм? - person David Heffernan; 27.07.2015
comment
@ Дэвид Хеффернан, на самом деле я имею в виду список автоматически создаваемых форм и список доступных форм. Это удалит форму из предложения Uses, или вы вручную удалите форму из предложения Uses, что удалит ее из списков. Я вручную добавляю блок формы-заставки в предложении Uses. Прошло пару лет, но я помню, что мне пришлось довольно долго с этим играться, прежде чем я понял, что именно сработало. Я создал общий модуль-заставку, который можно добавить в любой из моих проектов, и он запрашивает такие вещи, как имя приложения, номер версии и т. д., для использования на экране-заставке. - person Ron Maupin; 27.07.2015
comment
Хорошо иметь форму в списке доступных форм. Ключ не использует Application.CreateForm для его создания, потому что это делает его основной формой. - person David Heffernan; 27.07.2015
comment
@ Дэвид Хеффернан, хорошо, просто это было так сложно сделать правильно, что, как только я заставил это работать, я не хотел вносить какие-либо изменения в рабочую формулу. Я думаю, что настоящий ключ устанавливает Application.MainformOnTaskbar := True; сразу после создания заставки. - person Ron Maupin; 27.07.2015
comment
Какая разница, где это установлено? Лично я бы установил его после Initialize. - person David Heffernan; 27.07.2015
comment
@ Дэвид Хеффернан, это тоже возможно, но я знаю, что моя комбинация предотвращает поведение, на которое жалуется ОП. Я тоже начал со статьи, которую сделал ОП, и это расстраивало, пока я не набрал правильную комбинацию. - person Ron Maupin; 27.07.2015