Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 28.02.2011, 21:01   #1
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию Класс и MouseMove

Подскажите, как добавить процедуру OnMouseMove созданному классу.

Пример класса:
Код:
TYzel = class(TObject)
private
  SX,SY,x,y:integer; //SX - Ширина, SY - Длина, x,y - координаты. 
  Image:DXImage;     //Текстура.
  procedure YDraw(); //Прорисовка текстуры.
end;
Сделал это для более удобного вывода изображения средствами DX.
Теперь бы хотелось как-нибудь обрабатывать событие при наведении мыши на выводимое изображение.
Подскажите как это сделать

Последний раз редактировалось ZBEP; 28.02.2011 в 21:04.
ZBEP вне форума Ответить с цитированием
Старый 28.02.2011, 21:23   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

вот из моего проекта, параметры красным должны совпадать с параметрами из оригинальных событии компонент
Код:
type
  TForm1 = class(TForm)
...
    procedure ImagesMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ImagesMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ImagesMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ImagesClick(Sender: TObject);
    procedure ImagesDblClick(Sender: TObject);
...
var
    Images: TImage;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
...
  Images := TImage.Create(self);
  with Images do
  begin
    Parent := Panels;
    Tag := s;
    Top := 5;
    Left:=5;
    Width := 180;
    Height := 130;
    Name := 'Images' + IntToStr(s);
    Stretch := True;
    Picture.LoadFromFile(Path + '\Images\' +IntToStr(S) + '.jpg');
    OnClick := ImagesClick;
    OnDblClick := ImagesDblClick;
    OnMouseDown := ImagesMouseDown;
    OnMouseMove := ImagesMouseMove;
    OnMouseUp := ImagesMouseUp;
  end;
...
end;

procedure TForm1.ImagesClick(Sender: TObject);
begin
...
end;

procedure TForm1.ImagesDblClick(Sender: TObject);
begin
...
end;

procedure TForm1.ImagesMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
...
end;

procedure TForm1.ImagesMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
...
end;

procedure TForm1.ImagesMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 28.02.2011, 21:36   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Если не ошибаюсь примерно так:
Код:
TYzel = class(TObject)
  private
    FOnMouse: TMouseEvent;
    procedure SetOnMouse(const Value: TMouseEvent);
published
   property OnMouse:TMouseEvent read FOnMouse write SetOnMouse;
private
  SX,SY,x,y:integer; //SX - Ширина, SY - Длина, x,y - координаты.
  Image:DXImage;     //Текстура.
  procedure YDraw(); //Прорисовка текстуры.
  procedure OnMouse_(var m:TWMMouse); message WM_Mouse;
end;
...
procedure TYzel.OnMouse_(var m: TWMMouse);
begin
 if Assigned(OnMouse) then OnMouse(self,и остальные параметры
end;

procedure TYzel.SetOnMouse(const Value: TMouseEvent);
begin
  FOnMouse := Value;
end;
Цитата:
ArtGrek
Обрати внимание от чего наследуешь ты класс и от чего наследует автор

Кстати. Для обработки таких вещей как мышка стоит наследовать от WinControl а не просто от TObject, ведь он не является окном, а значит и сообщения мышки не обработает
I'm learning to live...

Последний раз редактировалось Stilet; 28.02.2011 в 21:39.
Stilet вне форума Ответить с цитированием
Старый 01.03.2011, 01:02   #4
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Спасибо!
А если от WinControl наследовать, то как мышь выловить?

Чет немного не понятно
Сделал WinControl.
OnMouseMove в свойствах есть, присваиваю к примеру процедуру FormMouseMove, но реакции нет.
Пробовал как в примере выше, но что-то я не догоняю..
Ну в общем не получается что-то у меня из-за того, что не доконца разобрался..

Код:
TYzel = class(TWinControl)
private
  FOnMouse: TMouseEvent;
  SX,SY,x,y:integer;
  Button: TMouseButton;
  Shift: TShiftState;
  procedure YDraw();
  procedure SetOnMouse(const Value: TMouseEvent);             //Вот в этом
  procedure OnMouse_(var m:TWMMouse); message WM_MouseMove;   //И этом не полностью понимаю принцип работы
published
  property OnMouse:TMouseEvent read FOnMouse write SetOnMouse;   
end;

procedure TYzel.OnMouse_(var m: TWMMouse);
begin
if Assigned(OnMouseMove) then OnMouse(Self,Button,Shift,X,Y);  //Тут ведь так надо? Не уверен.. Да и если я пытаюсь отловить MouseMove у Yzel, то при чем тут Button?
end;                                                                                  

procedure TYzel.SetOnMouse(const Value: TMouseEvent);
begin
FOnMouse := Value;
end;

...
Yzel:=TYzel.Create(Form1);
Yzel.x:=800;
Yzel.y:=54;
Yzel.Sx:=50;
Yzel.Sy:=50;
yzel.OnMouseMove:=FormMouseMove;   
...

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
form1.caption:=format('%d %d',[x,y]);
end;
При движении мыши - ничего не происходит

Последний раз редактировалось ZBEP; 01.03.2011 в 05:10.
ZBEP вне форума Ответить с цитированием
Старый 01.03.2011, 02:06   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

залеите весь проект что б можно было на практике разбираца
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 01.03.2011, 02:14   #6
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

ArtGrek, ох, там оочень много лишнего не по теме..
Сейчас попробую обрезок сделать и залью.
ZBEP вне форума Ответить с цитированием
Старый 01.03.2011, 02:44   #7
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Вот обрезал все.
В архиве скомпилированный проект с исходниками и dll для работы DX.
+ На всякий случай сам DX.
Вложения
Тип файла: rar FE.rar (1.17 Мб, 13 просмотров)
Тип файла: rar DirectX.rar (684.4 Кб, 6 просмотров)

Последний раз редактировалось ZBEP; 01.03.2011 в 06:58.
ZBEP вне форума Ответить с цитированием
Старый 07.04.2011, 23:02   #8
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Сделал вот так:
Код:
unit ZComp;

interface

uses Windows, Classes, Controls, Forms, Mini2DUT, Mini2DDX;

type

  TZComp = class(TControl)
  public
    constructor Create(AOwner: TComponent); override;
  end;

  TZCom = class(TZComp)
  published
    property Align;
    property Anchors;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property Visible;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnGesture;
    property OnMouseActivate;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseEnter;
    property OnMouseLeave;
    property OnStartDock;
    property OnStartDrag;
    procedure ZDraw(Image:DXImage);
  end;

implementation

constructor TZComp.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 50;
  Height := 50;
end;

procedure TZCom.ZDraw(Image:DXImage);
begin
DXDraw(Left,Top,Left+Width,Top+Height,Image);
end;

end.
Хз "гуманно" это или нет, главное работает так, как я хотел.

Последний раз редактировалось ZBEP; 08.04.2011 в 15:28.
ZBEP вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 15:42
MouseMove muinmy Помощь студентам 1 28.09.2010 18:05
Не запускается действие MouseMove при прозрачной форме... Ckomoroh Общие вопросы Delphi 10 29.11.2009 20:46
Динамические компоненты и MouseMove Шульц Общие вопросы Delphi 10 23.01.2009 12:27