Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnMouseWheel в TScrollBox [D7, WinXP]


Provodnick ©   (2004-06-22 13:28:00) 

Здравствуйте, я пытаюсь обработать событие OnMouseWhell в ScrollBoxe на форме, но ничего не происходит. Удается обработать лишь аналогичное событие формы. Что делать? В чем проблема?


Provodnick   (2004-06-23 14:34:00) [1]

Во-первых, извеняюсь, что заварил всю кашу и свалил неизвестно куда - у нас инет вырубили только сегодня заработал. Во-вторых, пример с PtInRect(ClientRect, ScreenToClient(MousePos)) только в обработчике формы, а не ScrollBox`а - это то, что нужно!!! Отдельное спасибо AlexSV и всем всем всем!!!


AlexSV   (2004-06-23 12:52:00) [2]

> GuAV ©   (23.06.04 12:21) [17]
>... кликни по edit, наводи курсор и крути ...

кликни по скролбоксу, наведи на edit и крути


GuAV   (2004-06-23 12:21:00) [3]

AlexSV   (23.06.04 12:17) [16]
Уже начинаешь надоедать ;) кинь в один угол скролбокс а в другой edit, кликни по edit, наводи курсор и крути - работать не будет!
> У меня работает D5

Не аргумент ;)


AlexSV   (2004-06-23 12:17:00) [4]

> GuAV ©   (23.06.04 11:53) [15]

У меня работает D5
курсор скролбоксе а фокус нет


GuAV   (2004-06-23 11:53:00) [5]

AlexSV   (23.06.04 10:39) [14]
Это тебе не надо. твой код выполнит действия, если и курсор будет в скролбоксе и фокус там же. Т.е. если у него не будет фокуса, то действия выполнены не будут, даже если мыша на нём.


AlexSV   (2004-06-23 10:39:00) [6]

Provodnick   (22.06.04 14:26) [7]
TabStop действоительно был в False. Недоглядел

и не надо, это не влияет на проблему

в событии OnMouseWhell в ScrollBoxe вставь
...
with TScrollBox(Sender) do
 if PtInRect(ClientRect, ScreenToClient(MousePos)) then begin
// Выполняем действия
 end;
...


GuAV   (2004-06-23 00:15:00) [7]


> Нет, я добавил кнопок всяких. Если фокус на другом контроле
> и мышь вне ScrollBox`a, то все равно срабатывает его событие.
> Что же делать?

Проведи такой эксперимент ScrollBox и memo кинь в разные углы формы. назначь форме и скролбоксу такой onmousewheel:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Memo1.Lines.Add(TComponent(Sender).Name);
end;

Кликни в сколбоксе и покрути колесо результат:
ScrollBox1
Form1
ScrollBox1
Form1
ScrollBox1
Form1
ScrollBox1
Form1
ScrollBox1
Form1
ScrollBox1
Form1
Кликни в мемо и покрути колесо результат:
Form1
Form1
Form1
Form1

...и ищи ошибку у себя.


Andy BitOff   (2004-06-22 22:59:00) [8]


Procedure PardonOfOffTop;
begin
 SendMessage('Прошу прощения за OffTop');
end;

Procedure WaitPardon;
begin
 if not Pardon then PardonOfOffTop;
end;


GrayFace   (2004-06-22 19:09:00) [9]

Offtop: Лично я за повтор простил. Теперь проси прощения за Offtop.


Provodnick   (2004-06-22 18:36:00) [10]

Нет, я добавил кнопок всяких. Если фокус на другом контроле и мышь вне ScrollBox`a, то все равно срабатывает его событие. Что же делать?


GuAV   (2004-06-22 16:17:00) [11]


> Но теперь событие вызывается даже если ScrollBox не находится
> в фокусе...

Ну, если на тестовой форме только ScrollBox, а остальные контролы в нём, то он не потеряет фокус.


Rem   (2004-06-22 15:35:00) [12]

"не находится в фокусе" - что имеется в виду? Не наведена мышь или фокус не на форме?


Provodnick   (2004-06-22 14:26:00) [13]

TabStop действоительно был в False. Недоглядел. Но теперь событие вызывается даже если ScrollBox не находится в фокусе... Хотелось бы, чтоб этого не было.


Andy BitOff   (2004-06-22 14:03:00) [14]

Offtop: Прошу прощения за повтор. 500 ошибка выскачила и повторил.


GuAV   (2004-06-22 14:01:00) [15]


>  Полагаю, что да

а TabStop случайно не False? если False, то предположение неверно.


Andy BitOff   (2004-06-22 14:00:00) [16]

Надо принудительно передать ему фокус, например при OnShow


Andy BitOff   (2004-06-22 14:00:00) [17]

Надо принудительно передать ему фокус, например при OnShow


Provodnick   (2004-06-22 13:49:00) [18]

Что Вы под этим подразумеваете? Находится ли он в фокусе ввода? Полагаю, что да, ведь он единственный компонент на форме(тестовой форме).


PVOzerski   (2004-06-22 13:33:00) [19]

А ScrollBox при этом активен?


Наверх

Титульная страница Поиск, карта сайта Написать письмо