Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Вниз

Как проще всего определить когда мышь входит и выходит с TImage?   Найти похожие ветки 

 
Versus31   (2002-11-22 12:17) [0]

Помогите новичку, пожалуйста. Нужно при входе мыши на TImage менять рисунок на другой, а при выходе - на прежний. Я сам придумал один способ, но знаю, что можно проще. Так как проще всего?


 
Игорь Шевченко   (2002-11-22 12:42) [1]

CM_MOUSEENTER, CM_MOUSELEAVE


 
Versus31   (2002-11-23 08:46) [2]

А немного конкретней можно...? CM_MOUSEENTER, CM_MOUSELEAVE это что, события?


 
PaRL   (2002-11-23 10:10) [3]

Сообщения. Controls.pas.


 
Юрий Зотов   (2002-11-23 10:32) [4]

Пример TImage с событиями OnMouseEnter/Leave. По аналогии (просто изменив класс-предок) можно построить любой контрол с такими событиями.

TMyImage = class(TImage)
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
protected
procedure DoMouseEnter; dynamic;
procedure DoMouseLeave; dynamic;
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure TMyImage.CMMouseEnter(var Msg: TMessage);
begin
inheried;
DoMouseEnter
end;

procedure TMyImage.CMMouseLeave(var Msg: TMessage);
begin
inherited;
DoMouseLeave
end;

procedure TMyImage.DoMouseEnter;
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self)
end;

procedure TMyImage.DoMouseLeave;
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self)
end;


 
Tano   (2002-11-23 10:44) [5]

Напиши класс - потомок TImage, в него добавь обработчики двух событий : Игорь Шевченко © (22.11.02 12:42).

type
TLiveImage = class(TImage)
procedure MEnterProc(var Message: TMessage); message CM_MOUSEENTER;
procedure MLeaveProc(var Message: TMessage); message CM_MOUSELEAVE;
end;


procedure TLiveImage.MEnterProc(var Message: TMessage);
begin
//твои действия при входе мыши в Image
end;

procedure TLiveImage.MLeaveProc(var Message: TMessage);
begin
//твои действия при выходе мыши из Image
end;


По-моему так. Вроде негде ошибиться (Писал по аналогии с другими примерами).
Тебе в таком случае прийдется самому создавать и уничтожать объект TLiveImage. Что-то вроде:


TForm1 = class(TForm)
private
{ Private declarations }
public
LiveImage :TLiveImage;
{ Public declarations }
end;

var
Form1 :TForm1;

procedure TForm1.OnCreate;
begin
LiveImage:=TLiveImage.Create(nil);
LiveImage.Parent:=Form1;
//...
end;

procedure TForm1.OnDestroy;
begin
LiveImage.Free;
//...
end;


Между прочим, раз уж ты сам создаешь объект, то при большов количестве картинок можно создать массив объектов, при этом одиноковый обработчик мыши всем достанется.
LiveImages :array[1..10] of TLiveImage;
LiveImages[i].обычные_методы_и_свойства_объекта

И еще: рекомендуется все действия с вручную создаваемыми компонентами заключать в try..finally


 
Tano   (2002-11-23 10:46) [6]

Пока я в off-line печатал, Господин Зотов меня опередил :-)


 
Tano   (2002-11-23 10:57) [7]

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


 
Versus31   (2002-11-23 12:22) [8]

Большое Вам всем спасибо!


 
Tano   (2002-11-24 11:19) [9]

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


 
Versus31   (2002-11-29 16:32) [10]

Народ, а как теперь обработать MouseDown и MouseUp на мой объект???


 
Skier   (2002-11-29 16:37) [11]

>Versus31
TImage.OnMouseDown
TImage.OnMouseUp ? :)


 
Versus31   (2002-11-30 01:35) [12]

Короче привожу код:

type
TLiveImage = class(TImage)
procedure MEnterProc(var Message: TMessage); message CM_MOUSEENTER;
procedure MLeaveProc(var Message: TMessage); message CM_MOUSELEAVE;
end;

type
TForm1 = class(TForm)
Label1: TLabel;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure LiveImageClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
LiveImage:TLiveImage;
end;

var
Form1: TForm1;
Mousein: boolean;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
LiveImage:=TLiveImage.Create(nil);
LiveImage.Parent:=Form1;
LiveImage.Picture.loadfromfile("c:/1.bmp");
Mousein:=false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
LiveImage.Free;
end;

procedure TLiveImage.MEnterProc(var Message: TMessage);
begin
Mousein:=true;
Form1.Label1.caption:="In";
Form1.LiveImage.Picture.loadfromfile("c:/2.bmp");
end;

procedure TLiveImage.MLeaveProc(var Message: TMessage);
begin
Mousein:=false;
Form1.Label1.caption:="Out";
Form1.LiveImage.Picture.loadfromfile("c:/1.bmp");
end;

procedure TForm1.LiveImageClick(Sender: TObject);
begin
Form1.Close;
end;

end.

Почему procedure TForm1.LiveImageClick не обрабатывается? И как обработать MouseUp и MouseDown на LiveImage?


 
Versus31   (2002-11-30 09:46) [13]

Ну ответьте кто-нибудь.


 
Юрий Зотов   (2002-11-30 10:03) [14]

> Почему procedure TForm1.LiveImageClick не обрабатывается?

Потому что обработчик не назначен событию.
LiveImage.OnClick := LiveImageClick;


> И как обработать MouseUp и MouseDown на LiveImage?
Точно так же, как и OnClick - написать и назначить обработчики.

Прочитайте вот эту статью - все подобные вопросы исчезнут навсегда:
http://www.delphikingdom.com/helloworld/runtime_comp.htm



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

Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.008 c
1-28055
mazepa
2002-11-27 20:22
2002.12.09
х


14-28297
Cr@sh
2002-11-19 18:02
2002.12.09
Помогите, кто-нибудь...


14-28202
dinAlt
2002-11-16 12:33
2002.12.09
Открылся новый сайт!!!


1-28086
MikeFW
2002-11-28 09:29
2002.12.09
Как архивировать программно файлы?


1-27934
GrAlexis
2002-11-27 17:14
2002.12.09
Сообщение CM_EXIT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский