Конференция "WinAPI" » Перехват сообщения WM_COPY у TCombobox - не работает [D7, WinXP]
 
  • 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;

 
Конференция "WinAPI" » Перехват сообщения WM_COPY у TCombobox - не работает [D7, WinXP]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]