|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.01.2009, 11:03 | #1 | |
Пользователь
Регистрация: 07.01.2009
Сообщений: 42
|
Значек в трее (Гаджет для XP)
Народ подскажите, как обработать события значка в трее приложением без формы, вернее без главной формы... Вообще задание такое:
Цитата:
Код:
1) хендел какого окна сюда передавать, если нет окна? можно передать Application.Handle? 2) как обработать событие? скажем, если записать uCallBackMessage := WM_MYICONNOTIFY; то как обработать это событие без окна? в окне то все просто: Код:
3) Как сделать окно по картинке, ну что бы он имело форму рисунка, ну непрозрачной его части (ну вот пример препод еще дал: christmas.zip)? Мне хоть без анимации такой как в пример... 4) Как нарисовать на заголовке чужого окна, а лучьше как картинку наложить на него (лучьше конечно картинку наложить)? Очень нужно, я и так в зачетную неделю не уложился... Хотя бы как события иконки в трее обрабатывать скажите, да и как окно по форме картинки создать, плиз Последний раз редактировалось kiloz; 07.01.2009 в 11:30. Причина: добавлен пример |
|
07.01.2009, 11:59 | #2 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
Для TrayIcon необходимо окно, как ни крути. Можно сделать на API, невидимое, вот только что вы понимаете под "Гаджетом"?
Можно класс создать. В твоем случае, просто скрой окно и все Application.ShowMainForm := False; в onCreate формы или в проекте. А все остальное оставь как есть. По поводу формы создай картинку и сделай на ней части которые не должно быть видно например ченым цветом. Положи TImage на форму и загрузи в него эту картинку. Код:
Сказал и загрустил от бесспорности своей правоты.
Последний раз редактировалось 0nni; 07.01.2009 в 12:07. |
07.01.2009, 12:10 | #3 | ||||
Пользователь
Регистрация: 07.01.2009
Сообщений: 42
|
Цитата:
Вообще препод сказал так: Цитата:
Цитата:
Возможно модифицирую следующий код для получения число Handle: Код:
Код:
Цитата:
Последний раз редактировалось kiloz; 07.01.2009 в 13:09. |
||||
07.01.2009, 13:41 | #4 |
delphi-ст!
Форумчанин
Регистрация: 02.01.2009
Сообщений: 825
|
Форма окна по картинке
-------------------------------------------------------------------------------- Автор: Nikolay WEB-сайт: http://delphibase.endimus.com { **** UBPFD *********** by delphibase.endimus.com **** >> Создание непрямоугольных окон. Данный пример наглядно показывает как можно создавать прямоугольные окна, по картинке. Зависимости: Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms. Автор: Nikolay, hapnik@mail.ru, Moscow Copyright: http://delphi.mastak.ru Дата: 27 апреля 2002 г. *********************************** ****************** } // Свойства окна небходимо поставить //Borders=None var regn, tmpRegn: integer; // регион окна и временный регион x, y: integer; // координаты пикселя nullClr: TColor; // «прозрачный цвет» begin nullClr := image1.picture.Bitmap.Canvas.Pixels[0, 0]; // Image1 это картинка по которой создается форма окна regn := CreateRectRgn(0, 0, image1.picture.Graphic.Width, image1.picture.Graphic.Height); for x := 1 to image1.picture.Graphic.Width do for y := 1 to image1.picture.Graphic.Height do if image1.picture.Bitmap.Canvas.Pixels[x - 1, y - 1] = nullClr then begin tmpRegn := CreateRectRgn(x - 1, y - 1, x, y); CombineRgn(regn, regn, tmpRegn, RGN_DIFF); DeleteObject(tmpRegn); end; SetWindowRgn(form1.handle, regn, true); end;
вступлю в команду разработчиков ПО на Delphi
|
07.01.2009, 13:41 | #5 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
Код:
Сказал и загрустил от бесспорности своей правоты.
|
07.01.2009, 13:55 | #6 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
Так а рисовать то что хочешь, вот например:
Код:
Могу еще предложить такой вариант, только чуть-чуть переделай.
Сказал и загрустил от бесспорности своей правоты.
|
07.01.2009, 14:34 | #8 | |
Пользователь
Регистрация: 07.01.2009
Сообщений: 42
|
Цитата:
И еще, не подскажите как модифицировать еще процедуру Код:
Последний раз редактировалось kiloz; 07.01.2009 в 14:39. |
|
07.01.2009, 15:30 | #9 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
Код:
Насчет подмены... теоретически нужно найти список всех процессов у которых есть окна. Во все процессы подгрузить свою dll с исправленной оконной процедурой. Вот функции необходимые для загрузки: OpenProcess(), VirtualAllocEx(), WriteProcessMemory(), GetProcAddress(), CreateRemoteThread(), VirtualFreeEx(). Потом нужно будет поставить хук на создание окна/процесса(такой есть вообще?) и по мере необходимости подгружать библиотеку к новым окнам/процессам. Но у тебя времени не так много вроде бы, а тут работы немало + код должен быть без ошибок иначе винда будет часто падать. Да и антивирус на такой способ загрузки ругаться будет. Есть еще способ - dll прописывается в реестре, после чего винда сам подгружает ее ко всем gui приложениям. Короче о "крсивой" отрисовке пока забудь... в крайнем случае можешь ко всем окнам прицепить окно, типа моего "сердечка".
Сказал и загрустил от бесспорности своей правоты.
|
08.01.2009, 01:06 | #10 |
Пользователь
Регистрация: 07.01.2009
Сообщений: 42
|
Всем СПС
Спосибо за помощь всем, почти доделал))) Знал бы я о этом форуме раньше...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Иконка в трее* | Krow | Win Api | 5 | 20.07.2008 02:41 |
Иконка в трее | Mangust | Win Api | 2 | 10.07.2008 13:43 |
Программа в Трее | LeoN | Общие вопросы Delphi | 5 | 08.12.2007 13:09 |
Значек в контексном меню | UnD)eaD)Snake | Общие вопросы Delphi | 8 | 28.08.2007 10:35 |
Значек программы в логоне | UnD)eaD)Snake | Общие вопросы Delphi | 8 | 27.08.2007 18:41 |