Форум: "WinAPI";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];
Внизперехват 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c