Конференция "Компоненты" » MouseMove составного компонента
 
  • wsv (01.10.08 10:13) [0]
    Здравствуйте, все.

    Есть составной компонент из TCustomPanel и TpaintBox в этой панели. PaintBox имеет начальные координаты left=0, top=0 (левый верхний угол панели-контейнера).

    Размеры PaintBox больше, чем размеры панели.

    Как разделить и перехватить события для PaintBox и для его Panel?
    Каким образом можно поднять координаты мыши над PainBox и над его Panel на сторону компонента, чтобы движение мыши обработать внутри компонента (например смена вида курсора)?

    Задача в целом - таскать PainBox по его Panel.
    Как лучше решить?
  • DimaBr © (01.10.08 11:18) [1]
    PaintBox имеет событие OnMouseMove и панель имеет событие OnMouseMove? не понимаю в чём проблема ?
  • wsv (01.10.08 11:23) [2]

    > Размеры PaintBox больше, чем размеры панели.
  • DimaBr © (01.10.08 11:24) [3]
    ну и что, не понятно, что нужно
  • DimaBr © (01.10.08 11:32) [4]
    Нужно получить координаты мыши над компонентом ?

    CalcCursorPos
  • wsv (02.10.08 07:40) [5]
    Подробнее.

    Определяем
    type
     TMouseMoveEvent = procedure (Sender: TObject; Shift: TShiftState; X, Y: Integer) of object;

    private
       Function  GetOnPBoxMouseMove:TMouseMoveEvent;
       Procedure SetOnPBoxMouseMove(E:TMouseMoveEvent);
    .........

    published
    Property OnMapMouseMove:TMouseMoveEvent read GetOnMapMouseMove write SetOnMapMouseMove;
    .........

    function TProbe.GetOnMapMouseMove: TMouseMoveEvent;
    begin
    Result:=PBox.OnMouseMove;
    end;

    procedure TProbe.SetOnMapMouseMove(E: TMouseMoveEvent);
    begin
    PBox.OnMouseMove:=E;
    end;

    Вопрос:
    Каким образом можно поднять координаты мыши над PaintBox на сторону компонента?
    То же, для контейнера...
  • wsv (02.10.08 07:42) [6]
    Создавать две published переменные и передавать в них уже из готового события неудобно...
  • wsv (02.10.08 08:23) [7]
    Сорри из другого проекта скопировал...
    published
    Property OnPBoxMouseMove:TMouseMoveEvent read GetOnPBoxMouseMove write SetOnPBoxMouseMove;
    ........
  • DimaBr © (02.10.08 08:44) [8]
    Никак не могу понять выражение " поднять координаты мыши над PaintBox на сторону компонента".

    Думаю, что нужно перехватить движение мыши по PaintBox-у в компоненте...

    Решается несколькими методами, например вешаем на событие свою обработку

    TProbe = class(TCustomPanel)
      private
         procedure PBoxMouseMove(Sender: TObject; Shift: TShiftState; X,Y: integer);
    end;
    constructor TProbe.Create(AOwner: TComponent)
    begin
     PBox := TPaintBox.Create(self);
     PBox.OnMouseMove := PBoxMouseMove;
    end;

    procedure TProbe.PBoxMouseMove(Sender: TObject; Shift: TShiftState; X,Y: integer);
    begin
     if Assigned(OnPBoxMouseMove) then OnPBoxMouseMove(Sender,Shift,X,Y);
     // остальные действия
    end;
  • wsv (02.10.08 08:49) [9]
    На сторону компонента - имею в виду знать их внутри компонента, а не получать из приложения по готовому событию...
  • wsv (02.10.08 08:54) [10]

    > private
    >      procedure PBoxMouseMove(Sender: TObject; Shift: TShiftState;
    >  X,Y: integer);



    > if Assigned(OnPBoxMouseMove) then OnPBoxMouseMove(Sender,
    > Shift,X,Y);


    Если оно Private, то как его Assigned? :-)
  • wsv (02.10.08 09:03) [11]
    Фактически, получается, что нужно MouseMove в инспекторе и рядом такое же, но в компоненте...
  • wsv (02.10.08 09:18) [12]
    Все.
    Победил.

    Вопрос снят.
  • wsv (02.10.08 09:21) [13]
    Теперь крутится два события на движение мыши.
    Одно паблик, другое прив.

    Первым выполняется событие в компоненте, вторым, если Assigned - в приложении.


    > DimaBr


    Спасибо.
  • DimaBr © (02.10.08 09:41) [14]
    > Property OnPBoxMouseMove:TMouseMoveEvent read GetOnPBoxMouseMove write SetOnPBoxMouseMove;

    вообще не нужно, нужно переписать так

    Property OnPBoxMouseMove:TMouseMoveEvent read fOnPBoxMouseMove write fOnPBoxMouseMove;
  • Gilbert (25.11.15 02:07) [15]
    Удалено модератором
 
Конференция "Компоненты" » MouseMove составного компонента
Есть новые Нет новых   [118609   +49][b:0][p:0]