![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Все, разобрался.
|