-
allrussia (22.05.10 20:15) [0]
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 или другие - в равно не работает
что не так делаю ? Спасибо. -
Игорь Шевченко © (22.05.10 21:56) [1]
> что не так делаю ?
не у того окна ловишь. у ComboBox с csSimple такие сообщения отрабатывает его дочернее окно Edit
RTFM: GetComboBoxInfo hwndItem -
allrussia (23.05.10 01:21) [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 - все работает! Но не с этим кодом, а с предыдущим... :) -
allrussia (23.05.10 10:54) [3]все разобрался, спасибо
надо было строку добавить здесь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;