Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.02.2014, 12:18
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию Перекрыть событие в наследнике

Всем добрейший!
Есть компонент - JvThumbView. У него не работает прокрутка мышью.
Пытаюсь написать компонент-наследник и перекрыть события MouseWheelDown и MouseWheelUp, но это не срабатывает.
Вот что я написал, но чувствую что не правильно т.к. делаю это в первый раз:
Код:
unit MyThumbView;

interface

uses
{$IFDEF UNITVERSIONING}
  JclUnitVersioning,
  {$ENDIF UNITVERSIONING}
  Windows, // TWin32FindData
  {$IFDEF HAS_UNIT_LIBC}
  Libc, // stat()
  {$ENDIF HAS_UNIT_LIBC}
  SysUtils, Messages, Classes, Graphics, Controls, Forms, ExtCtrls,
  JclBase,
  JvExForms, JvExExtCtrls, JvBaseThumbnail, JvThumbViews;

type
  TMyThumbView = class(TJvThumbView)
  private
    { Private declarations }
    FOnMouseWheelDown: TMouseWheelUpDownEvent;
    FOnMouseWheelUp: TMouseWheelUpDownEvent;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    constructor Create(AOwner: Tcomponent);override;
    property OnMouseWheelDown: TMouseWheelUpDownEvent read FOnMouseWheelDown
        write FOnMouseWheelDown;
    property OnMouseWheelUp: TMouseWheelUpDownEvent read FOnMouseWheelUp write
        FOnMouseWheelUp;
    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('My Component', [TMyThumbView]);
end;

constructor TMyThumbView.Create(AOwner: Tcomponent);
begin
inherited create(AOwner);
end;

function TMyThumbView.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := False;
  if Assigned(FOnMouseWheelDown) then
    FOnMouseWheelDown(Self, Shift, MousePos, Result);
end;

function TMyThumbView.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := False;
  if Assigned(FOnMouseWheelUp) then
    FOnMouseWheelUp(Self, Shift, MousePos, Result);
end;

end.
Укажите пожалуйста на ошибки. Уже весь мозг себе сломал. Сам не справлюсь.
Ответить с цитированием
  #2  
Старый 28.02.2014, 12:20
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

А сообщение кто ловить будет?
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 28.02.2014, 12:30
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

А как? Буду благодарен за пример. Я в этом полный нуб.
Ответить с цитированием
  #4  
Старый 28.02.2014, 13:10
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Сначала вопрос - не работает или отсутствует ?
Если просто отсутствует, то начиная с D6 можно сделать так:

Код:
type  TMyThumbView = class(TJvThumbView) 
  published
    property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
 end;
Ответить с цитированием
  #5  
Старый 28.02.2014, 13:19
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

События присутствуют и в родителе и в наследнике, но реакции на колесо мыши ни какой.
Ответить с цитированием
  #6  
Старый 28.02.2014, 17:07
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Тогда смотреть, что там написано в методах
WMMouseWheel, CMMouseWheel, DoMouseWheel, DoMouseWheelDown, DoMouseWheelUp
Ответить с цитированием
  #7  
Старый 28.02.2014, 17:29
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
WMMouseWheel, CMMouseWheel
А про этих я и не знал что они тоже должны быть завязаны.
Буду смотреть. Спасибо за наводку.
Ответить с цитированием
  #8  
Старый 28.02.2014, 18:28
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от SergeyABG
События присутствуют и в родителе и в наследнике, но реакции на колесо мыши ни какой.
Какие признаки этого, где это увидели - собсно что происходить-то должно, когда у вас в функциях DoMouseWheelDown и DoMouseWheelUp только из пустого в порожнее перелив идёт - им передаётся их же состояние и ничего больше

Если нужно просто прокрутить содержимое JvThumbView (не знаю что за зверь) изначально не поддерживающего такое действие мышкой, тогда проще задействовать "форменный" перехватчик OnMouseWheel, для Memo я делал примерно так
Код:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
 i, b, c: integer;
begin
 if FindVCLWindow(MousePos).Handle = Memo1.Handle then
  begin

   // Направление прокрутки
   if WheelDelta < 0 then c:= SB_LINEDOWN else c:= SB_LINEUP;

   // Диапазон прокрутки за один "тик" колесика
   SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @b, 0);

   // Если получено -1, то прокручивать на целую страницу
   if b < 0 then
    begin
     b:= 1;
     Inc(c, SB_PAGEUP);
    end;

    for i := 1 to b do Memo1.Perform(WM_VSCROLL, c, 0);
    Handled:= true;
    end;

end;
кидайте родителя на форму, вместо Memo1 подставляйте его, и не мучайтесь
Ответить с цитированием
  #9  
Старый 03.03.2014, 11:45
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Спасибо Alegun!
Заработало.
Ответить с цитированием
  #10  
Старый 03.03.2014, 12:19
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Еще, может быть дурацкий вопрос. А как теперь шаг прокрутки увеличить?
Ответить с цитированием
  #11  
Старый 03.03.2014, 13:10
SergeyABG SergeyABG вне форума
Прохожий
 
Регистрация: 28.02.2014
Сообщения: 7
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Все, разобрался.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter