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

Вниз

перехват WndProc от Parent а   Найти похожие ветки 

 
Rel_   (2003-08-22 16:26) [0]

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

У меня есть класс 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 16:29) [1]

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


 
NAlexey ©   (2003-08-22 16:35) [2]

http://delphimaster.net/view/4-1061552092/


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

>> jonni ©

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

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


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

TGraphicControl


 
jonni ©   (2003-08-22 16:53) [5]

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....


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

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

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


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

to jonni ©

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


 
jonni ©   (2003-08-22 17:05) [8]

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


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

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


 
jonni ©   (2003-08-22 17:35) [10]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.028 c
1-89198
AB
2003-10-17 10:31
2003.10.27
IniFile -> ресурсы


14-89578
isko
2003-10-07 14:12
2003.10.27
часто бывает


7-89604
mao
2003-08-01 07:05
2003.10.27
Путь до папки windows


3-89141
Sedunov Vitaly
2003-10-07 09:10
2003.10.27
@@spid и PacketRecords


1-89314
Иванько
2003-10-15 18:32
2003.10.27
Проблема у RichEdit под WinXP