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

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

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]

Есть пример создания графической кнопки, по работе индеетичной стандартной. Могу сбросить.


Наверх

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