Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перехват WndProc от Parent а


Rel_ ©   (2003-08-22 16:26:00) 

Мастера. Возник вопрос!!!

У меня есть класс TMyButton (не TWinControl), например нечто вроде TBitBtn. В конструктор передаётся Parent : TWinControl, т.е. то, на чём она должна отрисовываться.

Как мне корректно перехватить обработчик сообщений Parent"a, чтобы дописать туда обработчик от конкретного объекта моего класса TMyButton.

Например в духе:

... WndProc(var Message: TMessage)
var x,y : Integer;
begin

case Message.Result of
WM_LBUTTONDOWN:
begin
x:=LOWORD(Message.LParam), y:=HIWORD(Message.LParam)

if (x>left)and(x<left+width)and(y<.... then
begin
.. считается что мышь над объектом, включается обработчик текущего объекта
end
end;
...
end;
end;

я пытался ковырять ф-ии : CallWindowProc, MakeObjectInstance, кое-что получилось, но коряво.

Может кто возился - просветите или скиньте примерчик. В общем должен быть некий аналог TBitBtn - кнопка, обрабатывающая события (например OnMouseDown, OnClick), но не являющаяся контролом ???


jonni   (2003-08-22 17:35:00) [1]

нужно только описание объекта (я же привел самое основное)
а иначе ничего не понятно ...... куди и как....


Rel_   (2003-08-22 17:30:00) [2]

код очень большой - не влезает.


jonni   (2003-08-22 17:05:00) [3]

to Rel__ mozhno li posmotret vashe opisanie ob"ekta.....
togda ya tochno mapishu kod.......


Rel_   (2003-08-22 17:00:00) [4]

to jonni ©

ваш пример абсолютно понятен - так сделать очень просто. Вот только мой объект не унаследован от не от чего.


Rel_   (2003-08-22 16:57:00) [5]

NAlexey ©
Просмотрел пример - так конечно можно. А если у меня несколько объектов помешено на форму, такой перехват TWndProc будет работать некорректно.

Путь у меня 10 объектов моего класса TMyButton. Каждый из них добавит в WndProc родителя(Parent) свой обработчик , например WM_LBUTTONDOWN. Как я тогда определю, какому объекту пришло сообщение???


jonni   (2003-08-22 16:53:00) [6]

type
TMyNewBut = class(TGraphicControl)
private
MDown: TMouseEvent;
MUp: TMouseEvent;
MEnter : TNotifyEvent;
MLeave : TNotifyEvent;
protected
procedure Paint; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure Click; override;
procedure SetParent(Value: TWinControl); override;
public
constructor Create(AOwner: TComponent); override;
published
property OnMouseDown: TMouseEvent read MDown write MDown;
property OnMouseUp: TMouseEvent read MUp write MUp;
property OnMouseEnter: TNotifyEvent read MEnter write MEnter;
property OnMouseLeave: TNotifyEvent read MLeave write MLeave;
end;

vse prekrastno rabotaet....


Игорь Шевченко   (2003-08-22 16:48:00) [7]

TGraphicControl


Rel_   (2003-08-22 16:45:00) [8]

>> jonni ©

Понимаете , смысл в том что класс мой просто отрисовывает что-то (например кнопку в виде графического примитива - прямоугольника) на TWincontrol"е (который получает в конструкторе в качестве Parent), при этом сам не наследуется не от чего (в крайнем случае от TObject). При этом он должен перехватывать сообщения от Parent и смотреть, адресованы ли они к данному экземпляру класса (например обработчик нажатия мыши должет определять по координатам) и вызывать обработчик имнно этого объекта.

В дельфах есть полный аналог того, что мне необходимо - TBitBtn - если я не ошибаюсь он не наследуется от TWinControl и следовательно не имеет своего обработчика сообщении - а может только перехватывать.


NAlexey   (2003-08-22 16:35:00) [9]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1061552092&n=5


jonni   (2003-08-22 16:29:00) [10]

a kak ti sozdal tu samuyu TBitBtn.... ot etogo mnogo zavisit


Наверх

Титульная страница Поиск, карта сайта Написать письмо