![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Timage [D6, Win95/98, WinXP]
hogo © (2004-06-21 09:51:00)есть много катринок, при наведении на какую либо загружается другая картинка. необходимо при убирании с нее мышки загрузить прежнюю. как лучше реализовать?
hogo (2004-06-23 09:20:00) [1]
> Ozone © [13]
Да вот именно так и надо! спасибо!
Ozone (2004-06-23 08:45:00) [2]Все гораздо проще:
TMyImage = class(TImage)
private
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
protected
procedure MouseEnter; dynamic;
procedure MouseLeave; dynamic;
public
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;
< ... >
procedure TMyImage.CMMouseEnter(var Msg: TMessage);
begin
MouseEnter;
end;
procedure TMyImage.CMMouseLeave(var Msg: TMessage);
begin
MouseLeave;
end;
procedure TMyImage.MouseEnter;
begin
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
Self.Picture.LoadFromFile('1.bmp');
end;
procedure TMyImage.MouseLeave;
begin
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
Self.Picture.LoadFromFile('2.bmp');
end;
bsFrame (2004-06-23 06:44:00) [3]>2bsFrame ©:
>А если у меня Image меньше или больше 32 ?
if (TImage(Sender).Height<y)or(TImage(Sender).Width<x)or(x<0)or(y<0)
Тогда наверно так.
-=IVA=- (2004-06-22 17:45:00) [4]2bsFrame ©:
А если у меня Image меньше или больше 32 ?
bsFrame (2004-06-22 17:32:00) [5]Вот рабочий код, кидаешь на форму любую картинку задаешь ей события
описаные ниже соответственно и все работает, под исходную картинку
можешь поместить другую.
unit button;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, AppEvnts;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
buttonpress: boolean;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TImage(Sender).Visible := False;
Image1.Tag := 1;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TImage(Sender).Visible := True;
Image1.Tag := 0;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x>32)or(y>32)or(x<0)or(y<0) then TImage(Sender).Visible := True
else
if (Image1.Tag = 1) then TImage(Sender).Visible := False;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
showmessage('Кнопка была нажата');
end;
end.
-=IVA=- (2004-06-22 16:59:00) [6]У меня на форме было куча кнопок, и при наведении на каждую, из массива выбирались ее свойства и выводились в статусбар...
Я мог с любой скоростью мышкой проноситься мимо кнопок и мимо формы, все отлично работало...Даже если пару миллиметров будет между объектами, все равно сработает OnMouseMove на форме...
Что тебе мешает попробовать :)
hogo (2004-06-22 13:08:00) [7]-=IVA=- [5]
просто вокруг еще много других объектов
и если быстро мышку переместить то на форме событие может не сработать,
я вот в Rx нашел у некоторых компонет событие OnMouseLeave щас разбираюсь как оно реализовано...
grom (2004-06-22 12:55:00) [8]все правильно и прекрасно работает
procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Image1.Visible:=true;
Image2.Visible:=false
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Image1.Visible:=false;
Image2.Visible:=true
end;
Ozone (2004-06-22 11:35:00) [9]-=IVA=- © (22.06.04 10:17) [5]
Не правильно, ИМХО
-=IVA=- (2004-06-22 10:17:00) [10]Попробуй следующее:
Когда наводишь на Image - обрабатывай Image1MouseMove
Когда убираешь мышь с Image, обрабатывай FormMouseMove
hogo (2004-06-22 09:18:00) [11]необходимо вернуть прежнюю картинку когда мышку убираешь с картинки, а не когда наводишь
grom (2004-06-22 08:36:00) [12]можно расположить два image друг на друге и при наведении мышки
один скрываеш другой показываеш и наоборот.
hogo (2004-06-22 07:01:00) [13]
> bsFrame (21.06.04 11:13) [1]
> Есть пример создания графической кнопки, по работе индеетичной
> стандартной. Могу сбросить.
буду очень признателен hogo@mail333.com
bsFrame (2004-06-21 11:13:00) [14]Есть пример создания графической кнопки, по работе индеетичной стандартной. Могу сбросить.