Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2013, 14:12   #1
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
Печаль Свертывание программы в трей

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

Это пример свертывания программы в трей. Но в нем есть ошибка, выявить которую пока не могу. Потому и обращаюсь за помощью. Если свертывать программу по "_", то все окей, восстановление тоже ок, но если попытаться свернуть программу из панели задач, она в первый раз прячется в трей как положено, а потом отказывается (а нужно чтоб постоянно свертывалась).

Спасибо.
Вложения
Тип файла: rar Code.rar (3.3 Кб, 27 просмотров)
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 27.12.2013, 15:17   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Вот код у меня нормально сворачивается:

Код:
procedure TMainFrm.OnMinimize(Var Msg:TMessage);
begin
  if Msg.WParam=SC_MINIMIZE then
    MainFrm.Hide else
  inherited;
end;
Но у меня проблема в другом, не могу развернуть при повторном запуске программы.
Вот код:
Код:
h := FindWindow(nil, PChar('Caption окна'));
      if h<>0 then
        SendMessage (h, WM_SHOWWINDOW, 1, 0) else
        MessageBox (h, 'Not Found', '', 5);
      exit;
При этом MainFrm.Show; прекрасно работает.
Как решить проблему?

Последний раз редактировалось FaTaL; 27.12.2013 в 15:25.
FaTaL вне форума Ответить с цитированием
Старый 27.12.2013, 17:17   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

По проблеме из первого поста:
заменить соотв. блок кода на такой
Код:
begin
  ActionIcon(2, Application.Icon); // Удаляем значок из трея
  ShowWindow(Handle, SW_SHOW); // Восстанавливаем окно программы
  SetForegroundWindow(Handle);
  ShowWindow(Application.Handle, SW_SHOW); // Восстанавливаем кнопку программы
end;
По второму посту не понял проблемы, есть тестовый пример ? И чем плох мейнформ.шоу, если он работает ? Или надо обеспечить работу для любого приложения, а не своего ? Тогда искать работающие примеры по findwindow, по идее в этом корень проблемы.

Последний раз редактировалось phomm; 27.12.2013 в 17:47.
phomm вне форума Ответить с цитированием
Старый 27.12.2013, 17:19   #4
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Спасибо phomm, помогло
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 27.12.2013, 17:43   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
По второму посту не понял проблемы, есть тестовый пример ? И чем плох мейнформ.шоу, если он работает ? Или надо обеспечить работу для любого приложения, а не своего ? Тогда искать работающие примеры по findwindow, по идее в этом корень проблемы.
Как мне послать окну команду MainForm.Show через SendMessage?
Ведь я хочу обработать повторный запуск своей программы.
Пробовал посылать WM_SYSCOMAND и wParam SC_RESTORE, окно восстанавливается, но не обрабатывается комманда свернуть по иконке в системном меню. Хотя когда я из той же самой программы делаю MainFrm.Show всё прекрасно восстанавливается. Как мне послать команду окну Show через SendMessage?
Или может метод Show это несколько системных команд (SC_RESTORE + Ещё что-то)?
FaTaL вне форума Ответить с цитированием
Старый 27.12.2013, 18:11   #6
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Вот мое решение проблемы:

Код:
Begin
ActionIcon (2,Application.Icon); // Удаляем значок из трея
ShowWindow(Handle,SW_SHOWNORMAL); // Восстанавливаем окно программы
ShowWindow(Application.Handle,SW_SHOWNORMAL); // Восстанавливаем кнопку программы
SetForegroundWindow(Handle);
End;
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 27.12.2013, 18:54   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
SC_RESTORE
Может SW_RESTORE ?
Вы ошиблись в букве или прямо так и делаете ? просто есть и то и это значение
phomm вне форума Ответить с цитированием
Старый 29.12.2013, 10:20   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Именно SC от SystemComand
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сворачивание программы в трей Baaandit Общие вопросы Delphi 19 24.01.2015 22:04
Сворачивание программы в трей, VB2010 YogShar Помощь студентам 0 26.04.2011 01:33
Иконка для чужой программы в области уведомлений(трей) Человек_Борща Общие вопросы Delphi 7 14.03.2011 17:28
Show&Hide-сворачиваем программы в трей Скарам Софт 4 27.01.2011 20:30
Свертывание в трей AlphA Общие вопросы Delphi 10 12.11.2007 13:01