Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

MouseMove составного компонента


wsv   (01.10.08 10:13

Здравствуйте, все.

Есть составной компонент из 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]

Удалено модератором


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо