Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/84: Рейтинг темы: голосов - 84, средняя оценка - 4.96
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497

Развернуть копию программы из трея

16.02.2012, 22:32. Показов 17372. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы 2ая копию программы разворачивала 1уй копию программы.
Много читал по форумам но так и не нашёл ничего.
Мб что то пропустил если поподалось киньте пожалуйста ссылочку.
Я так понял что программа должна послать сообщение на разворачивание как то так.
средставами sw_show, normal и тд. и тп не получилось так как.при разворачивании проги компоненты не отображаются некоторые.

программа сворачивается через cooltrayicon через процедуру(если это важно)

Заранее спасибо.
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2012, 22:32
Ответы с готовыми решениями:

Развернуть программу из трея
Таким образом сворачивается программа в трей- procedure TForm1.Button1Click(Sender: TObject); begin TrayIcon1.Visible := True; ...

Работа программы из трея
подскажите пожалуйста как сделать так что бы программа, свернутая в трей, считывала время на компе, сверяла с другим временем ну и дальше...

Развернуть окно программы
В Свойствах окна (Properties/Aling) ставлю alClient. В окне стоит: 1. ToolBar его длина не увеличивается с изменение размеров окна 2....

82
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
17.02.2012, 01:47  [ТС]
Студворк — интернет-сервис помощи студентам
т.е. иконка будет в трее?
'// вместо этого своё напишешь' - Что там писать?(не знаком с этой процедурой) )
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.02.2012, 01:51
Цитата Сообщение от paxan86 Посмотреть сообщение
т.е. иконка будет в трее?
Нет такого понятия "свернуть в трей". Иконка будет всегда, если ты её ручками (в коде) отобразишь. А форму не надо сворачивать во избежание лишних глюков.

Цитата Сообщение от paxan86 Посмотреть сообщение
'// вместо этого своё напишешь' - Что там писать?(не знаком с этой процедурой) )
напишешь вместо той строчки свой код, который создаёт иконку в трее.
0
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
17.02.2012, 02:02  [ТС]
у меня компонент..

Добавлено через 3 минуты
я код для трея вообще не писал компонент сам всё делает...

Добавлено через 29 секунд
я так понимаю придётся переписывать на ручной трей?

Добавлено через 5 минут
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Что то тут не так, все должно отображаться, получить бы весь проект для рассмотрения
Можете в песочнице запустить =)
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.02.2012, 02:03
paxan86, если у тебя какой-то компонент показывает значок только при сворачивании формы, то сочувствую. Просто на самом деле - сворачивание формы и отображение значка в трее - это события, не имеющие друг к другу абсолютно никакого отношения. Неопытные люди, увидев, что после сворачивания формы её значок убирается с панели задач,и появляется в трее, говорят, "свернулась в трей". отсюда и возникло словосочетание, хотя такое на самом деле не происходит - форма лишь скрывается методом Hide, и в этот же момент создаётся значок в трее
Кстати, вручную этот значок можно вывести как два пальца об асфальт. Если хочешь, помогу.
0
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
17.02.2012, 02:08  [ТС]
конечно я никогда не против помощи=)
насчёт ''свернулась в трей' в полне возможно не могу отрицать...=) теперь буду знать..=)
но я всегда был уверен что компоненты почти все максимально ограничены и легки для понимания начинающему программисту, я считаю что создание собственного компонента на уровень выше...
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
17.02.2012, 02:08
Глючный какой то компонент, хочешь дам другой или, код как написать самому?
Правда гарантии что все будет отображаться нет, это не из-за компонента скорее всего.
0
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
17.02.2012, 02:12  [ТС]
какой компонент cooltrayicon?
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
17.02.2012, 02:22
Да, он как то не доработан, у меня его нет правда, но судя по твоему приложению это так.
0
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
17.02.2012, 02:24  [ТС]
ну не знаю он вроде самый популярный.. =)
0
Заблокирован
17.02.2012, 02:29
а проблема то в чом? я чот ничо не пойму, начинал с разворота окна, терь иконки в трее
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.02.2012, 02:34
Цитата Сообщение от paxan86 Посмотреть сообщение
конечно я никогда не против помощи=)
сейчас накалякаю тебе пример
0
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
17.02.2012, 02:37  [ТС]
проблема так и есть в разворачивании но мне 2 форумчанина посоветовали написать вручную иконку трея..

Не по теме:

я как не прочитаю Ваш комент так смешно)) толи залипаете Вы(шутка) толи я не очень хорошо изъяснил проблему =)



Добавлено через 1 минуту
Цитата Сообщение от deathNC Посмотреть сообщение
сейчас накалякаю тебе пример
Окай =)
0
Заблокирован
17.02.2012, 02:43
ну раз аш два форумчанина посоветовали, то канечно пишите
0
17.02.2012, 02:44  [ТС]

Не по теме:

Цитата Сообщение от БогДелфей Посмотреть сообщение
ну раз аш два форумчанина посоветовали, то канечно пишите:)
Значит одобряешь? =)

0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
17.02.2012, 02:49
fw_hint_trayicon.zip Компонент с примером
2
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.02.2012, 02:50
Насчёт того, что у тебя не отображаются некоторые компоненты - у меня такое было. Это особенность Delphi 7 в винде Win7. Уже не помню, как с этим боролся.

О значке

Надо добавить в uses модуль ShellAPI

Там описана структура (record) для значка трея:
TNotifyIconData
Значком полностью управляет процедура: Shell_NotifyIcon
У неё есть два параметра:
1) Действие, а именно:
- Создать NIM_ADD
- Изменить NIM_MODIFY
- Удалить NIM_DELETE
2) Указатель на структуру со значком TNotifyIconData
например, чтобы отобразить значок, надо заполнить структуру данными:
Delphi
1
2
3
4
5
6
7
8
9
10
private
  tray1: TNotifyIconData;
...
  _tray1.cbSize := SizeOf(_tray1); // размер структуры
  _tray1.Wnd := Self.Handle; // хэндл формы, которой постить сообщения событий иконки
  _tray1.uID := 1; // номер значка
  _tray1.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; // флаги
  _tray1.uCallbackMessage := WM_User + 2; // сообщение, которое посылать форме
  _tray1.hIcon := Application.Icon.Handle; // хэндл иконки (т.е. иконка)
  _tray1.szTip := 'Подсказка при наведении курсора в трее!';
Теперь структура готова. Можно в любое время сменить подсказку при наведении.
Чтобы добавить значок в трей, надо вызвать процедуру с параметром NIM_ADD:
Delphi
1
Shell_NotifyIcon(nim_add, @_tray1);
Чтобы удалить значок, надо вызвать процедуру с параметром NIM_DELETE:
Delphi
1
Shell_NotifyIcon(nim_delete, @_tray1);
Если захочется поменять подсказку на значок (или ещё, что есть в структуре) когда он уже отображён, то надо вызвать процедуру с параметром NIM_MODIFY:
Delphi
1
Shell_NotifyIcon(nim_delete, @_tray1);
Вот, в принципе и всё и делов-то

Но то, что мы создали значок в трее ещё ни о чём не говорит - ведь он никак не влияет на форму.Точнее он будет посылать форме сообщения при наведении на него курсора, при кликании по нему... поэтому надо создать обработчик таких событий. Мы не зря при заполнении структуры делали такое:
Delphi
1
_tray1.uCallbackMessage := WM_User + 2; // сообщение, которое посылать форме
Потому что сообщение с кодом WM_User + 2 значок как раз и будет посылать форме, хэндл которой мы указали опять же при заполнении структуры.
В разделе формы public напиши вот такой код:
Delphi
1
2
  public
    procedure TrayEvent(var Msg: TMessage); message WM_User + 2;
и жми Ctrl + Shift + C. Редактор кода создаст процедуру. В ней пиши:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TMainForm.TrayEvent(var Msg: TMessage);
var
  _cur: TPoint; // координата курсора
begin
  GetCursorPos(_cur);
  Case msg.LParam of
    WM_LButtonUp, WM_LButtonDBLCLK:
      begin
        Shell_NotifyIcon(nim_delete, @_tray1);
        ShowWindow(Handle, SW_Show); // Показываем
      end;
    WM_RButtonUp:
      begin
        popupmenu1.Popup(_cur.X, _cur.Y); // показываем контекстное меню
      end;
  end;
end;
Это процедура, которая отлавливает наше сообщение от нашего "значка в трее". В параметре LParam указывается конкретное событие. обычно по одному щелчку или двойному щелчку ЛКМ фрому отображают, а по щелчку ПКМ показывают контекстное меню. В этой процедуре мы так и делаем. А когда форма показывается, значок надо убрать (хотя необязательно).
Обработчик событий от значка мы написали.
теперь надо поймать сворачивание формы, и заменить это событие скрытием формы. Объявляй ещё одну процедуру
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public
  ...
  procedure ControlWindow(var Msg: TMessage); message WM_SysCommand;
  ...
procedure TMainForm.ControlWindow(var Msg: TMessage);
begin
  If Msg.WParam = SC_MINIMIZE then
     begin
       Shell_NotifyIcon(nim_add, @_tray1);
       ShowWindow(Handle, sw_Hide);
     end
   else // иначе
     inherited; // не перехватываем сообщение
end;
Она перехватит сворачивание, и спрячет форму (не даст ей свернуться, но спрячет её).
Вот и всё. Учитель с меня такой, как из тебя балерина, поэтому, вероятно, объяснил не совсем понятно. Для этого прикрепил рабочий пример всего, что описал выше.

P.S. при удалении значка из трея, структуре ничего не делается. Поэтому её можно заново использовать (не перезаполнять) сколько угодно раз
Вложения
Тип файла: rar Tray.rar (7.2 Кб, 20 просмотров)
2
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
17.02.2012, 02:52
У тебя проблема неотображения компонентов в том что окно формы создается в свернутом виде, исправь это и все будет нормально и с твоим компонентом.
1
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.02.2012, 02:55

Не по теме:

ёшкин свет, сколько писанины то я нафлудил :rofl:
а казалось, пара строчек получится



Добавлено через 2 минуты
Цитата Сообщение от Игорь[Igor
;2498071]У тебя проблема неотображения компонентов в том что окно формы создается в свернутом виде, исправь это и все будет нормально и с твоим компонентом.
Очень маловероятно. Если ТС пишет на Delphi 7, то тут понятно. У меня такие же проблемы были. Вот запамятовл, как их решить.
Можно попробовать на отображение формы написать что-то типа:
Delphi
1
2
3
MainForm.Repaint;
// или
MainForm.Refresh;
не помню

Добавлено через 53 секунды
Игорь[Igor], движок форума воспринял твой ник как какой-то вложенный тег
1
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
17.02.2012, 03:08
Переходим на движок форума
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.02.2012, 03:11
Цитата Сообщение от Игорь
Переходим на движок форума

Не по теме:

это я про цитату в моём предыдущем посте. Она немного портачная получилась :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2012, 03:11

Зависают torrent-программы, развернуть из трея не удается
Сначала мюторрент... Через некоторое время работы не отвечает... Развернуть из трея тоже не удается... Скачал BitTorrent - тоже самое... ...

Развернуть програму из трея
Короче свернул программу в трей при помощи Shell_NotifyIcon, немогу развернуть обратно, то что я передал в uCallbackMessage я так понимаю...

Развернуть приложение из трея
Добрый день, тема не новая, но ответа не нашел. Как через WinApi можно развернуть приложение из трея.? Процесс и дескриптор...

Не получается развернуть приложение из трея
Доброго времени суток форумчане. Подскажите по каким причинам может не работать команда Application.WindowState = xlNormal? Проблема...

Как развернуть форму из трея?
Всем привет:) Как программно развернуть программу из трея?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru