Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизОтловить перемещение курсора на форме, заваленной компонентами Найти похожие ветки
← →
Islander (2004-01-31 21:34) [0]У меня вся форма заставлена контролами. Можно ли как то отловить перемещения курсора мыши в пределах этой формы? А то очень уж не хочется для каждого компонента обрабатывать OnMouseMove
← →
Palladin (2004-01-31 21:38) [1]обрабатывай WM_MouseMove на форме
TForm=class...
procedure lcMM(var msg:TMessage); message wm_mousemove;
...
← →
Islander (2004-01-31 22:02) [2]Не, форма не получает сообщение, т.к. вся заставлена контролами. Что делать?
← →
Palladin (2004-01-31 22:15) [3]мда... действительно... ступил...
определи единую процедуру на это событие и назначь всем контролам.
TWinControl.ControlCount, TWinControl.Controls[], рекурсия...
← →
Islander (2004-01-31 22:19) [4]Я уже почти подошел к решению проблемы. Смотри в чем фишка: сообщения получают контролы, а не форма, значит, они передают их дальше по цепочке и до формы. Т.е. вот так уже работает:
procedure CMMouseenter(var Message: TMessage); message CM_MOUSEENTER;
А насчет способа, который ты предлагаешь: я думал над ним:
1) Слишком напряжно
2) Это перекроет те события, которые я могу назначить в дизайн-тайме
← →
Cardinal (2004-01-31 22:27) [5]Когда надо (OnTimier напр.) отслеживаешь Mouse.CursorPos.
...
var x,y: integer;
...
x:=Mouse.CursorPos.x-{form1.}Left;
y:=Mouse.CursorPos.y-{form1.}Top;
...
← →
Palladin (2004-01-31 23:23) [6]1) напряжено? кому?
2) Так сохраняй предыдущий обработчик для каждого контрола и вызывай его в общем.
← →
Almaz (2004-02-01 00:51) [7]Господа, а не проще ли использовать
Application.OnMessage
?
type
TForm1 = class(TForm)
...
private
procedure OnMessage(var Msg: TMsg; var Handled: Boolean);
...
end;
...
implementation
{$R *.DFM}
procedure TForm1.OnMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_MOUSEMOVE then
begin
// ...
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := OnMessage;
end;
...
Правда есть одна тонкость - OnMessage будет срабатывать для всех форм в проекте, но это легко проверить по Msg.hwnd.
Удачи.
← →
Германн (2004-02-01 04:30) [8]2 Almaz © (01.02.04 00:51) [7]
Формально по сабжу Вы, возможно, правы. Но учитывая Islander (31.01.04 22:19) [4] и упоминание в нем CM_MOUSEENTER можно предположить, что автору нужно не столько "перемещение", сколько "в пределах какого контрола" находится "курсор мыши" в данный момент.
← →
Almaz (2004-02-01 05:06) [9]
> Германн © (01.02.04 04:30) [8]
> ...
> сколько "в пределах какого контрола" находится "курсор мыши"
> в данный момент.
Ну тогда еще останется вызватьControlAtPos
в OnMessage. И все.
Удачи.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.016 c