Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Иконка в SysTray

Автор: imaG
Дата сообщения: 30.10.2001 16:32
Необходимо сворачивать приложение в иконку, в SysTray.
Автор: Daemon
Дата сообщения: 30.10.2001 16:53
Буду писать на Делфях. Переведешь потом во что хочешь.
1. Определяешь тип:
TNotifyIconData = record
cbSize: DWord;
Wnd: HWND;
uID: Uint;
uFlags: Uint;
uCallbackMessage: Uint;
hIcon: HIcon;
szTip: array [0..63] of AnsiChar;
end;
Затем у тебя есть главная форма. Определяешь ее создание так:

constructor TfrmMain.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FNotifyIconData.cbSize:= SizeOf(TNotifyIconData);
FNotifyIconData.hIcon:= Application.Icon.Handle;
StrPCopy(FNotifyIconData.szTip,Application.Title);
FNotifyIconData.uCallbackMessage:= TRAY_MSG;
FNotifyIconData.uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP;
FNotifyIconData.uID:=1;
FNotifyIconData.Wnd:= frmMain.Handle;
Shell_NotifyIcon(NIM_ADD,@FNotifyIconData);
end;
(В данном случае главная форма СРАЗУ сворачивается в SysTray и необходимо сделать еще в проекте Application.ShowMainForm:= False)

Что не понятно - пиши т.к. это в кратце. Но у меня все работает.
А вообще посмотри в "Делфи 5 Руководство разработчика" - великая книга!
Автор: imaG
Дата сообщения: 30.10.2001 16:57
Daemon
Спасибо.

Только, забыл добавить, что сворачивать надо в VC++. Sorry.

Автор: Daemon
Дата сообщения: 30.10.2001 17:20
imaG
На самом деле не имеет значение в чем писать. В любом случае используется функция API Shell_NotifyIcon
А принцип использования я тебе написал. Дерзай. Если что - все равно пиши.
Автор: Wowik
Дата сообщения: 31.10.2001 03:35
Несколько замечаний
TNotifyIconData тип уже определен в модуле shellapi
соответственно для VC в хейдере shellapi.h определен тип NOTIFYICONDATA
Посмотри http://www.webprog.vov.ru/components/index.shtml?id=5
Там на Delphi простейшая реализация IkonTray
Автор: imaG
Дата сообщения: 02.11.2001 11:15
OK.
Всё получилось, всем спасибо.
Автор: Farch
Дата сообщения: 20.08.2002 22:08
привет всем
значит такая беда ...
есть приложение которое сворачиваеться в systray и нужно сделать для него right click меню которое !!! будет изменяться во время выполнения программы посоветуйте компанент или как это на API написать если это возможно? заранее всех благадарю!
Автор: UncoNNecteD
Дата сообщения: 21.08.2002 01:12
Farch
Используй обычный TPopupMenu, а вот вызывать его (показывать) придется через win messages. Обрабатывай сообщения приложения и лови правый клик!
Автор: Farch
Дата сообщения: 21.08.2002 09:20
UncoNNecteD
я в этом новечёк есть где нить статьи или можешь рассказать поподробнее но уже и за это стпасибо!
Автор: EndoR
Дата сообщения: 21.08.2002 15:48
UncoNNecteD
а он с иконкой будет пахать?
Wowik
блин, че-то не грузиться...
Автор: dremon
Дата сообщения: 21.08.2002 16:31
Могу прислать пример использования с исходниками на C++ - создание иконки, добавление popup-меню, обработка вызова меню.
Все на чистом Win32 API.
Автор: dremon
Дата сообщения: 22.08.2002 12:16
Farch
Послал
Автор: Farch
Дата сообщения: 22.08.2002 14:49
dremon
thanks!
Автор: ironwit
Дата сообщения: 01.11.2002 09:11
специалистам вопрос по trayicon. Как получить список иконок(handle) для дальнейшей с ними работы(имитация кликов на них...)?
Автор: f_serg
Дата сообщения: 01.11.2002 10:44
ironwit

Цитата:
Как получить список иконок(handle)

Никак. В трее, собственно, нет иконок. Там просто картинки, которые отрисовывает explorer. Он же отслеживает мышь и шлет события окнам.
Автор: ironwit
Дата сообщения: 01.11.2002 11:00
Хорошо, уточним.

Как сэмулировать нажатие клавиши мышки над строго определенной иконкой(окном) и работать с открытым Popup-ом?
Автор: UncoNNecteD
Дата сообщения: 01.11.2002 12:52
ironwit
Просто шли мессадж нужному приложению.
EndoR
там не иконка как уже написали.
Автор: ironwit
Дата сообщения: 01.11.2002 13:24
как послать сообщение например ICQ?
Автор: f_serg
Дата сообщения: 01.11.2002 15:10
ironwit
FindWindow() - находишь окно ICQ. Оно найдется, даже если свернуто в трей. SendMessage() - шлешь сообщение.
Автор: ironwit
Дата сообщения: 01.11.2002 15:11
имеется в виду системное сообщение программе(процессу) ICQ.
Автор: UncoNNecteD
Дата сообщения: 01.11.2002 16:41
так как f_serg сказал
Автор: ironwit
Дата сообщения: 05.11.2002 11:24
немного разобрался. Но возник следующий вопрос - как получить список иконок(handle,имя, размер...) отображенных в systemtray?
Автор: UncoNNecteD
Дата сообщения: 05.11.2002 12:26
ironwit
Это не нужно.
Автор: ironwit
Дата сообщения: 05.11.2002 12:39
хорошо, тогда такой вопрос.
как можно отправить иконке аськи в трее щелчок правой клавишей мишки?

Добавлено
ок. получилось поиметь список всех хендлов. как теперь известному хендлу ICQ отправить сообщение о нажатой клавише на мышке?
Автор: UncoNNecteD
Дата сообщения: 05.11.2002 14:10
ironwit
Почитай о WinAPI. Документацию, мануалы...
Ты чтоже, за каждым идентификатором будешь сюда постить?
Это же не справочник! Учись пользоватся литературой!
Принципиально тебе объяснили, а конкретику сам додумывай! Иначе какой из тебя программист?
Удачи!
Автор: ironwit
Дата сообщения: 05.11.2002 14:20
ладно, ладно че ругаешься.

просто практически первый раз работаю с таким. :-)
Автор: pbromiks
Дата сообщения: 29.11.2002 22:47
Пардоньте, но я не понял как прменять иконку во время исполнения программы
Автор: f_serg
Дата сообщения: 30.11.2002 09:27
pbromiks

NOTIFYICONDATA lpData;

lpData.cbSize = sizeof(lpData);
.......
lpData.hIcon = MyNewIcon; // Здесь любая иконка.
.......

Shell_NotifyIcon(NIM_MODIFY, &lpData);

Автор: pbromiks
Дата сообщения: 09.12.2002 20:21
Спасибочки...... Попробую....
Автор: pbromiks
Дата сообщения: 11.12.2002 20:59
Только вот мерцание во время смены иконки.
Подскажите плз как избавиться?

Страницы: 123

Предыдущая тема: нуна помощь по Си:)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.