Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-89454
Москвичка
2003-10-01 19:59
2003.10.27
---|Ветка была без названия|---


7-89599
Sedunov Vitaly
2003-08-13 18:15
2003.10.27
Как программно отключить видеоффекты?


14-89470
Юлька
2003-10-07 11:25
2003.10.27
Ребята, не подскажите где можно в интернете найти


4-89632
likeanangel
2003-08-21 15:18
2003.10.27
использование XML


14-89505
Думкин
2003-10-09 04:50
2003.10.27
С днем рождения! 9 октября.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский