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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переключение вкладок PageControl скроллингом мыши 
V
    Опции темы
HloR09
Дата 28.3.2015, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть необходимость переключать вкладки (TabSheet) движением ролика мыши, только когда мышь над (PageControl). Написал обработчик вверх, вниз, прикрутил к вкладкам и вроде все работает но есть одно но, переключаются вкладки через одну а не по порядку. В чем может быть проблема.
Вод код, может кто подскажет в чем тут дело
Код

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Button1: TButton;
    Button2: TButton;
    TabSheet1: TTabSheet;
    procedure PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

    // обработка прокрутки колеса вниз
  procedure MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    // обработка прокрутки колеса вверх
  procedure MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
  begin                                         // отменяет обработку событий от колеса мыши
    Form1.OnMouseWheelDown:=nil;
    Form1.OnMouseWheelUp:=nil;
  end;

procedure TForm1.MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  begin
    PageControl1.SelectNextPage(false);         // Детекция движения колеса вниз
  end;

procedure TForm1.MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
  begin
    PageControl1.SelectNextPage(true);          // Детекция движения колеса вверх
  end;

procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
  begin
    Form1.OnMouseWheelDown:=MouseWheelDown;     // прокрутка колеса вниз
    Form1.OnMouseWheelUp:=MouseWheelUp;         // прокрутка колеса вверх
  end;

procedure TForm1.Button1Click(Sender: TObject);
  begin
   PageControl1.SelectNextPage(true);           // Следующая вкладка
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
tab : TTabSheet;                                //Заводим новую вкладку
  begin
    tab:=TTabSheet.Create(Form1);               //Задаем родителя
    tab.PageControl:=PageControl1;
    tab.Caption:='New';                         //Задаем заголовок
    tab.OnMouseMove:=PageControl1MouseMove;
  end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  begin                                         // отменяем обработку событий от колеса мыши
    Form1.OnMouseWheelDown:=nil;
    Form1.OnMouseWheelUp:=nil;
  end;

end.



Это сообщение отредактировал(а) HloR09 - 28.3.2015, 22:07

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  MouseV1.3.rar 59,90 Kb
PM MAIL   Вверх
HloR09
Дата 29.3.2015, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще заметил что если количество вкладок равно 3 работает нормально, если 2 то не работает  вообще, больше 3-х работает через одну. Может я не по тому пути начал идти, может можно по другому.
PM MAIL   Вверх
kami
Дата 29.3.2015, 10:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В обработчики MouseWheel добавить 
Код

Handled:=True;

PM MAIL WWW   Вверх
HloR09
Дата 29.3.2015, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(kami @ 29.3.2015,  10:56)
В обработчики MouseWheel добавить 
Код

Handled:=True;

Работает! Спасибо большое!!!
В принципе вопрос исчерпан.
PM MAIL   Вверх
kami
Дата 29.3.2015, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В дополнение:
назначать/снимать обработчики лучше через PageControl.OnMouseEnter/OnMouseLeave, если они есть у TPageControl (сижу в FMX-проекте, лень переключаться)
PM MAIL WWW   Вверх
HloR09
Дата 29.3.2015, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Благодарю за подсказку, так действительно удобнее.
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.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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