Вниз
Скачать: CL | DM;

Как запустить приложение свернутым?   Найти похожие ветки 

← →
Islander   (2004-09-29 10:54) [0]

Здравствуйте!

Никак не могу разработать нормальный способ, как запустить приложение на Delphi в свернутом виде, вот какие варианты перепробовал:

1) В FormCreate делаю Application.Minimize. Сворачивается и начинает мигать кнопкой на таскбаре (как будто FlashWindow), что не устраивает.

2) Делаю дополнительный таймер, ставлю interval = 100 мс (меньше нельзя), в OnTimer пишу Application Minimize, тогда все нормально, но форма сначала показывается на экране, а потом сворачивается, что вызывает "мигание". Это раздражает многих пользователей.

3) Есть еще один вариант: в OnCreate прописать WindowState = wsMinimized. Тогда все хорошо, но вот окно показывается не кнокой на таскбаре, а свернутой полоской в левой нижней части экрана.

В итоге, все 3 способа не подходят, поэтому вопрос к здесь присутствующим: а как Вы решаете подобную задачу?


← →
b@mboZe   (2004-09-29 11:06) [1]

procedure TForm1.FormCreate(Sender: TObject);
begin
 bCreationFinished := false;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 if not bCreationFinished then
 begin
   bCreationFinished := true;
   Application.Minimize;
 end;
end;


← →
clickmaker ©   (2004-09-29 11:06) [2]

А если в настройках ярлыка указать?


← →
TUser ©   (2004-09-29 12:45) [3]


> 3) Есть еще один вариант: в OnCreate прописать WindowState
> = wsMinimized. Тогда все хорошо, но вот окно показывается
> не кнокой на таскбаре, а свернутой полоской в левой нижней
> части экрана.

В OnCreate главной формы приложения надо.


← →
Islander   (2004-09-29 13:23) [4]

2b@mboZe:

Спасибо за вариант, буду дома, попробую

2clickmaker:

Не пойдет, это несерьезно, т.к. иногда надо приложение все-таки развернутым запускать, в зависимости от пользовательских настроек.

2TUser:

Так я и прописываю в OnCreate главной формы.


← →
TUser ©   (2004-09-29 14:39) [5]

Просто, свернутая полоска в левой нижней части обычно бывает при минимизации не-главной формы. Проверь, точно ли она у тебя главная - Project -> View source


← →
Islander   (2004-09-29 20:05) [6]

2TUser

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

Я делаю примерно так:

project.dpr:

begin
 
 if not ShowLoginDialog then
   exit;
 Application.CreateForm(TfrmMain, frmMain);
 Application.Run;
 Application.ProcessMessages;
end.

ShowLoginDialog - это функция такого вида:

Function ShowLoginDialog: boolean; overLoad;
begin
 Application.CreateForm(TfrmLogin, frmLogin);
 Result:=frmLogin.ShowModal = mrOK;
end;

Таким образом показывается форма авторизации, которую и надо свернуть. В это время, как видно из кода, главная форма еще не создана....


← →
panov ©   (2004-09-29 21:01) [7]

А для чего показывать форму для авторизации в свернутом виде?
Или я чего-то не понимаю, но запрос на авторизацию выдается для того, чтобы ввести имя и пароль.


← →
Islander   (2004-09-29 22:14) [8]

2Panov:

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

P.S. Предложения не запускать программу с Windows не подойдут :)


← →
panov ©   (2004-09-29 22:19) [9]

>Islander   (29.09.04 22:14) [8]

В этом случае спрячь программу вообще, а иконку помести в SysTray.


← →
default ©   (2004-09-29 22:21) [10]

"Но ведь та форма, которая создана первой, является в данном случае главной, если других форм не создано, верно?"
та форма, которая создана первой, является главной
project.dpr:

begin

if not ShowLoginDialog then
  exit;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
Application.ProcessMessages;
end.

ShowLoginDialog - это функция такого вида:

Function ShowLoginDialog: boolean; overLoad;
begin
Application.Minimize;
Application.CreateForm(TfrmLogin, frmLogin);
Result:=frmLogin.ShowModal = mrOK;
end;
так покатит?если нет тогда точней поясни что нужно


← →
panov ©   (2004-09-29 22:46) [11]

>Islander   (29.09.04 22:14) [8]

Ну для начала я бы поместил вызов функции ДО Application.Initialize;

А выход из этой ситуации простой:

В зависимости от настроек пользователя изменяется позиция окна(если должно стартовать свернутое, то окно показывается за пределами экрана и минимизируется, при восстановлении - позиция настраивается как нужно); в противном случае пробюлем не возникает никаких.


← →
Islander   (2004-09-29 23:54) [12]

2Panov:

1) У пользователя есть варианты в настройках использовать трей или нет. Если использовать, то проблем нет. А вот если трей не использовать, то окно надо просто свернуть.

2) Поместил ДО Application.Initialize. Ничего не изменилось.

3) Насчет показа окна за пределами экрана - за это спасибо! То, что нужно!

2Default:

Кнопка на таскбаре в этом случае мигать начинает.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
14-1096276994
Petr V. Abramov
2004-09-27 13:23
2004.10.17
Кто хочет поработать? (немного :)


14-1096088031
Шишкин Илья
2004-09-25 08:53
2004.10.17
Не могу установить компонент


3-1094999217
ANB
2004-09-12 18:26
2004.10.17
Проблема с ADO и FoxPro


3-1095651463
korvin
2004-09-20 07:37
2004.10.17
Поиск без учёта регистра


1-1096622729
panov
2004-10-01 13:25
2004.10.17
Symbol xxxxx is specific to a platform.




   Наверх