Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Панель задач, невидимая программа 
:(
    Опции темы
MacTep
Дата 14.5.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Как сделать, чтобы при запуске, окно моей программы не было видно на экране и на панели задач? После некоторой проверки (например, считывание из файла каких-лабо данных) программа становится видна и на экране и в панели задач, либо вообще закрывается и ее выполнение прекращается. 


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Nickel
Дата 14.5.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 7.2.2006

Репутация: 2
Всего: 4



Свойство формы Visible установи false, а когда проведёшь свою некоторую проверку ставь true.  Кстати если нужно просто скрыть с панели задач, то используй
Код

ShowWindow(Application.Handle,sw_hide);
 
PM   Вверх
Guedda
Дата 14.5.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



А лучше так:
Код

ShowWindow(Application.Handle,SW_HIDE);
ShowWindow(Application.Form1.Handle, SW_HIDE);
 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
MacTep
Дата 14.5.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Интересное дело, когда я создаю новый проект, свойство Visible формы Form1 уже установлено по умолчанию в False. И, тем не менее, форма при запуске видна. Это первое, что интересно. Второе: форма исчезает только тогда по команде Form1.Visible:=false, когда я эту строчку загоняю в реакцию на нажатие какой-нибудь кнопки. А как это сделать так, чтобы создалось впечатление, как будто форма и не запускалась, а сразу исчезла. Без лишних миганий или чего-либо еще... 


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Guedda
Дата 14.5.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Мой вариант:
Код

procedure TForm1.FormShow(Sender: TObject);
begin
  Form1.AlphaBlend := true;
  Form1.AlphaBlendValue := 0;
  ShowWindow(Application.Handle, SW_HIDE);
  ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;

Формы не видно. Проверено! 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
MacTep
Дата 14.5.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Ну вот это уже гуд... smile Никто же не говорил об AlphaBlend. smile Теперь все встало на свои места. Спасибо. И кстати, советовали сделать так: 
Цитата(Guedda @  14.5.2006,  15:11 Найти цитируемый пост)
ShowWindow(Application.Form1.Handle, SW_HIDE);
Ни фига. Именно надо писать не Form1, а MainForm. smile))
 


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Albinos_x
Дата 14.5.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



у меня хватает :
Код
...
ShowWindow (Application.handle, SW_HIDE);
...
 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Guedda
Дата 14.5.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(Albinos_x @  14.5.2006,  17:52 Найти цитируемый пост)
у меня хватает :

И на какое событие ты цепляешь это?
У меня, хоть на какое не цепляй, все равно форма виднеется миллисекунду... 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Albinos_x
Дата 14.5.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



одно в проекте и одно при создании формы (просто вешаю на 4 форму и она у меня динамическая, если не вешать второй раз то будет выскакивать...) 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
MacTep
Дата 14.5.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Цитата(Albinos_x @  14.5.2006,  17:13 Найти цитируемый пост)
одно в проекте и одно при создании формы 

Может как раз очень важно, что она у тебя динамическая? У меня форма не динамическая. Да еще, к тому же, она главная в проекте. Проще, думаю, поступить так, как советовал Guedda. Как думаешь?

Добавлено @ 22:43 
Окей, а как после вот этого
Код

ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
снова показать форму?

Добавлено @ 22:47 
И еще, очень интересно: мне нужно что-либо делать в обработчике OnCreate. А скрываю я форму на обработчие OnShow. Но вот косяк, OnCreate происходит раньше, чем OnShow. В итоге. Даже если и форма каким-то странным образом и стала невидимой, то после того, как проходит обработка OnCreate она снова становится видимой, а после этого вновь скрывается. В итоге, ее не видно. Что делать? smile 


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Yanis
Дата 14.5.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(MacTep @  14.5.2006,  15:54 Найти цитируемый пост)
Как сделать, чтобы при запуске, окно моей программы не было видно на экране и на панели задач? После некоторой проверки (например, считывание из файла каких-лабо данных) программа становится видна и на экране и в панели задач, либо вообще закрывается и ее выполнение прекращается.  

По моему проще вообще не создавать форму, если это не требуется... И ресурсы экономятся и логика программы выравнивается. Например:
Код
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if { условие } then
    Application.CreateForm(TForm1, Form1)
  else
    { твои действия };
  Application.Run;
end.
 или, если форма всё таки нужна (например для перхвата горячих клавишь), то всё в том же коде проекта использовать свойство ShowMainForm объекта Application. К примеру:
Код
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.ShowMainForm := { условие };
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Добавлено @ 22:52 
Конечно ShowMainForm можно использовать во всех пределах видимости TApplication, а не тольков коде проекта smile  


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
MacTep
Дата 14.5.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Да дело немного не в том. smile У меня программа работает с мьютексом. И больше одной копии программы запускать не хочу. Все работает, но форма моргает. Вот код:
Код

// Действия, выполняемые при запуске приложения
procedure TMacTepWMForm.FormCreate(Sender: TObject);
var hMutex: THandle;
begin
  hMutex:=CreateMutex(nil, False, 'MyMutex');
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      // если вторая копия программы запущена, то
      Application.Terminate;
    end
  else
    begin
      // какие -либо действия

      if ParamCount>0 then
        begin
             // какие-либо действия
        end;
    end;
end;



Добавлено @ 23:02 
как убрать моргание формы при повторном запуске программы? 


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Yanis
Дата 14.5.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(MacTep @  15.5.2006,  00:02 Найти цитируемый пост)
как убрать моргание формы при повторном запуске программы?

Так, что Yanis Дата 14.5.2006, 23:50 не подходит? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
MacTep
Дата 14.5.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Цитата(Yanis @  14.5.2006,  22:50 Найти цитируемый пост)
Application.ShowMainForm := { условие };
Вроде подошло. Не знаю, что у меня получится. Но пока это самый приемлемый результат. Хотя бы не моргает форма. Правда у проги есть попытки залезть в пинель задач, но они моментально прерываются. Но все равно, чуть дергается. Этого никак не избежать? smile
 


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Yanis
Дата 14.5.2006, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(MacTep @  15.5.2006,  00:24 Найти цитируемый пост)
Но все равно, чуть дергается. Этого никак не избежать?
Цитата(Yanis @  14.5.2006,  23:50 Найти цитируемый пост)
вообще не создавать форму
, т.е. создавать по условию.
Код
  if not { мьютекс существует? }
  then Application.CreateForm(TForm1, Form1)
  else { делаешь, что заблагорассудится :) };
 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.