Получить HWND окна

ova
Дата: 13.11.2007 10:35:05
Есть компонент на форме класса TcxRichEdit. У него нет обработчика OnKeyDown, вот хочу написать, пишу обработчик сообщений приложения, соответственно нужно знать что именно нужное мне окно передает сообщение, но в обработчике есть данные о HWND окна передавшего сообщение, а как ни странно но у TcxRichEdit нет его хэндла HWND (хотя допустим у TRichEdit есть HWND). Нужен совет: или как у TcxRichEdit все же узнать его HWND или как по HWND в обработчике сообщений узнать что посылает его именно нужное мне окно (класс по HWND я получил, но их на форме много, а мне нужно именно этот один уникальный)
alex0
Дата: 13.11.2007 11:32:41
Окна сообщения не передают а получают. Насчет "TcxRichEdit нет его хэндла HWND" это вы погорячились. Если у TcxRichEdit есть окно значит есть его хендл. Если у TcxRichEdit окна нет то нет и сообщений этому несушествующему окну, поэтому ловить их в вашем обработчике бессмысленно.

Насчет "как по HWND в обработчике сообщений узнать что посылает его именно нужное мне окно". Сначала сформулируйте словами чем нужное окно отличается от ненужного. А потом проверьте то условие которое вы сформулировали с помощью функций вроде:

GetWindowText
GetWindowRect
GetWindowPlacement
GetParent
и уже известной вам GetClassName
ova
Дата: 13.11.2007 11:52:02
alex0


Ну нет у TcxRichEdit свойства HWND, хотя получает сообщения именно этот класс. Поэтому и спрашиваю совета - тоже думаю что где-то есть, но скорее всего спрятано в свойствах где-то, где не знаю, DevExpress довольно навороченная, поэтому и спрашиваю.
Функции
GetWindowText
GetWindowRect
GetWindowPlacement
GetParent
Я конечно знаю, вот разве что была идея по GetWindowText сравнивать, но это тоже не совсем правильно.
umbra
Дата: 13.11.2007 12:10:00
При создании(показе) формы можно зарагистрировать обработку собщения для компонента, типа так:
RichEdit.Perform(WM_Keydown, wparam, lparam);
P.S. использовал для листбокса, но вроде как всеравно, для какого компонента это делать.
Странно...
Дата: 13.11.2007 13:23:16
ova
А что, свойство Handle не катит?
ova
Дата: 13.11.2007 13:34:54
Странно...
ova
А что, свойство Handle не катит?

М-да, облажался :). Просто там на самом деле не TcxRichEdit, а немного сложнее - есть TcxEditRepository, а в нем есть редакторы, в том числе и TcxEditRepositoryRichItem - это вот как раз он и есть редактор текста, очевидно что он не TcxRichEdit, но используется именно для редактирования в стиле RichEdit. В общем все запутано.
ova
Дата: 13.11.2007 13:44:51
umbra
При создании(показе) формы можно зарагистрировать обработку собщения для компонента, типа так:
RichEdit.Perform(WM_Keydown, wparam, lparam);
P.S. использовал для листбокса, но вроде как всеравно, для какого компонента это делать.

Спасибо, буду пробовать.
Warstone
Дата: 14.11.2007 12:44:36
Специально для вас фирма Borland придумала такую процедуру: FindControl она по hwnd отдает ссылку на Объект и код может быть такой:
if FindControl(msg.hwnd).Name = <Имя вашего контрола в кавычках> then begin
<Оба-ана-а-а.... OnKeyPress однако!>
end;
Естественно проверку сувать в перехватчик оконых сообщений... Если не понятно как перехватывать, то RegisterWindowHookEx(или как-то так) вам в помощь