Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.04.2012, 21:53
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
Вопрос События в компоненте?

Суть такая: Создал компонент на основе TImage. Теперь хочу создать в нём событие, которое будет реагировать, когда курсор на него наводиться. Но как это сделать? Если бонально просто, в TImage нет сообытия OnMove. Как же его туда добавить? Просто по сообщениям из Windows пока ни изучил материал. Как это хоть делаеться?
Код:

Код:
type
  TMyEvent =  procedure(Sender: TObject) of object;
  TButonImage = class (TImage)
  private
    Events: TApplicationEvents;
    fIndex: Integer;
    fOnMouseMove: TMyEvent;
    procedure DoOnMouseMove(Sender:TObject);
    procedure SetIndex(Index:Integer);
    procedure SetPicture(Name:string);

  published
    property Index: Integer read fIndex write SetIndex;
    property OnMouseMove: TMyEvent read fOnMouseMove;
  public
    constructor Create(Aowner: TComponent);
end;

implementation

uses Unit1;
{ ButonImage }

constructor TButonImage.Create(Aowner: TComponent);
begin
  inherited Create(Aowner);
  Parent:=TWinControl(Aowner);
  Self.Height:=100;
  Self.Width:=100;
SetIndex(0);
Self.Perform(WM_MOUSEMOVE,0,0);
end;

procedure TButonImage.DoOnMouseMove(Sender: TObject);
begin
  if Sender = Self then
    if Assigned(fOnMouseMove) then fOnMouseMove(Self)
    else
      begin
      SetIndex(0);
      end;
end;

procedure TButonImage.SetIndex(Index: Integer);
begin
fIndex:=Index;
case fIndex of
  -1: SetPicture('11.png');
   0: SetPicture('12.png');
   1: SetPicture('13.png');
end;
end;

procedure TButonImage.SetPicture(Name: string);
begin
Self.Picture.LoadFromFile(Name);
end;

end.
Ответить с цитированием
  #2  
Старый 06.04.2012, 21:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Fantomas_RUS
... Если бонально просто, в TImage нет сообытия OnMove...
Ух ты, и куда оно делось? Хоть в исходники ExtCtrls.pas загляни.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 06.04.2012, 22:08
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Ух ты, и куда оно делось? Хоть в исходники ExtCtrls.pas загляни.
Спасибо. Тогда такой вопрос, извеняюсь за свою не компетентность, события OnMove в TImage его нет, тогда как его взять и добавить из ExtCtrls?
Ответить с цитированием
  #4  
Старый 06.04.2012, 22:15
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Какое событие OnMove? В TImage имеется событие OnMouseMove.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 06.04.2012, 22:54
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
Вопрос

Цитата:
Сообщение от angvelem
Какое событие OnMove? В TImage имеется событие OnMouseMove.
Вот что у меня выдаёт на ввод OnM.....

Так что я не так набираю?
Изображения
Тип файла: jpg Untitled-1.jpg (96.3 Кбайт, 8 просмотров)
Ответить с цитированием
  #6  
Старый 06.04.2012, 23:03
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я так понимаю, нужно полностью самостоятельно обработать событие OnMouseMove. Можно сделать так:
Код:
  TButonImage = class (TImage)
...
  protected
    procedure MouseMove(Sender : TObject; Shift : TShiftState; X, Y : Integer);
...
  end;
...
constructor TButonImage.Create(Aowner: TComponent);
begin
...
  OnMouseMove := MouseMove;
end;

procedure TButonImage.MouseMove(Sender : TObject; Shift : TShiftState; X, Y : Integer);
begin
...
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Fantomas_RUS (06.04.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025