Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как в TPanel ловить прокрутку колеса мыши, как в TPanel ловить прокрутку колеса 
:(
    Опции темы
arankar
Дата 29.12.2010, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



вот такой код не ловить. что у меня неправильно или это сообщение перекрыто у родителя? Как это можно реализовать???

Код

type
  TWheelPanel = class(TPanel)
  private
    procedure WMWHEEL(var Msg: TMessage); message WM_MOUSEWHEEL;
  end;
...........................

procedure TWheelPanel .WMWHEEL(var Msg: TMessage);
begin
 ..........................
end;


M
Rrader
Используйте подсветку кода


Это сообщение отредактировал(а) Rrader - 29.12.2010, 10:44
PM MAIL   Вверх
Snowy
Дата 29.12.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Будет получать, если будет фокус на данном компоненте.
Т.к. Panel обычно фокус не получает, поставь ей TabStop = true, чтобы получала.
Или кинь на неё компонент, который поймает фокус (например кнопку)
PM MAIL   Вверх
CROTishka
Дата 29.12.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



TPanel не может получать фокус. WM_MOUSEWHEEL получает активный(под фокусом ввода) контрол
PM MAIL   Вверх
Snowy
Дата 29.12.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если этот контрол будет лежать на панели, то получать он будет после того, как панель ему сообщение отдаст.
То есть сначала это сообщение получит панель, а потом уже дочерний компонент.
Если же панель имеет TabStop = true, то сама может получить фокус и являться конечным получателем.
PM MAIL   Вверх
CROTishka
Дата 29.12.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Snowy, ответьте лучше на мой вопрос в этом разделе smile

Это сообщение отредактировал(а) CROTishka - 29.12.2010, 13:12
PM MAIL   Вверх
kami
Дата 29.12.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Может быть глупый вопрос, но тем не более: на форме/фрейме лежит TPanel или TWheelPanel?
PM MAIL WWW   Вверх
arankar
Дата 29.12.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Snowy, спасибо за идею получилось, только TabStop  true не делаю а при вхождении курсора если фокуса нету вызываю SetFocus. Теперь когда курсор покидает панель как можно убрать фокус, или другому оконному элементу надо фокус отдать?

kami, экземпляр класса TWheelPanel на форме

Это сообщение отредактировал(а) arankar - 29.12.2010, 14:57
PM MAIL   Вверх
CROTishka
Дата 29.12.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



лучше сделайте так чтобы форма ловила WM_MOUSEWHEEL и слала его контролу под мышкой. (возможно ещё сообщения почистить придётся, чтобы фокусу не приходило).
Хотя вообще странный у вас функционал какой-то smile

Это сообщение отредактировал(а) CROTishka - 29.12.2010, 15:20
PM MAIL   Вверх
Snowy
Дата 29.12.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Перед тем, как забрать у кого-нибудь фокус, запомни ActiveControl, а потом верни фокус ему.
А про табстоп я упоминул, как альтернативу. Например, если на панели нет никаких контролов, способных получить фокус...

Добавлено через 2 минуты и 34 секунды
CROTishka, ты не поверишь, но у него свой компонент - наследник панели.
И он не умеет приказывать форме ловить сообщения.
PM MAIL   Вверх
arankar
Дата 30.12.2010, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Snowy, внутри моего класса, ActiveControl как можно узнать или как свойство форму передать надо???

если setFocus делаю работает даже если на панели нету никаких контролов это нормально?

CROTishka почему странный? в чем странность? 

просто хочу чтобы все осталось внутри класса


Это сообщение отредактировал(а) arankar - 30.12.2010, 06:22
PM MAIL   Вверх
Snowy
Дата 30.12.2010, 13:57 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если тебя бросили на форму, то форма - твой владелец. А у формы можно спросит, кто сейчас активный.
Код
if Owner is TForm then
  туалетный_утёнок_активный := TForm(Owner).ActiveControl;

PM MAIL   Вверх
CROTishka
Дата 30.12.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Цитата(Snowy @ 29.12.2010,  15:24)
Добавлено @ 15:27
CROTishka, ты не поверишь, но у него свой компонент - наследник панели.
И он не умеет приказывать форме ловить сообщения.

я просто предположил, что у него задача не сделать контрол, а реализовать некую фичу, которую можно реализовать по-другому.
http://www.gunsmoker.ru/2008/10/x-y-z.html
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.