Главная страница
    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
3-89102
Дмитрий К.
2003-10-08 10:35
2003.10.27
По нажатию


14-89487
lancelot
2003-10-09 00:14
2003.10.27
Маленькие наши радости :)


14-89490
panov
2003-10-09 17:20
2003.10.27
Создание топиков, обращенных к определенному участнику форума


14-89499
Tornado
2003-10-09 15:52
2003.10.27
Распорядок дня программиста


1-89343
Виталя
2003-10-16 13:27
2003.10.27
Всплывающая подсказка для кнопки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский