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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2015, 20:05   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию обработка WM_MOUSEWHEEL

Здравствуйте, некие странности происходят с приложением. Есть компонент наследник TGraphicControl, и обработчик сообщения WM_MouseWheel, но он не работает должным образом, обьясню.
Форма находится по центру экрана, размер компонента 800х500. Если покрутить колесом в пределах экрана от 0х0 до 800х500 то приходит сообщение! Но компонент реально находится в 300 пикселях ниже и правее. А если покрутить колесом на углу компонента дальше чем в 800 пикселях от левого угла экрана монитора то никакого сообщения нет. Помогите пожалуйста.



Код:

procedure TMyMainComponent.WndProc(var msg: TMessage);
begin
  inherited;
  case msg.Msg of
    WM_MOUSEWHEEL:                 //Шалит
      begin
        case msg.wparam < 0 of
          true: dec(FScrollOffsetY,30);
          false: inc(FScrollOffsetY,30);
        end;
        Paint;
        msg.Result:=0;
      end;
    WM_MOVE: msg.Result:=0;
    WM_MOUSEMOVE: msg.Result:=0;
    WM_LBUTTONDOWN: msg.Result:=0;
  end;

end;
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 03.05.2015, 20:20   #2
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Какая версия Delphi? Судя по исходникам VCL Delphi 6, так и должно быть. Координаты нигде не пересчитываются.

Мне кажется, что TGraphicControl -- неудачный предок для компонента, которому нужно обрабатывать колесо мыши.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 03.05.2015, 20:37   #3
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Какая версия Delphi? Судя по исходникам VCL Delphi 6, так и должно быть. Координаты нигде не пересчитываются.

Мне кажется, что TGraphicControl -- неудачный предок для компонента, которому нужно обрабатывать колесо мыши.
D7, сейчас мучаю обработку дополнительных сообщений, видимо из-за setfocus (которого нет) всё дело.


В Общем решил проблему добавив проверку (FFocusActive: Boolean = false)

Код:

    WM_MOUSEWHEEL:
      begin
        if FFocusActive then
        begin
          case msg.wparam < 0 of
            true: dec(FScrollOffsetY,30);
            false: inc(FScrollOffsetY,30);
          end;
          Paint;
          msg.Result:=0;
        end;
      end;

    CM_MOUSEENTER: FOldFocus:=SetFocus(FTimerHandle);
    CM_MOUSELEAVE: SetFocus(FOldFocus);

    WM_ACTIVATE:
    begin
      FFocusActive:=True;
      msg.Result:=0;
    end;
    WM_KILLFOCUS:
    begin
      FFocusActive:=false;
      msg.Result:=0;
    end;
Надеюсь правильное решение
Здравствуйте

Последний раз редактировалось NEoMASTERR; 03.05.2015 в 20:43.
NEoMASTERR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка MorgunZ PHP 1 17.03.2015 08:04
Три задачи на Delphi (Паскаль): обработка строк, обработка множеств, работа с типизированным файлом Тедеев Помощь студентам 11 13.12.2013 13:38
Хук WH_JOURNALRECORD и WM_MOUSEWHEEL V1S Общие вопросы Delphi 2 31.05.2012 12:38
обработка числовых последовательностей и последовательная обработка символов Renat(kai) Помощь студентам 3 28.03.2012 23:22
Обработка WM_MOUSEWHEEL Selestis Win Api 7 13.11.2011 16:18