Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как запустить приложение свернутым? [D7, WinXP]


Islander ©   (2004-09-29 10:54:00) 

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

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

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

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

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

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


Islander   (2004-09-29 23:54:00) [1]

2Panov:

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

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

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

2Default:

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


panov   (2004-09-29 22:46:00) [2]

>Islander   (29.09.04 22:14) [8]

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

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

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


default   (2004-09-29 22:21:00) [3]

"Но ведь та форма, которая создана первой, является в данном случае главной, если других форм не создано, верно?"
та форма, которая создана первой, является главной
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:19:00) [4]

>Islander   (29.09.04 22:14) [8]

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


Islander   (2004-09-29 22:14:00) [5]

2Panov:

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

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


panov   (2004-09-29 21:01:00) [6]

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


Islander   (2004-09-29 20:05:00) [7]

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;

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


TUser   (2004-09-29 14:39:00) [8]

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


Islander   (2004-09-29 13:23:00) [9]

2b@mboZe:

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

2clickmaker:

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

2TUser:

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


TUser   (2004-09-29 12:45:00) [10]


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

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


b@mboZe   (2004-09-29 11:06:00) [11]

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:00) [12]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо