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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2008, 16:01   #1
KiDoki
Форумчанин
 
Регистрация: 06.10.2008
Сообщений: 102
По умолчанию Сворачивание в трей не выходит

С наступающим.
Проблемка следующая:
сделал приложение, должно сворачиваться в трей, использую компонент CoolTrayIcon. Все сделал как надо, поставил нужные значения на true. Но приложение сворачивается в нижний левый угол, а не в трей. Думаю что-то намудрил в свойствах формы, посмотрите пожалуйста, в аттаче скрин со всеми пропертис или тут http://rapidshare.com/files/178440670/31.12.jpg.
Прошу помощи, хочу закончить в этом году. Заранее благодарю.
Изображения
Тип файла: jpg 31.12.jpg (17.8 Кб, 190 просмотров)

Последний раз редактировалось KiDoki; 31.12.2008 в 16:05.
KiDoki вне форума Ответить с цитированием
Старый 31.12.2008, 16:26   #2
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

1. В скрине ничего невидно.
2. Для сворачивания/разворачивания юзается следущий алгоритм:
Код:
procedure hideShowForm(const hide: boolean);
begin
   if hide then
   begin
      Application.ShowMainForm := false;
      ShowWindow(Application.Handle, SW_HIDE);
      ShowWindow(Application.MainForm.Handle, SW_HIDE);
   end
   else
   begin
      Application.ShowMainForm := true;
      ShowWindow(Application.Handle, SW_RESTORE);
      ShowWindow(Application.MainForm.Handle, SW_NORMAL);
      SetForegroundWindow(Application.MainForm.Handle);
      ShowWindow(Application.Handle, SW_HIDE); { alwaysOnTop }
   end;
end;
Можешь юзать его так:
Код:
hideShowForm(IsWindowVisible(handle));
Altera вне форума Ответить с цитированием
Старый 31.12.2008, 16:32   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Что бы сворачивать форму в трей при нажатии на значок свернуть, вам нужно установить свойство CoolTrayIcon1.MinimizeToTray:=True; у компонента CoolTrayIcon. А что бы вообще сворачивать, допустим при нажатии на кнопку, то сворачивайте так:
Код:
Application.Minimize;            // это для наглядности
CoolTrayIcon1.HideMainForm;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 31.12.2008, 17:07   #4
KiDoki
Форумчанин
 
Регистрация: 06.10.2008
Сообщений: 102
По умолчанию

Спасибо за отклики. Попробовал способ Терран'а, поставил на событие кнопки. Работает, когда нажимаю на иконку в трее, открывается форма, но её размеры становятся больше. Как исправить?

ЗЫ
В аттаче скрин не виден, но если скачать с рапиды и увеличить, всё видно.
KiDoki вне форума Ответить с цитированием
Старый 31.12.2008, 17:25   #5
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

Цитата:
Сообщение от KiDoki Посмотреть сообщение
Спасибо за отклики. Попробовал способ Терран'а, поставил на событие кнопки. Работает, когда нажимаю на иконку в трее, открывается форма, но её размеры становятся больше. Как исправить?
при всем уважении, лучше использовать способ Altera.
Там таких проблем не может быть впринципе.

Немного модифицированная статья из drkb
=================================== ====
Для изменения значка в трее используется класс TShellNotifyIcon модуля ShellApi

Объявим следующую процедруру:

Параметры к ней такие: n - номер операции ( 1 - добавить, 2 - удалить, 3 - заменить) и Icon - сама иконка с которой будет делаться эта операция

Код:
Procedure TForm1.Ic(n:Integer;Icon:TIcon);
Var Nim:TNotifyIconData;
begin
With Nim do
Begin
cbSize:=SizeOf(Nim);
Wnd:=Form1.Handle;
uID:=1;
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;
теперь: OnMinimize формы
Ic(1, Application.Icon); // Добавляем значок в трей
ShowWindow(Handle, SW_HIDE); // Скрываем программу

Теперь нам нужно, чтобы значок в трее мог реагировать на манипуляции с ним. Если Вы внимательно посмотрите процедру Ic(), то Вы увидите там ссылку на сообщение WM_USER+1. Это не что иное, как сообщение, которое приходит нам от этого значка. Обычно для значка в трее делают всплывающее меню и выводят там те или иные действия. Но TPopUpMenu делается обычно для правой кнопки, по левой же просто активируют приложение. На форму кидаем комопонент TPopUpMenu (пусть это будет PopUpMenu1) и заносим в него все пункты меню, которые мы хотим, чтобы онм появилис в меню, которое будет всплывать по нажатию правой кнопки на значке.

После этого описываем обработчик: В вышеназванную секцию protected добавляем ещё одну процедуру IconMouse, которая будет реагировать на сообщение WM_USER+1

Код:
protected
procedure ControlWindow(var Msg: TMessage); message WM_SYSCOMMAND;
procedure IconMouse(var Msg: TMessage); message WM_USER + 1;
Теперь описываем собственно процедуру.

Код:
  procedure TForm1.IconMouse(var Msg: TMessage);
   var p: tpoint;
   begin
     GetCursorPos(p); // Запоминаем координаты курсора мыши
     case Msg.LParam of // Проверяем какая кнопка была нажата
       WM_LBUTTONUP, WM_LBUTTONDBLCLK: {Действия, выполняемый по одинарному или двойному щел?ку левой кнопки мыши на зна?ке. В нашем слу?ае это просто активация приложения}
         begin
           Ic(3, Applicattion.Icon); // Удаляем зна?ок из трея
           ShowWindow(Application.Handle, SW_SHOWNORMAL); // Восстанавливаем окно программы
         end;
       WM_RBUTTONUP: {Действия, выполняемый по одинарному щел?ку правой кнопки мыши}
         begin
           SetForegroundWindow(Handle); // Восстанавливаем программу в ка?естве переднего окна
           PopupMenu1.Popup(p.X, p.Y); // Заставляем всплыть тот самый TPopUp о котором я говорил ?уть раньше
           PostMessage(Handle, WM_NULL, 0, 0) // Обнуляем сообщение
         end;
     end;
   end;
Для выполнения пунктов всплывающего меню, пишите стандартные обработчики onClick() для его пунктов.

©Drkb::01753

Автор: Song

Взято с Vingrad.ru http://forum.vingrad.ru
=================================== ==
Роман Радер вне форума Ответить с цитированием
Старый 31.12.2008, 17:47   #6
KiDoki
Форумчанин
 
Регистрация: 06.10.2008
Сообщений: 102
По умолчанию

Спасибо, большое за статью. Мои мозги ничего не переварили даже после перечитывания в 3-ий раз. Но я нашел выход. На событие он клик в трее выставлть для формы высоту и ширину вручную(форма у меня не меняет размеров).
А статью перечитаю ещё раз, но уже где-то через недельку.
Ещё раз всем спасибо, всех с наступающим!

Последний раз редактировалось KiDoki; 31.12.2008 в 22:04.
KiDoki вне форума Ответить с цитированием
Старый 26.01.2009, 08:23   #7
Kamikadze_666
Пользователь
 
Аватар для Kamikadze_666
 
Регистрация: 11.05.2007
Сообщений: 20
По умолчанию

Код:
hicon:=Icon.Handle;
Как я понимаю берет значок у исполняемого файла.
А как реализовать так, чтобы в трею помещался значок, взятый из компонента ImageList?

Последний раз редактировалось Kamikadze_666; 26.01.2009 в 08:26.
Kamikadze_666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сворачивание в трей Sanek777 Общие вопросы Delphi 5 24.08.2011 14:20
компилировать не выходит 3.14oner Общие вопросы по Java, Java SE, Kotlin 5 08.11.2008 18:36
HELP ME В Delphi выходит ошибка Delfyak О форуме и сайтах клуба 2 28.05.2008 18:35
[ищу мануал] Сворачивание в трей и показз сообщений из него. lazutov Общие вопросы Delphi 8 21.04.2008 00:02