Консультация № 95130
14.07.2007, 13:41
0.00 руб.
0 7 7
Здравствуйте уважаемые эксперты. Подскажите пожалуйста как реализовать «красивые» кнопки. Я хочу использовать нарисованные jpeg или bmp картинки. С помощью Image я разместил на форме нужную мне картинку но как сменить эту картинку другую при движение и нажатии мыши на Image.

Обсуждение

Неизвестный
14.07.2007, 14:03
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
Можно например так:

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image1.Picture.LoadFromFile(‘c:\0000\02.jpg‘);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image1.Picture.LoadFromFile(‘c:\0000\01.jpg‘);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile(‘c:\0000\02.jpg‘);
end;

Можно сделать третий рисунок при перемещении указателя мыши по Image запихав на:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Неизвестный
14.07.2007, 14:51
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
используй SpeedButton. Там есть свойство GLYTH. В нём можно указать путь к графическому файлу, желательно BMP.

Удачи!
C Ув. SHERRY
Неизвестный
14.07.2007, 15:39
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
Используйте следующие события у Image:
onMouseDown - нажатие кнопки мыши на Image
onMouseUp - отпускание кнопки мыши на Image
onMouseMove - движение мыши по Image
Для того чтобы сменить картинку делаем следующее:
Image1.Picture.LoadFromFile(‘Имя картинки‘);

Или еще можно воспользоваться компанентом ImageList с вкладки Win32, загружаете в него необходимы картинки затем по перечисленым выше событиям пишите это изменяя 4-ый параметр:
Image1.Picture:=nil;
Imagelist1.Draw(Image1.Canvas,0,0,0);// 4-ый параметр это индекс картинки в ImageList
Достоинство этого метода в том что рисунки всегда в программе их не надо таскать вместе с программой

2-а работающих примера в приложении.

Приложение:
//Пример 1//название картинок может отличаться от вашихunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type TForm1 = class(TForm) Image1: TImage; procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginImage1.Picture.LoadFromFile(‘Down.bmp‘);end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginImage1.Picture.LoadFromFile(‘Move.bmp‘);end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginImage1.Picture.LoadFromFile(‘Up.bmp‘);end;end.//Пример 2//и используя ImageListunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type TForm1 = class(TForm) Image1: TImage; ImageList1: TImageList; procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginImage1.Picture:=nil;Imagelist1.Draw(Image1.Canvas,0,0,1);end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginImage1.Picture:=nil;Imagelist1.Draw(Image1.Canvas,0,0,0);end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginImage1.Picture:=nil;Imagelist1.Draw(Image1.Canvas,0,0,2);end;end.
Неизвестный
14.07.2007, 17:56
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
Недавно отвечал на вопрос <a href=http://www.rusfaq.ru/info/question/94537>94537</a> - посмотрите ответы, скачайте пример. Код приложения с картинками в ImageList в приложении. (к image добавлены новые события - MouseEnter - когда мышь входит в пределы визуального компонента и MouseLeave - когда мышь оставляет его пределы).

Приложение:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, bsImage, ImgList; type TForm1 = class(TForm) Image1: TbsImage; ImageList1: TImageList; procedure FormCreate(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseEnter(Sender: TObject); procedure Image1MouseLeave(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; bm: TBitmap; pic:TPicture; inimage:boolean; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin pic:=TPicture.Create; bm := TBitmap.Create; bm.LoadFromFile(‘up.bmp‘); form1.ImageList1.AddMasked(bm,clBlack); bm.LoadFromFile(‘down.bmp‘); form1.ImageList1.AddMasked(bm,clBlack); bm.LoadFromFile(‘in.bmp‘); form1.ImageList1.AddMasked(bm,clBlack); bm.Free; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin form1.ImageList1.GetBitmap(1,Pic.Bitmap); form1.Image1.Picture:=pic; image1.Repaint; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if inimage then form1.ImageList1.GetBitmap(2,Pic.Bitmap) else form1.ImageList1.GetBitmap(0,Pic.Bitmap); form1.Image1.Picture:=pic; end; procedure TForm1.Image1MouseEnter(Sender: TObject); begin inimage:=true; form1.ImageList1.GetBitmap(2,Pic.Bitmap); form1.Image1.Picture:=pic; end; procedure TForm1.Image1MouseLeave(Sender: TObject); begin inimage:=false; form1.ImageList1.GetBitmap(0,Pic.Bitmap); form1.Image1.Picture:=pic; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin pic.Free; end; end.
Неизвестный
14.07.2007, 19:52
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
Зарегистрируйте компонент из приложения. Этот компонент добавляет к Image новые свойства: onMouseLeave (стрелка курсора покидает компонент) и onMouseEnter (курсор мышки над компонентом). Также используйте onMouseDown, onMouseUp и используйте ImageList, как подсказали предыдущие эксперты.
Пример:

procedure TForm1.N_Image1MouseLeave(Sender: TObject);
begin
N_Image1.Picture:=nil;
Imagelist1.Draw(N_Image1.Canvas,0,0,1);
end;

procedure TForm1.N_Image1MouseEnter(Sender: TObject);
begin
N_Image1.Picture:=nil;
Imagelist1.Draw(N_Image1.Canvas,0,0,2);
end;

procedure TForm1.N_Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
N_Image1.Picture:=nil;
Imagelist1.Draw(N_Image1.Canvas,0,0,3);
end;

procedure TForm1.N_Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
N_Image1.Picture:=nil;
Imagelist1.Draw(N_Image1.Canvas,0,0,2);
end;



Приложение:
unit New_Image;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type TN_Image = class(TImage) private { Private declarations } FOnMouseLeave: TNotifyEvent; FOnMouseEnter: TNotifyEvent; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; protected { Protected declarations } public { Public declarations } published { Published declarations } property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; end;procedure Register;implementationprocedure Register;begin RegisterComponents(‘Samples‘, [TN_Image]);end;{ N_Image }procedure TN_Image.CMMouseEnter(var Message: TMessage);begin if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);end;procedure TN_Image.CMMouseLeave(var Message: TMessage);begin if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);end;end.
Неизвестный
16.07.2007, 10:36
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
У многих объектов есть события по действию мыши. Например: OnDoubleClick, OnMouseMove, OnMouseDown, OnMouseUp. В вашем случае подойдут обработчики OnMouseMove, OnMouseDown, OnMouseUp. OnMouseDown событие вызывается, если вы нажали на объекте клавишу мыши, а OnMouseUp - отжали.
Неизвестный
16.07.2007, 18:39
общий
это ответ
Здравствуйте, Левадный Тимур Русланович!
возможным решением проблемы может служить
Image1.Picture.LoadFromFile(‘pic\123.bmp‘);

попишите соответствующие обработчики в интересующих событиях
Форма ответа