Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как можно определить момент выхода курсора мыши из компонента


Страницы:   1 2

TeNY ©   (2004-10-03 17:35:00) 

Как можно определить момент выхода курсора мыши из компонента


ЮЮ   (2004-10-08 04:42:00) [1]

Может и по образцу, не работающий код все равно никому, кроме тебя не видно. Вот этот например, работает, как и ожидалось, и без рекурсий:

procedure TForm1.Memo1MouseEnter(Sender: TObject);
begin
 Caption := 'Âõîäèò ...';
 Application.MessageBox('MouseEnter', 'Memo1', 0);
end;

procedure TForm1.Memo1MouseLeave(Sender: TObject);
begin
 Caption := '... è âûõîäèò';
 Memo1.Lines.Add('çàìå÷àòåëüíî âûõîäèò');
 Application.MessageBox('MouseLeave', 'Memo1', 0);
end;


З.Ы. Дикое решение - на движение мыши выкидывать модальную форму: без Alt+F4 не выйти


TeNY   (2004-10-07 11:43:00) [2]

Код по вашему образцу писал, и кроме ShowMessage там ничего больше нет ...


ЮЮ   (2004-10-07 06:28:00) [3]

значит убери ShowMessage. Вероятно код в этом обработчике опять приводит к посылке сообщения CM_MOUSELEAVE. А причина - в твоем коде, значит тебе ошибку и искать :)


TeNY   (2004-10-07 06:08:00) [4]

Ещё одна проблема в случае если в функции MouseLeave Стоит ShowMessage() то обработчик начиент бесконечно отрабатывать её до ошибки переполнения буфера,почему?


TeNY   (2004-10-06 19:57:00) [5]

Спасибо,вроде разобрался


TeNY   (2004-10-06 13:39:00) [6]

подробнее пожалуйста,я никогда не созлавал своих компонентов поэтому всё в новинку


begin...end   (2004-10-06 13:27:00) [7]


> [28] TeNY ©   (06.10.04 13:25)

inherited


TeNY   (2004-10-06 13:25:00) [8]

У меня возникла проблема следующего плана:Cozdaл компонентне основе SPSKINBUTTON добавив как сказано выше свойсво CM_mouseleave(надо сказать что у него уже было подобное свойсво только оно не работало),надо сказать что кнопка на которую наводиш курсор она цвет меняет,убираешь все возвращается в норму,так вот этого возвращения не происходит то есть событие обрабатывается только моим обработчиком.Вся проблема состоит в том что нет исходников этой кнопки.Так вот как сделать так что событие сначало обработалось одним обработчиком а затем передала упраление родному обработчику


TeNY   (2004-10-06 12:00:00) [9]

А можно ли через sender определить какие сообщения отправляюстя компоненту в частности находится ли над ним мышь


ЮЮ   (2004-10-06 07:51:00) [10]

Даже при беглом взгляде видно, что методы Goup и BUTClick ничем не отличаются (за исключением кода), поэтому и вызываются одинаково :)

procedure TForm1.BUTOnMouseEnter(Sender: TObject);
begin
 Goup(Sender);
 BUTClick(Sender);
 // или TButton(Sender).Click;
end;

В первом случае вызывается метод BUTClick, независимо, эта ли процедура назначена в качестве обработчика OnClick кнопки

Во втором же, вызывается именно тот обработчик, который назначен Sender-у


TeNY   (2004-10-06 07:13:00) [11]

Понятно.А можно ли с помощью Sender организовать взаимодейсвие по следующему алгоритме к примеру есть 5 кнопок и у каждой есть обработчик типа BUTOnMouseEnter

...
procedure TForm1.BUTOnMouseEnter(Sender: TObject);
begin
goup(sender)
end;
procedure TForm1.goup(OBJECT: TObject);
begin
////
////
///
end;

procedure TForm1.BUTClick(Sender: TObject);
begin
ShowMessage('It's OK!')
end;


так как нужно процедуру  goup чтобы оно в зависимости от sender вызывала  типа ОбьектЩелчок в данном случае BUTClick


ЮЮ   (2004-10-06 03:45:00) [12]

Sender - это объект, для которого выполняется код этого обработчика. Для доступа к св-вам этого объекта следеет привести его к нужному типу, удостоверившишь, что такое приведение типов допустимо, например

procedure TForm1.Memo1OnMouseEnter(Sender: TObject);
begin
 Caption := 'Вошли в объект класса ' + Sender.ClassName;
 if (Sender is TComponent) and (TComponent(Sender).Name <> '') then
   Caption := Caption + ' [' TComponent(Sender).Name + ']';  
end;


TeNY   (2004-10-05 19:08:00) [13]

а как Sender: TObjectпользоватся обьясните пожалуйста


ЮЮ   (2004-10-05 09:17:00) [14]

>а вот что куда писать чтобы в инспекторе обьектов появилось свойство

поместить в секцию published (а не в public, как в [14])

Но тогда, по-моему, не прокатит с
 TMemo = class(StdCtrls.TMemo)
Класс придется называть иначе, дабы он появился на палитре компонентов, а стало быть правки будет гораздо больше - и в pas и в dfm, чтобы св-во появилось в инспекторе


TeNY   (2004-10-05 08:40:00) [15]

так это он создает компонент а просто добавил событие
а компонент создается в такой форме
unit xxx;
interface
uses
 xxx;
type
 TXXX = class(TXXX)
 private
   { Private declarations }
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   { Published declarations }
 end;
procedure Register;
implementation
procedure Register;
begin
 RegisterComponents('Standard', [TActionManager1]);
end;
end.

а вот что куда писать чтобы в инспекторе обьектов появилось свойсво mouseleave я не знаяю вот и спрашиваю


begin...end   (2004-10-05 08:06:00) [16]


> [19] TeNY ©   (05.10.04 07:46)


> А можно в таком случае (если один обработчик)получить от
> какой кнопки идет вызов.

Можно. Sender: TObjectтебе ни о чём не говорит?

> И я не совсем понял что за см. [14].

См. пост № 14 ( ЮЮ © (04.10.04 09:13) )


TeNY   (2004-10-05 07:46:00) [17]

А можно в таком случае (если один обработчик)получить от какой кнопки идет вызов.

И я не совсем понял что за см. [14].


begin...end   (2004-10-04 14:08:00) [18]


> [16] TeNY ©   (04.10.04 10:46)


> как можно добавить это свойсво к самому компоненту

Написать наследника, см. [14].

> каждому писать ему обработчик

Один и тот же обработчик можно назначить 10 кнопкам.


TeNY   (2004-10-04 12:10:00) [19]

<><img scr='AY'><>


TeNY   (2004-10-04 10:46:00) [20]

Это всё очень хорошо,но как можно добавить это свойсво к самому компоненту а то у меня около 10ка кнопок и каждому писать ему обработчик...

Обьясните пожалуйста


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо