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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> мелькание формы при загрузке, автоматическое сворачивание в трей 
V
    Опции темы
Cashey
Дата 9.2.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



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


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
THandle
Дата 9.2.2009, 11:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Поставить в файле проекта(dpr) до создания главной формы(CreateForm) следующую строчку:
Код


  Application.ShowMainForm := False;


PM   Вверх
Frees
Дата 9.2.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



WindowState поставить в wsMinimized не помогает?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Cashey
Дата 9.2.2009, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



Цитата(Frees @  9.2.2009,  12:14 Найти цитируемый пост)
WindowState поставить в wsMinimized не помогает?

нет, это не помогает.

Цитата(THandle @  9.2.2009,  12:13 Найти цитируемый пост)
Поставить в файле проекта(dpr) до создания главной формы(CreateForm) следующую строчку:код Pascal/Delphi1:  Application.ShowMainForm := False;

а вот это вроде помогло. щас еще поттестю. спасибо.  smile 


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Cashey
Дата 9.2.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



Цитата(THandle @  9.2.2009,  12:13 Найти цитируемый пост)
Application.ShowMainForm := False;

теперь значек мелькает на панели задач перед тем как переместится в трей. это уже менее критично, но все равно не красиво


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
THandle
Дата 9.2.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Cashey, странно.... Какая версия Delphi? Какие действия выполняются...? 

У меня в 7, 2009 пустой экземп с таким вот dpr'ом:
Код


program Project1;

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

{$R *.res}

begin
  Application.Initialize;
  Application.ShowMainForm := False;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Не мелькает.

Можно попробовать еще что то типа:
http://forum.vingrad.ru/faq/topic-183849.html
(хотя не лучший вариант)


PM   Вверх
Cashey
Дата 9.2.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



Цитата(THandle @  9.2.2009,  12:56 Найти цитируемый пост)
Cashey, странно.... Какая версия Delphi? Какие действия выполняются...? 

у меня D6
Код
begin
  Application.Initialize;
  Application.Title := 'Отправка сообщения';
  Application.ShowMainForm := False;
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TFSendMail, FSendMail);
  Application.Run;
end.


Цитата(THandle @  9.2.2009,  12:56 Найти цитируемый пост)
Можно попробовать еще что то типа:http://forum.vingrad.ru/faq/topic-183849.html(хотя не лучший вариант)

там предлженно
Цитата
Теперь допиши после "Application.CreateForm(TForm1, Form1);" строчку "Application.ShowMainForm:=false;". У тебя должно получиться:Код

program Project1; 

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

{$R *.RES} 

begin 
Application.Initialize; 
Application.CreateForm(TForm1, Form1); 
Application.ShowMainForm:=false; 
Application.Run; 
end.


попробую так


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
THandle
Дата 9.2.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Cashey, скачал Delphi 6... В пустом тестовом проекте с двумя формами ничего не мелькает на Win XP Pro SP2.

Кинь тогда проектик что ли посмотреть. Может быть затрагивается при сворачивании в трей все это дело? 
PM   Вверх
Cashey
Дата 9.2.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



Цитата(THandle @  9.2.2009,  14:38 Найти цитируемый пост)
Cashey, скачал Delphi 6... В пустом тестовом проекте с двумя формами ничего не мелькает на Win XP Pro SP2.Кинь тогда проектик что ли посмотреть. Может быть затрагивается при сворачивании в трей все это дело? 

сам проект довольно массивный и скидывать его смысла нет, а сворачивание в трей стандартное, тут никакого велосипеда нет
Код
procedure TMainForm.ControlWindow(var Msg: TMessage);
  begin
  inherited;
      if (Msg.WParam = SC_MINIMIZE) then
      begin
        Application.ShowMainForm := false;
        ShowWindow(Handle, SW_HIDE); // Скрываем программу
        ShowWindow(Application.Handle, SW_HIDE);
        Ic(1, Application.Icon); // Добавляем значок в трей
      end
  end;

Procedure TMainForm.Ic(n:Integer;Icon:TIcon);
  Var Nim:TNotifyIconData; 
begin
 With Nim do
Begin
 cbSize:=SizeOf(Nim);
 Wnd:=MainForm.Handle;
 uID:= n;
 uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
 hicon:=Icon.Handle;
 uCallbackMessage:=wm_user+1;
 szTip:='Агент';
End;

 Case n OF  
 1: Shell_NotifyIcon(Nim_Add,@Nim);
 2: Shell_NotifyIcon(Nim_Delete,@Nim);
 3: Shell_NotifyIcon(Nim_Modify,@Nim);
 End;
end;


ну и в FormCreate
Код
PostMessage(Self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);


Это сообщение отредактировал(а) Cashey - 9.2.2009, 15:12


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
THandle
Дата 9.2.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Цитата

Application.ShowMainForm := false;


В данном месте это уже ничего не даст, только до создания форм...

    
Код

PostMessage(Self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);


Пример у меня работать почему-то не хочет, но могу предположить, что иконка на панели задач вылазит из за того что сообщение посылается. То есть пока там обработка то до него дойдет... Многое успеется. Можно попробовать SendMessage.
Хотя как то странно. ИМХО:

В dpr пишем Application.ShowMainForm := false;
А в OnCreate главной формы только запуздыриваем иконку в трей, без всяких махинаций с сообщениями.
PM   Вверх
Cashey
Дата 9.2.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

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



Кажись нашел проблему.
Дело в том, что хотя PostMessage(Self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); и была прописана в FormCreate первой строчкой, за ней шел довольно массивный код по созданию нескольких потоков и инициализации устройств. Возможно исполнение кода из-за этого тормозилось. Вставил application.ProcessMessages; после PostMessage и вроде мелькать перестало. Чуть позже проверю еще на более медленной машине.

Добавлено через 5 минут и 32 секунды
Цитата(THandle @  9.2.2009,  16:30 Найти цитируемый пост)
Пример у меня работать почему-то не хочет

это пример из DRKB статья "Как свернуть прогу в tray?"



--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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