Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как по наведению мышки включать анимацию в Animatе, (Если св-ва OnMouseMove у TAnimatе нет) 
:(
    Опции темы
Vorona
Дата 1.1.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



помогите решить дурацкую проблему..

В программе используются TAnimate и надо, чтобы в них начиналась анимация по OnMouseMove, но такого свойства у Animate нет. Пробовала поместить Label на Animate, чтоб появилось onmousemove. Так вот лажа: и Label-ы, и Image-и помещаются под Animate и никакие Control-Bring to front не помагают.. В общем не знаю, что и делать...

PM MAIL WWW   Вверх
RA
Дата 1.1.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Много способов есть, предложу самый быстрый с использованием таймера.


Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
 P: TPoint;
 HWND: THandle;
 WndClass : array [0..255] of Char;
begin
GetCursorPos(P);
HWND := WindowFromPoint(P);
GetClassName(HWND, WndClass, SizeOf(WndClass));
if WndClass='TAnimate' then Твоя процедура Анимирования;
end;



Это сообщение отредактировал(а) RAdmin - 1.1.2005, 18:40
PM   Вверх
Fedor
Дата 1.1.2005, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Я вот быренька сделал компонент на основе TAnimate, у которого есть события OnMouseEnter и OnMouseLeave. Наворочено, конечно, но все же работает...

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  TAnimateML.zip


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
<Spawn>
Дата 1.1.2005, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Можно написать наследника, переопределив у него события CM_MOUSEENTER и CM_MOUSELEAVE:

Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls;

type
 TAnimateEx = class(TAnimate)
 private
   FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
   procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
 public
   property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
   property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
 end;

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   FAnimate: TAnimateEx;
 public
   procedure OnAnimateMouseEnter(Sender: TObject);
   procedure OnAnimateMouseLeave(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TAnimateEx }

procedure TAnimateEx.CMMouseEnter(var Msg: TMessage);
begin
 if Assigned(FOnMouseEnter) then
   FOnMouseEnter(Self);
 inherited;
end;

procedure TAnimateEx.CMMouseLeave(var Msg: TMessage);
begin
 if Assigned(FOnMouseLeave) then
   FOnMouseLeave(Self);
 inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FAnimate := TAnimateEx.Create(Self);
 with FAnimate do
 begin
   Parent := Self;
   FileName := 'E:\TEMP\AVI\clock.avi';
   Left := 10;
   Top := 10;
   OnMouseEnter := OnAnimateMouseEnter;
   OnMouseLeave := OnAnimateMouseLeave;
 end;
end;

procedure TForm1.OnAnimateMouseEnter(Sender: TObject);
begin
 FAnimate.Active := True;
end;

procedure TForm1.OnAnimateMouseLeave(Sender: TObject);
begin
 FAnimate.Active := False;
end;

end.

Добавлено @ 19:16
Ой, кажись опоздалsmile Пока писал код, уже Fedor запостил.

Это сообщение отредактировал(а) <Spawn> - 1.1.2005, 19:14


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Vorona
Дата 2.1.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



СПАСИБО, ПОПРОБУЮ РАЗОБРАТЬСЯ smile
PM MAIL WWW   Вверх
dm9
Дата 2.1.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Давно хотел спросить такую вещь (вроде бы, в тему smile ).

А без создания нового компонента (класса) на основе старого можно ли как-то отловить события, которых нет в компоненте по умолчанию?

Это сообщение отредактировал(а) dm9 - 2.1.2005, 19:04
PM MAIL ICQ   Вверх
<Spawn>
Дата 3.1.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Сам не проверял, но думаю можно изменить WindowProc при помощи GetWindowLong, SetWindowLong, но, ИМХО, в данном случае это изврат.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 3.1.2005, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



А если поместить TAnimate в панель, и обрабатывать события мыши самой панели?
PM MAIL   Вверх
Vorona
Дата 3.1.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 12.10.2004
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 2



dsergey

Точно!!! Огромное спасибо, это самый простой способ!!!!! smile smile smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.