Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Еще один вопрос по Shell_NotifyIcon   Найти похожие ветки 

 
KyRo ©   (2003-10-30 02:18) [0]

Как я понял она получает события от мыши .Подскажите в какие
переменные она записыват данные о нажатых клавишах??


 
Иван Шихалев ©   (2003-10-30 02:27) [1]

Функция Shell_NotifyIcon никаких событий не получает (как это вообще?) и ни в какие переменные ничего не пишет.

При использовании этой функции указывается, какое сообщение и какому окну будет отправляться при действиях мыши на иконке.


 
KyRo ©   (2003-10-30 09:08) [2]

Ага понял.


 
KyRo ©   (2003-10-30 09:48) [3]

Тут возникает новый вопрос какой функцией ловить эти сообщения ?


 
Игорь Шевченко ©   (2003-10-30 10:23) [4]

оконной процедурой, как обычно


 
Woolen   (2003-10-30 10:39) [5]


> в какие
> переменные

Пишешь процедуру обработки сообщения в своей форме, например, после точки с зяпятой ставишь "message WM_твое сообщение;". Параметром функции должена быть структура ловимого сообщения (почти все такие структуры объявлены в дельфи), теле процедуры обрабатываешь то, что тебе было прислано.


 
Woolen   (2003-10-30 10:40) [6]

Да, параметр должен быть переменной.


 
KyRo ©   (2003-10-30 22:37) [7]

function Ttray.MainWndProc(hMainWnd:HWND;Message:UINT;wParam:WPARAM;Lparam:LPARAM):LRESULT;//stdcall;
begin
Result:=0;
if Message=WM_NOTIFYICON then begin
case lParam of
WM_LBUTTONDOWN: Lclick ;
WM_RBUTTONDOWN: begin end;
end end
else Result:=DefWindowProc(hMainWnd,Message,WParam,Lparam);
end;

Я сделал вот так но поче му то функция не как не реагирует..
Что я делаю не так ??


 
Иван Шихалев ©   (2003-10-30 22:42) [8]

Это что за зверь? Что такое TTray? Какое окно у тебя пытается использовать эту функцию? Ты пишешь на API или на VCL?

По поводу оконной функции вообще... http://fpc.by.ru/win32/


 
jonni ©   (2003-10-30 22:44) [9]

const
TRAY_CALLBACK = WM_USER + 1;

TNewNotifyIconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
//Version 5.0 is 128 chars, old ver is 64 chars
szTip: array [0..127] of Char;
dwState: DWORD; //Version 5.0
dwStateMask: DWORD; //Version 5.0
szInfo: array [0..255] of Char; //Version 5.0
uTimeOut:Integer;
szInfoTitle: array [0..63] of Char; //Version 5.0
dwInfoFlags: DWORD; //Version 5.0
end;

procedure AddSysTrayIcon;
procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;

procedure TForm1.SysTrayIconMsgHandler(var Msg: TMessage);
begin
case Msg.lParam of
WM_MOUSEMOVE:;
WM_LBUTTONDOWN:;
WM_LBUTTONUP:;
WM_LBUTTONDBLCLK:;
WM_RBUTTONDOWN:;
WM_RBUTTONUP:;
WM_RBUTTONDBLCLK:;
end;

procedure TForm1.AddSysTrayIcon;
begin
IconData.cbSize := SizeOf(IconData);
IconData.Wnd := AllocateHWnd(SysTrayIconMsgHandler);
{SysTrayIconMsgHandler is then callback message" handler}
IconData.uID := 0;
IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
IconData.uCallbackMessage := TRAY_CALLBACK; //user defined callback message
IconData.hIcon := Application.Icon.Handle; //an Icon"s Handle
IconData.szTip := "Please send me email.";
if not Shell_NotifyIcon(NIM_ADD, @IconData) then
ShowMessage("add fail");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AddSysTrayIcon;
end;

ne zabud" toka potom udalit" iconku iz tray pri zavershenie raboti


 
KyRo ©   (2003-10-30 22:51) [10]


> jonni ©

Да это все у меня уже сделано кроме обработчика событий от мыши.


> Иван Шихалев

Это компонент который я делаю.

Так а что не так в моей функции ??


 
Иван Шихалев ©   (2003-10-30 23:20) [11]


> Так а что не так в моей функции ??


Это не есть оконная функция. А данный компонент не есть окно.


 
jonni ©   (2003-10-31 00:12) [12]

const
TRAY_CALLBACK = WM_USER + 1;

procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;

IconData.uCallbackMessage := TRAY_CALLBACK;

procedure TForm1.SysTrayIconMsgHandler(var Msg: TMessage);
begin
case Msg.lParam of
WM_MOUSEMOVE:;
WM_LBUTTONDOWN:;
WM_LBUTTONUP:;
WM_LBUTTONDBLCLK:;
WM_RBUTTONDOWN:;
WM_RBUTTONUP:;
WM_RBUTTONDBLCLK:;
end;

a chem tebe ne ravit"sya etot obrabotchik sobitiy ot mishi??


 
KyRo ©   (2003-10-31 00:49) [13]

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


 
KyRo ©   (2003-10-31 02:32) [14]

Что то снова не выходит.
Распишите алгоритм передачи этих сообщений.
Я понимаю происходит так.
Shell_NotifyIcon возвращает сообщение TMessage в форму на которую указывает индентификатор формы из той же функции.
После чего надо его обработать оконной функцией .Правильно я понял ??
Есле да то вопрос. Я ведь делаю компонент ран-тайм может он не видит Message который был послан форме ??


 
Diamond Cat ©   (2003-10-31 03:19) [15]

на примере
> jonni ©

хотя он несколько сгустил но тем не менее
в процедуре AddSysTrayIcon создается пакет данных, который будет передан шелу с помощью функции Shell_NotifyIcon
в этом пакете:
IconData.Wnd := AllocateHWnd(SysTrayIconMsgHandler) в какую функцию какого окна будет переданно сообщение о действии над значком
IconData.uID := 0; идентификатор
IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; задаем вид (структуру иконки)
IconData.uCallbackMessage := TRAY_CALLBACK; сообщение которое будет приходить в назначенный обработчик см.выше.
IconData.hIcon := Application.Icon.Handle; откуда берется значек
IconData.szTip := "Please send me email."; подсказка к значку
if not Shell_NotifyIcon(NIM_ADD, @IconData) передача пакета
then
ShowMessage("add fail");

далее в случае прохождения курсосором над занчком или какого любого другого действия (со значком) в наш обработчик примкакивает сообщение которое мы описали а именно TRAY_CALLBACK, в этом сообщении а именно в его Lparam содержиться код действия совершенного со значком
jonni © закатал в виде кейса все сообщения от мыши только не поставил реакцию на них вот более конкретный пример
procedure TForm1.SysTrayIconMsgHandler(var Msg: TMessage);
begin
if Msg.lParam =
WM_RBUTTONUP then close;
end;
кстати при закрытии (onclose к примеру) не лишним будет прибить иконку Shell_NotifyIcon (NIM_DELETE, @nid);
Я бы сделал чуть проще и просто назначил обработчиком сообщений, обработчик самого окна IconData.Wnd := Form1.handle но сути это не меняет


 
KyRo ©   (2003-10-31 09:56) [16]

Да процедуры на сообщения от мыши я поставил!
У меня почему то вообще не вызывается эта функция которая рассматривает Message.
Для проверки я поставил там ShowMessage("dfdf")перед Case но она не вызывается хотя должна, а все остальное уже сделано.


 
KyRo ©   (2003-10-31 10:08) [17]

Все сделал я просто передавал на форму ,а не в процедуру компонента. Вобщем всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
1-86368
BlackTiger
2003-12-15 14:31
2003.12.26
Косячише Delphi? MDI-приложение и Charset(!)


3-86303
Vick
2003-12-02 12:05
2003.12.26
Переопределение temporary file folder в MSSQL


3-86284
Mox Fulder
2003-12-02 20:31
2003.12.26
Кодировки


7-86569
_Narayan_
2003-10-21 15:55
2003.12.26
DLL


14-86486
Alekzzz
2003-12-04 02:25
2003.12.26
Где взять компонент типа MediaPlayer?