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

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

Как отловить событи, когда курсор вышел за пределы фотографии? [D7, Win95/98, WinXP]


Страницы:   1 2

xkiller ©   (2004-11-09 14:35:00) 

Как отловить событие, когда курсор только-только вышел за пределы фотографии?


grom   (2004-11-11 21:16:00) [1]

xkiller   (11.11.04 20:08) [32]
Скачай исходник Hit The Rat
http://delphigfx.mastak.ru/game.htm
и посмотри как там сделаны кнопки на основе Image


begin...end   (2004-11-11 20:15:00) [2]

xkiller   (11.11.04 20:08) [32]

Можно. Но лучше, ИМХО, создать на основе кнопки с картинкой - TSpeedButton, например.


xkiller   (2004-11-11 20:08:00) [3]

У меня тут одна мысль пришла :) Можно ли создать компонент на основе Image... чтобы это была своего рода скинообразная кнопка? Т.е. по умолчанию у нее одна фотография, при наведении мышки другая (загорелась кнопочка), а при нажатии нажалась...:)


begin...end   (2004-11-11 20:08:00) [4]

xkiller   (11.11.04 19:52) [26]

Поставьте вместо ShowMessage что-нибудь другое. Например, Beep.


KilkennyCat   (2004-11-11 20:05:00) [5]


> xkiller   (11.11.04 20:04) [29]


это очень неудачный эксперимент, так как всплывающее окно забирает себе фокус, это раз, заставляет реагировать на него, это два. Могу еще добавить, но и этих двух вполне.


xkiller   (2004-11-11 20:04:00) [6]

KilkennyCatЯ ради эксперимента :)


Sun bittern   (2004-11-11 20:03:00) [7]

Поменяйте местами строки

ShowMessage('Test');
b:=false;


KilkennyCat   (2004-11-11 20:02:00) [8]

мда... showmessage - это просто лучше некуда...


xkiller   (2004-11-11 19:52:00) [9]

У меня все получилось! Событие возникает! Но как сделать чтобы оно выполнялось один раз после того как курсор выйдет за пределы Image, а не несколько раз? Я тут просто в событие OnMouseLeave поставил ShowMessage('Test'), так вот я эти все сообщения еле закрыл...:))) Можно конечно так:


var
b: boolean;

.....

procedure TForm1.MyImage1.MouseMove;
begin
b:=true;
end;

procedure TForm1.MyImage1.MouseLeave;
begin
if b=true then
 begin
 ShowMessage('Test');
 b:=false;
 end;
end;


но это в самой программе... а какнибудь в коде самого компонента можно это осуществить?


debuger   (2004-11-11 19:51:00) [10]

snx


begin...end   (2004-11-11 19:47:00) [11]

debuger ©   (11.11.04 19:39) [23]

Её и не должно быть в апишном хелпе. Оно описано в Controls.pas.


debuger   (2004-11-11 19:39:00) [12]

[14]
>> Смотреть хелп! Разве существует CM_MOUSELEAVE ???

>Представьте себе, - существует.

В моем апишном хелпе ее нет. Де оно описано? (мне, что бы в будущем не париться)


Sun bittern   (2004-11-11 19:03:00) [13]

Поправка

public
...
  property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;

нужно так:

published
...
  property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;


Sun bittern   (2004-11-11 18:42:00) [14]

Кинем на форму TLabel и после этого ищем чето подобное

type
 TForm1 = class(TForm)
   Label1: TLabel; << Зажав клавишу Ctrl щелкнем по TLabel мышкой

Перейдем сюда
TLabel = class(TCustomLabel)
зажав клавишу Ctrl щелкнем по TCustomLabel мышкой

перейдем сюда
TCustomLabel = class(TGraphicControl)

и смотрим реализацию

 TCustomLabel = class(TGraphicControl)
 private
...
FOnMouseLeave: TNotifyEvent;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
...
 public
...
   property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
 end;

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

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


xkiller   (2004-11-11 18:30:00) [15]

Sun bitternА где мне найти исходник TLabel? Он в Delphi в какой папке?


Sun bittern   (2004-11-11 18:27:00) [16]

Посмотрите пример реализации в исходниках TLabel для свойства OnMouseLeave.


xkiller   (2004-11-11 18:23:00) [17]

а как мне сделать, чтобы то что нужно сделать делала программа а не компонент? Т.е. чтобы это было событие для программы


begin...end   (2004-11-11 18:20:00) [18]

xkiller   (11.11.04 18:14) [16]

Ну и где реализация CMMouseLeave()?

Пишите в этом же модуле, в секции implementation:

procedure TMyImage.CMMouseLeave(var Message: TMessage);
begin
 // Здесь описываете действия, которые должен выполнить Ваш компонент, когда в него придёт сообщение
end


xkiller   (2004-11-11 18:14:00) [19]

код компонента:

unit MyImage;

interface

uses
 SysUtils, Classes, Controls, ExtCtrls, Messages;

type
 TMyImage = class(TImage)
 private
   { Private declarations }
 protected
   { Protected declarations }
   procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
 public
   { Public declarations }
 published
   { Published declarations }
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('MyVCL', [TMyImage]);
end;

end.


begin...end   (2004-11-11 18:12:00) [20]

xkiller   (11.11.04 18:09) [13]

Приведите весь код, так я не могу сказать.


Страницы:   1 2

Наверх

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