![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перекрытие WndProc для стандартных виндовых контролов [D6, Win2k]
cult © (2003-01-08 16:24:00)Вот в чем проблема. Имею я, скажем, ComboBox и хочу у него перекрыть WndProc и самостоятельно обрабатывать мышиные клики. Но при клике на области, где в комбобоксе вводится текст, перехватывания этого события не происходит, и даже, кажется, в WndProc ничего не приходит. С чем это связано и как с этим бороться?
Спасибо.
Игорь Шевченко (2003-01-16 09:40:00) [1]cult © (15.01.03 16:29)
stdcall на конце функции забыл.
pirat (2003-01-15 19:02:00) [2]Игорь Шевченкои Diamond Cat
Имел я недавно дело с мышкой у которой вместа колеса - шарик. Такой трекбол, в сильно уменьшенном варианте. Так вот с помощью ее можно было крутить в Excel окно во всех напрвлениях. А вот в word - низзя. И вот я теперь думаю, как бы эту мышу и к ворду приспособить, какое же сообщение нужно перехватить (наверняка нестандартное, драйвер_мыши->окна) и что передать ворду для горизонтальной прокрутки.
cult (2003-01-15 16:29:00) [3]
Кстати, по теме:
стал пользовать enumchildwindows и добился непонятного глюка:
после того, как срабатывает EnumChildProс, контрол, у которого мы искали Child"ы, перестает быть доступен, такое впечатление, что он просто рушится :( что это такое вообще?
код:
function ChildsCallBack(hndl: HWND; par: LPARAM):boolean;
begin
Showmessage(inttostr(Hndl));
Result:=True;
end;
.......
if newcontrol is tWinControl then
enumchildwindows(TWinControl( newcontrol).Handle,@ChildsCallback,s);
Вот NewControl, кажись, и разрушается...
Игорь Шевченко (2003-01-15 15:45:00) [4]Diamond Cat © (15.01.03 14:58)
SetScrollPos не помогает ? (Для Word"a, кстати, все по-другому,
у него Scrollbar"ы могут быть отдельными дочерними контролами).
Кроме того, ни разе не встречал на своей жизни окна, которое можно было бы прокрутить колесом в горизонтальном направлении.
cult (2003-01-15 15:34:00) [5]Diamond Cat © (15.01.03 14:58)
Спасибо, но мне крутить ничего не надо, наоборот - надо, чтобы ничего не крутилось :)))
Diamond Cat (2003-01-15 14:58:00) [6]почти все окна можно отскролить с помощью WM_MOUSEWHEEL в msdn пишут что это сообщение проходит всю цепочку (родительских) окон !?пока не будет найдено то которое его обрабатывает, в случае неудачи возвращает 0.
Но у него есть недостаток , может прокручивать только вертикальный скрол, по крайней мере в word, я не смог прокрутить окно по горизонтали, причем вообще никаким способом из перечисленных выше Игорем Шевченко
cult (2003-01-15 14:36:00) [7]>Игорь Шевченко
То есть, универсального рецепта нет, для скроллящихся контролов одно, для контролов с EditBox"aми - другое. Жаль...
Но все равно спасибо, я получил большую пищу для размышлений и массу полезной информации :)
arcoant (2003-01-15 14:23:00) [8]fsdfsdfsdfddf Sorry!!!
Игорь Шевченко (2003-01-15 14:20:00) [9]cult © (15.01.03 13:59)
Стандартные Scrollbar"ы - это не окна. И Child"ами следовательно, быть ни у кого не могут. Это такая же стандартно рисуемая часть окна, как заголовок или строка меню. Их наличие/отсутствие определяется стилями окна WS_VSCROLL/WS_HSCROLL, а позиция ползунка и прочие параметры
Get/SetScrollInfo
Поговорить - ShowScrollbar, EnableScrollbar, Get/SetScrollInfo и много всего другого в Win32.hlp
С уважением,
cult (2003-01-15 13:59:00) [10]>Игорь Шевченко
Наверное, я чего-то не понимаю - растолкуйте, если не лень.
Должны же эти скроллбары у кого-то Child"ами быть? То есть, их кто-то держит в списке?
А кто это и как с ним поговорить? :)
Спасибо.
Игорь Шевченко (2003-01-15 12:07:00) [11]pirat © (15.01.03 11:49)
Внимательно читаем вопрос:
> (сейчас в качестве таковых рассматриваются Grid"ы со скроллбарами
> и ComboBox"ы со своими Edit"ами)
pirat (2003-01-15 11:49:00) [12]Игорь Шевченко
Почему это скроллбар не контрол? :(
hwnd:=CreateWindow("scrollbar",...)
На самом деле он может быть и отдельным контролом, и принадлежать неклиенткой области.
Игорь Шевченко (2003-01-15 09:55:00) [13]А Scrollbar - это не дочерний контрол. Это кусок неклиентской области, точно так же, как область меню, заголовка, и т.д.
Как узнавать дочерние контролы - запустить WinSight или Spy++
С уважением,
Diamond Cat (2003-01-15 03:13:00) [14]enumchildwindows вроде высвечивает все подряд, но точно не помню надо проверить
cult (2003-01-14 18:13:00) [15]так а нельзя ли для абстрактного WinControl"a (сейчас в качестве таковых рассматриваются Grid"ы со скроллбарами и ComboBox"ы со своими Edit"ами) получить список "дочерних" контролов? А то как-то неуниверсально получается
MBo (2003-01-14 17:50:00) [16]см. GetComboBoxInfo в msdn
ограничения:
Minimum operating systems Windows 98, Windows NT 4.0 with Service Pack 6
cult (2003-01-14 17:35:00) [17]Во, добрался наконец-то!
>GetDlgItem(ComboBox.Handle, $03E9);
А откуда взялась эта цифра?($03E9) Как ее получить для поля класса Edit и для других классов, напр., scrollbar?
Игорь Шевченко (2003-01-08 16:50:00) [18]
> области, где в комбобоксе вводится текст
Это совершенно другое окно, от класса EDIT. Надо еще и у него перехватывать оконную процедуру. Это окно искать по
GetDlgItem(ComboBox.Handle, $03E9);
При этом надо убедиться, что ComboBox содержит окно Edit (по крайней мере, сравением результат вызова функции с нулем).