Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2012, 12:54   #11
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
приложение как будто вообще не получает сообщения WM_MOUSEWHEEL
У меня получает. Что я делаю неправильно ?
xoodoo вне форума Ответить с цитированием
Старый 15.11.2012, 12:58   #12
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Ясно, пойду разбираться. Но все-так, если мои глаза меня не обманывают в чем может быть проблема? Может быть я что то не унаследовал от TCustomPanel?
Я имею в виду не переопределил какое то свойство/событие.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 13:01   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я правильно понял проблему?:
Я создаю кучу панелькофф
Код:
procedure TForm2.FormCreate(Sender: TObject);
var i:integer;
begin
 for i:=0 to 100 do begin
  with TPanel.Create(ScrollBox1) do begin
    Align:=alTop;
    Caption:=IntToStr(i);
    Height:=20;
    Parent:=ScrollBox1;
    OnMouseWheel:=ScrollBox1MouseWheel;
    Show;
  end;
 end;
end;
У которых описано событие скроллирования:
Код:
procedure TForm2.ScrollBox1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
 with ScrollBox1.VertScrollBar do
  Position:=Position-WheelDelta div 10;
end;
Которое по факту скролит не панель а скроллбокс, на котором она лежит.
Верно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2012, 13:04   #14
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А я и попробовал. Даже если курсор над панелью ScrollBox.OnMouseWheel работает если ScrollBox в фокусе. И даже если курсор за пределами ScrollBox
Вот хоть убей у меня так не получается. =) Пустая форма, скроллбокс, внем панель. Фокус передаю на скроллбокс. И все равно он крутится только когда курсор непосредственно над скроллбоксом, над панелью - нет.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я правильно понял проблему?:
Я создаю кучу панелькофф
Которое по факту скролит не панель а скроллбокс, на котором она лежит.
Верно?
У панели нет события OnMouseWheel.

Цитата:
Сообщение от xoodoo Посмотреть сообщение
Обрабатываешь Application.OnMessage, ловишь там WM_MOUSEWHEEL.
lParam тебе даст абсолютные экранные координаты мышиного курсора.
Вызовом WindowFromPoint получаешь хендл окна под курсором.
Вызовом FindControl ищешь соответствующий винконтрол .
Если он найден и является твоим скроллбоксом, то крутишь его программно используя параметры, переданные в wparam.
Можно код? Возможно я что то делаю не так, потому что даже простейшее
Код:
procedure TForm3.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = WM_MOUSEWHEEL then
  Begin
  ShowMessage('ok');
  End;
end;
срабатывает, над формой, но не срабатывает над панелью.
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось Stilet; 15.11.2012 в 14:24.
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 13:26   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Поставить точку останова на i:=1; и убедиться (D7)
Вложения
Тип файла: rar dddd.rar (7.1 Кб, 9 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2012, 13:32   #16
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Поставить точку останова на i:=1; и убедиться (D7)
Не происходит ни-че-го. =( (RAD XE3)

Можно скомпилированный вариант, чтобы я уже наконец понял это делфи или драйвер мыши? Уже не знаю на что грешить...
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 15.11.2012 в 13:35.
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 14:02   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Приложил. С вертикальным скролом
Вложения
Тип файла: rar dddd1.rar (163.3 Кб, 11 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2012, 14:24   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У панели нет события OnMouseWheel.
Я не говорил что оно есть, я показал пример, который позволяет скролить.
Наверное просто событие зря в цикл вставил, писал на скорую руку
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2012, 15:31   #19
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Приложил. С вертикальным скролом
И что самое интересное ничего не изменилось, не работает. Видимо система или мышь. Буду тестить на других компах. Всем спасибо.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 15:52   #20
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
простейшее...срабатывает, над формой, но не срабатывает над панелью
Такого не может быть ни при каких случаях, кроме случая когда некий код в основном потоке VCL-приложения организует свою собственную выборку и диспетчеризация оконных сообщений. Штатно этот цикл организован в недрах метода Application.Run, там же возбуждается событие Application.OnMessage перед тем как оконное сообщение будет диспетчеризовано и попадет на обработку в целевое окно.
xoodoo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пере- мещении колеса мыши и вывод информации об этом событии akhtamar Помощь студентам 1 21.02.2012 08:44
fsStayOnTop без фокуса Deight Общие вопросы Delphi 4 04.03.2011 19:36
Обработка колеса мыши в TScrollBox mutabor Общие вопросы Delphi 6 01.04.2010 10:17
использование колеса мыши Bayazet Общие вопросы Delphi 8 27.01.2009 14:39
Окно без фокуса Олвин Общие вопросы Delphi 4 13.10.2008 23:36