Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: 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 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.041 c
9-1087116065
Жора
2004-06-13 12:41
2004.10.17
Проблемы с клавиатурой


1-1096868255
fisherman
2004-10-04 09:37
2004.10.17
QReport - проблемы.....


1-1096541739
Алексей
2004-09-30 14:55
2004.10.17
Дата последней модификации файла


14-1096045730
VictorT
2004-09-24 21:08
2004.10.17
Вот такой вот спам пришёл...


4-1094795847
ikivio
2004-09-10 09:57
2004.10.17
Получение информации из HKEY_CURRENT_USER другого пользователя