|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перекрыть событие в наследнике
Всем добрейший!
Есть компонент - 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
|
||||
|
||||
А сообщение кто ловить будет?
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
А как? Буду благодарен за пример. Я в этом полный нуб.
|
#4
|
|||
|
|||
Сначала вопрос - не работает или отсутствует ?
Если просто отсутствует, то начиная с D6 можно сделать так: Код:
type TMyThumbView = class(TJvThumbView) published property OnMouseWheel; property OnMouseWheelDown; property OnMouseWheelUp; end; |
#5
|
|||
|
|||
События присутствуют и в родителе и в наследнике, но реакции на колесо мыши ни какой.
|
#6
|
|||
|
|||
Тогда смотреть, что там написано в методах
WMMouseWheel, CMMouseWheel, DoMouseWheel, DoMouseWheelDown, DoMouseWheelUp |
#7
|
|||
|
|||
Цитата:
Буду смотреть. Спасибо за наводку. |
#8
|
||||
|
||||
Цитата:
Если нужно просто прокрутить содержимое 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; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#9
|
|||
|
|||
Спасибо Alegun!
Заработало. |
#10
|
|||
|
|||
Еще, может быть дурацкий вопрос. А как теперь шаг прокрутки увеличить?
|
#11
|
|||
|
|||
Все, разобрался.
|