![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват сообщения WM_COPY у TCombobox - не работает [D7, WinXP]
allrussia © (2010-05-22 20:15:00)
function NewMemoProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall;
begin
if (uMsg = WM_COPY) then
чего-то делаем..
end;
...form1.create...
h:= Combobox1.Handle;
SetWindowLong(h,GWL_USERDATA,SetWindowLong(h, GWL_WNDPROC, LPARAM(@NewMemoProc)))
Точно такой же код прекрасно работает для TMemo и TEdit
В MSDN написано, This message has no effect when sent to a combo box with the CBS_DROPDOWNLIST style.
ставлю csSimple или другие - в равно не работает
что не так делаю ? Спасибо.
allrussia (2010-05-23 10:54:00) [1]все разобрался, спасибо
надо было строку добавить здесь
procedure TForm1.FormCreate(Sender: TObject);
var h: hwnd;
cbbInfo: TComboBoxInfo;
begin
cbbInfo.cbSize:= sizeof(TCOMBOBOXINFO);
getcomboboxinfo(ComboBox1.Handle, cbbInfo);
h:= cbbInfo.hwndItem;
SetWindowLong(h,GWL_USERDATA,SetWindowLong(h, GWL_WNDPROC, LPARAM(@NewMemoProc)))
end;
allrussia (2010-05-23 01:21:00) [2]Спасибо большое, но только не получается почему-то!
procedure TForm1.FormCreate(Sender: TObject);
var h: hwnd;
cbbInfo: TComboBoxInfo;
begin
getcomboboxinfo(ComboBox1.Handle, cbbInfo);
h:= cbbInfo.hwndItem;
SetWindowLong(h,GWL_USERDATA,SetWindowLong(h, GWL_WNDPROC, LPARAM(@NewMemoProc)))
end;
Зато все это натолкнуло меня на другую мысль.
Если жать комбинацию клавиш - сообщение не перехватывется. А если послать программно WM_PASTE - все работает! Но не с этим кодом, а с предыдущим... :)
Игорь Шевченко (2010-05-22 21:56:00) [3]
> что не так делаю ?
не у того окна ловишь. у ComboBox с csSimple такие сообщения отрабатывает его дочернее окно Edit
RTFM: GetComboBoxInfo hwndItem