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

Вниз

Timage   Найти похожие ветки 

 
hogo   (2004-06-21 09:51) [0]

есть много катринок, при наведении на какую либо загружается другая картинка. необходимо при убирании с нее мышки загрузить прежнюю. как лучше реализовать?


 
bsFrame   (2004-06-21 11:13) [1]

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


 
hogo   (2004-06-22 07:01) [2]


> bsFrame   (21.06.04 11:13) [1]
> Есть пример создания графической кнопки, по работе индеетичной
> стандартной. Могу сбросить.

буду очень признателен hogo@mail333.com


 
grom   (2004-06-22 08:36) [3]

можно расположить два image друг на друге и при наведении мышки
один скрываеш другой показываеш и наоборот.


 
hogo   (2004-06-22 09:18) [4]

необходимо вернуть прежнюю картинку когда мышку убираешь с картинки, а не когда наводишь


 
-=IVA=- ©   (2004-06-22 10:17) [5]

Попробуй следующее:
Когда наводишь на Image - обрабатывай Image1MouseMove
Когда убираешь мышь с Image, обрабатывай FormMouseMove


 
Ozone ©   (2004-06-22 11:35) [6]

-=IVA=- ©   (22.06.04 10:17) [5]

Не правильно, ИМХО


 
grom   (2004-06-22 12:55) [7]

все правильно и прекрасно работает

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;


 
hogo   (2004-06-22 13:08) [8]

-=IVA=- [5]

просто вокруг еще много других объектов
и если быстро мышку переместить то на форме событие может не сработать,
я вот в Rx нашел у некоторых компонет событие OnMouseLeave щас разбираюсь как оно реализовано...


 
-=IVA=- ©   (2004-06-22 16:59) [9]

У меня на форме было куча кнопок, и при наведении на каждую, из массива выбирались ее свойства и выводились в статусбар...
Я мог с любой скоростью мышкой проноситься мимо кнопок и мимо формы, все отлично работало...Даже если пару миллиметров будет между объектами, все равно сработает OnMouseMove на форме...
Что тебе мешает попробовать :)


 
bsFrame ©   (2004-06-22 17:32) [10]

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

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

2bsFrame ©:
А если у меня Image меньше или больше 32 ?


 
bsFrame ©   (2004-06-23 06:44) [12]

>2bsFrame ©:
>А если у меня Image меньше или больше 32 ?

if (TImage(Sender).Height<y)or(TImage(Sender).Width<x)or(x<0)or(y<0)

Тогда наверно так.


 
Ozone ©   (2004-06-23 08:45) [13]

Все гораздо проще:


 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;


 
hogo   (2004-06-23 09:20) [14]


> Ozone © [13]

Да вот именно так и надо! спасибо!



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

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

Наверх




Память: 0.5 MB
Время: 0.022 c
1-1093847467
DesWind
2004-08-30 10:31
2004.09.12
Редактор свойств


14-1093067609
kaZaNoVa
2004-08-21 09:53
2004.09.12
TThread и через CreateThread


3-1092745901
Len
2004-08-17 16:31
2004.09.12
База для хранения "разных" файлов


4-1089974361
Muchacho
2004-07-16 14:39
2004.09.12
Kак изменить рисунок рабочего стола Windows XP?


6-1089095767
andrey__
2004-07-06 10:36
2004.09.12
RasApi - запуск удал. подключ. из TServiceApplication