![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить событи, когда курсор вышел за пределы фотографии? [D7, Win95/98, WinXP]
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]
Приведите весь код, так я не могу сказать.