Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

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

 
xkiller   (2004-11-09 14:35) [0]

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


 
Digitman ©   (2004-11-09 14:42) [1]

нанять Штирлица в качестве частного сыскного агента.


 
begin...end ©   (2004-11-09 14:46) [2]

WM_MOUSELEAVE ?


 
begin...end ©   (2004-11-09 14:47) [3]

Т.е. CM_MOUSELEAVE


 
Symb   (2004-11-09 14:57) [4]

Перемещение курсора не проходит бесследно. Не только если он вышел за пределы фотографии, но и при неосторожном задевании мышки ногой, системой генерируются всяческие события, оповещающие заинтересованные формы и контролы о новых координатах указателя. Зная координаты фотографии, несложно определить, вышел ли он за ее границы. А "только-только" означает, что при прошлой проверке он еще был на ней, а теперь -- уже нет.


 
xkiller   (2004-11-09 15:12) [5]

begin...end Это API сообщение? Как мне его обрабатывать? Помоги плиз!


 
xkiller   (2004-11-09 15:41) [6]

Удалено модератором


 
begin...end ©   (2004-11-09 15:48) [7]

xkiller   (09.11.04 15:12) [5]

Что-то вроде этого, не проверял...

type
 TMyImage = class(TImage)
 protected
   procedure CMMouseLeave(Message: TMessage); message CM_MOUSELEAVE;
 end;

...

procedure TMyImage.CMMouseLeave(Message: TMessage);
begin
 // Мышь ушла, реагируем на это
end.


 
Digitman ©   (2004-11-09 17:08) [8]


> begin...end


TImage = "фотография" ?

ришпекты телепатам.


 
begin...end ©   (2004-11-09 19:10) [9]

Digitman ©   (09.11.04 17:08) [8]


>TImage = "фотография" ?

Спорим? :-)))


 
xkiller   (2004-11-11 17:34) [10]

Значит надо написать свой компонент? Я пишу:

unit MyImage;

interface

uses
 SysUtils, Classes, Controls, ExtCtrls, Messages;

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

procedure Register;

implementation

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

end.


а в программе обрабатывать событие:

procedure TMyImage.CMMouseLeave(Message: TMessage);
begin
// Мышь ушла, реагируем на это
end.


Я вроде так понял... Написал этот компонент (см. выше) но у меня почему-то он не ставится выдвет ошибку в строке
procedure CMMouseLeave(Message: TMessage); message CM_MOUSELEAVE;

Что делать?


 
begin...end ©   (2004-11-11 17:47) [11]

xkiller   (11.11.04 17:34) [10]

Извиняюсь.

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE

И в реализации:

procedure TMyImage.CMMouseLeave(var Message: TMessage)

Сообщите о результатах.


 
debuger ©   (2004-11-11 17:55) [12]

[0]
Lingvo X.0 + Win32 Developers Reference -> Find -> WM_MOUSELEAVE
see: TrackMouseEvent  // NT only

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

[9]
Вы уверены, что фотография это не коврик для мыши?


 
xkiller   (2004-11-11 18:09) [13]

опять ошибка в этой строке
"[Error] MyImage.pas(14): Unsatisfied forward or external declaration: "TMyImage.CMMouseLeave""


 
begin...end ©   (2004-11-11 18:09) [14]

debuger ©   (11.11.04 17:55) [12]

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

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

> Вы уверены, что фотография это не коврик для мыши?

Почему-то уверен.


 
begin...end ©   (2004-11-11 18:12) [15]

xkiller   (11.11.04 18:09) [13]

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


 
xkiller   (2004-11-11 18:14) [16]

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

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:20) [17]

xkiller   (11.11.04 18:14) [16]

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

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

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


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

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


 
Sun bittern ©   (2004-11-11 18:27) [19]

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


 
xkiller   (2004-11-11 18:30) [20]

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


 
Sun bittern ©   (2004-11-11 18:42) [21]

Кинем на форму 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;

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


 
Sun bittern ©   (2004-11-11 19:03) [22]

Поправка

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

нужно так:

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


 
debuger ©   (2004-11-11 19:39) [23]

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

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

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


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

debuger ©   (11.11.04 19:39) [23]

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


 
debuger ©   (2004-11-11 19:51) [25]

snx


 
xkiller   (2004-11-11 19:52) [26]

У меня все получилось! Событие возникает! Но как сделать чтобы оно выполнялось один раз после того как курсор выйдет за пределы 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;


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


 
KilkennyCat ©   (2004-11-11 20:02) [27]

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


 
Sun bittern ©   (2004-11-11 20:03) [28]

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

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


 
xkiller   (2004-11-11 20:04) [29]

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


 
KilkennyCat ©   (2004-11-11 20:05) [30]


> xkiller   (11.11.04 20:04) [29]


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


 
begin...end ©   (2004-11-11 20:08) [31]

xkiller   (11.11.04 19:52) [26]

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


 
xkiller   (2004-11-11 20:08) [32]

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


 
begin...end ©   (2004-11-11 20:15) [33]

xkiller   (11.11.04 20:08) [32]

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


 
grom   (2004-11-11 21:16) [34]

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.047 c
14-1100180350
iZEN
2004-11-11 16:39
2004.11.28
HiAsm: ваши впечатления.


3-1099066953
MAVOR
2004-10-29 20:22
2004.11.28
ПОИСК


1-1100284015
Robin Hood
2004-11-12 21:26
2004.11.28
Как мне из строки достать название формы или кнопки для использов


8-1093899182
AlexZ
2004-08-31 00:53
2004.11.28
Где бы почитать про GDI, кроме Win32P sR


1-1100361663
sLa\/a
2004-11-13 19:01
2004.11.28
как рисовать на TPanel