void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_LBUTTONUP)
{
TPoint p = ScreenToClient(Mouse->CursorPos);
if((p.x<component.Right)&&(p.x>component.Left)&&(p.y<component.Bottom)&&(p.y>component.Top))
{
...
Handled = true;
}
}
}
OnCLICK
Вообщем такая проблема:
Есть компонент визуальный, но у него нету встроенного обработчика события OnClick.
Как добавить компоненту (не вмешиваясь в его код, а лишь прописав в своей программе код) обработку события OnClick?
1. В OnCreate событии написать Application->OnMessage = AppMessage;
Проблема в том, что этот компонент НЕ расположен на самой форме. Этот компонент - иконка в системном трее (tray icon). У этого компонента всё хорошо, кроме того, что у него отсутствуют какие-либо события. Вот и хочется этому компоненту (иконка в трее) добавить событие OnClick...
[code:]
TTrayICon
{
..
private:
TWndMethod OldWnd;
void __fastcall NewWnd(TMessage & Msg);
..
}
TTrayIcon::TTrayIcon()
{
...
OldWnd = this->WindowProc;
this->WindowProc = NewWnd;
...
}
TTrayIcon::NewWnd(TMessage & Msg)
{
swithc(Msg.Msg)
{
case WM_LBUTTONDOWN: // здесь делаешь чего надо
}
OldWnd(Msg);
}
Так не сработает ??
Цитата:
Originally posted by AlphaOmega
Почти...
Проблема в том, что этот компонент НЕ расположен на самой форме. Этот компонент - иконка в системном трее (tray icon). У этого компонента всё хорошо, кроме того, что у него отсутствуют какие-либо события. Вот и хочется этому компоненту (иконка в трее) добавить событие OnClick...
Почти...
Проблема в том, что этот компонент НЕ расположен на самой форме. Этот компонент - иконка в системном трее (tray icon). У этого компонента всё хорошо, кроме того, что у него отсутствуют какие-либо события. Вот и хочется этому компоненту (иконка в трее) добавить событие OnClick...
В Builder C++ v6.0 в Examples->Apps есть пример работы с systray. Посмотри там.
Цитата:
Originally posted by hell_admin
Попробуй так
...
Так не сработает ??
Попробуй так
...
Так не сработает ??
А куда это надо впихнуть (в H или CPP и куда именно)?
p.s.: C++ Builder 5.0 компонент TSysTray.
Цитата:
Originally posted by AlphaOmega
А куда это надо впихнуть (в H или CPP и куда именно)?
p.s.: C++ Builder 5.0 компонент TSysTray.
А куда это надо впихнуть (в H или CPP и куда именно)?
p.s.: C++ Builder 5.0 компонент TSysTray.
Добавь обработчик события
Код:
class TmySysTray: public TSysTray
{
public:
void OnClick();
}
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,OnClick)
END_MESSAGE_MAP(TmySysTray)
{
public:
void OnClick();
}
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,OnClick)
END_MESSAGE_MAP(TmySysTray)
ЗЫ: И вот еще
TNotifyEvent is used for events that do not require parameters.
Unit
Classes
typedef void __fastcall (__closure *TNotifyEvent)(System::TObjectTObject* Sender);
Description
The TNotifyEvent type is the type for events that have no event-specific parameters. These events simply notify the component that a specific event occurred. For example, OnClick, which is of type TNotifyEvent, notifies the control that a click event occurred on the control.
The Sender parameter is the object whose event handler is called. For example,.with the OnClick event of a button, the Sender parameter is the button component that is clicked.