Оформление Bitbtn

bang

New member
02.05.2013
1
0
#1
Нужно следующее: при наведении курсора на кнопку BitBtn рисунок назначеный в свойстве Glyph изменялся на другой, и если кнопку не нажали, и мышку увели с кнопки, то рисунок обратно изменялся на 1й
Как это все оформить!? Подскажите!
 

sinkopa

Well-known member
17.06.2009
344
4
#2
Нужно следующее: при наведении курсора на кнопку BitBtn рисунок назначеный в свойстве Glyph изменялся на другой, и если кнопку не нажали, и мышку увели с кнопки, то рисунок обратно изменялся на 1й
Как это все оформить!? Подскажите!
Например так:
1. Кладем на форму ImageList.
2. Заполняем его картинками:
- Четные, для нормального состояния кнопки;
- Нечетные, для состояния когда курсор мыши над кнопкой.
3. Поскольку у BitBtn нет свойства ImageIndex, используем свойство Tag для указания, какие рисунки из ImageList будут в нормальном состоянии кнопки.
4. В модуле формы пишем следующий код:
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, StdCtrls, Buttons, XPMan;

{ TBitBtn }
type
TMouseEnterLeaveNotifyEvent = procedure (Sender: TObject; MouseOver: Boolean) of object;

TBitBtn = class(Buttons.TBitBtn)
private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
public
OnMouseEvent: TMouseEnterLeaveNotifyEvent;
end;

{ TForm1 }
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure BitBtnMouseChange(Sender: TObject; MouseOver: Boolean);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TBitBtn }
procedure TBitBtn.CMMouseEnter(var Message: TMessage);
begin
if Assigned(OnMouseEvent) then OnMouseEvent(Self,True);
inherited;
end;

procedure TBitBtn.CMMouseLeave(var Message: TMessage);
begin
if Assigned(OnMouseEvent) then OnMouseEvent(Self,False);
inherited;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
BitBtn1.OnMouseEvent := BitBtnMouseChange;
ImageList1.GetBitmap(BitBtn1.Tag,BitBtn1.Glyph);

BitBtn2.OnMouseEvent := BitBtnMouseChange;
ImageList1.GetBitmap(BitBtn2.Tag,BitBtn2.Glyph);
end;

procedure TForm1.BitBtnMouseChange(Sender: TObject; MouseOver: Boolean);
var
ImageIndex: Integer;
B: TBitmap;
begin
if (Sender is TBitBtn) then
with TBitBtn(Sender) do
begin
B := Glyph;
ImageIndex := Tag;
if MouseOver then
Inc(ImageIndex);
ImageList1.GetBitmap(ImageIndex,B);
Glyph.Assign(B);
end;
end;

end.
Всё.
Тестовый проект в аттаче
Посмотреть вложение BitBtn_Test.rar
 

Вложения

bang

New member
02.05.2013
1
0
#3
ОШибка в коде
procedure TForm1.BitBtnMouseChange(Sender: TObject; MouseOver: Boolean);
var
ImageIndex: Integer;
B: TBitmap;
begin
if (Sender is TBitBtn) then
with TBitBtn(Sender) do
begin
B := Glyph;
ImageIndex := Tag;
if MouseOver then
Inc(ImageIndex); ругает тут
ImageList1.GetBitmap(ImageIndex,:);
Glyph.Assign:));
end;
end;

end.
 

bang

New member
02.05.2013
1
0
#5
procedure TForm1.BitBtnMouseChange(Sender: TObject; MouseOver: Boolean);
var
ImageIndex: Integer;
B: TBitmap;
begin
if (Sender is TBitBtn) then
with TBitBtn(Sender) do
begin
B := Glyph;
ImageIndex := Tag;
if MouseOver then
Inc(ImageIndex); Вот она ошибка! Ругается тут в делфях
ImageList1.GetBitmap(ImageIndex,;
Glyph.Assign(;
end;
end;

end.

Добавлено: Всё таже пробле только надо что бы 2 и более кнопок на 1 форме можно было таким макаром сделать...
есть пару кодов, но они для 1й кнопки на на две кнопки не иогу придумать(




1й код:



unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
procedure BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure BitBtn1MouseLeave(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1MouseLeave(Sender: TObject);
begin
bitbtn1.Glyph.LoadFromFile('C:\User s\Los\Pictures\Иконки\бмп\BMP\Disab led\48x48\Bulb Idea.bmp');
end;

procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
bitbtn1.Glyph.LoadFromFile('C:\User s\Los\Pictures\Иконки\бмп\BMP\Disab led\48x48\Approve.bmp');
end;

end.




2й код, точнее его чассть


procedure TForm1.BitBtn1MouseEnter(Sender: TObject);
begin
ImageList1.GetBitmap(1,BitBtn1.Glyph);

end;

procedure TForm1.BitBtn1MouseLeave(Sender: TObject);
begin
ImageList1.GetBitmap(0,BitBtn1.Glyph);
end;
 

sinkopa

Well-known member
17.06.2009
344
4
#6
Код:
procedure TForm1.BitBtnMouseChange(Sender: TObject; MouseOver: Boolean);
var
ImageIndex: Integer;
B: TBitmap;
begin
if (Sender is TBitBtn) then
with TBitBtn(Sender) do
begin
B := Glyph;
ImageIndex := Tag;
if MouseOver then
Inc(ImageIndex);										 Вот она ошибка! Ругается тут в делфях
ImageList1.GetBitmap(ImageIndex,B);
Glyph.Assign(B);
end;
end;
Добавлено: Всё таже пробле только надо что бы 2 и более кнопок на 1 форме можно было таким макаром сделать...
есть пару кодов, но они для 1й кнопки на на две кнопки не иогу придумать(
:huh: Детский сад какой то, ей богу...
Ошибка с текстом у Вас? Или Delphi с Вами вслух загробным голосом матом разговаривает?
Текст ошибки сообщите нам.
Вы вообще скачивали мой пример, который к сообщению предыдущему приложен?
Там у меня три кнопки. Все компилится, работает и никто не ругается ни на кого...
 

bang

New member
02.05.2013
1
0
#7
:) Детский сад какой то, ей богу...
Ошибка с текстом у Вас? Или Delphi с Вами вслух загробным голосом матом разговаривает?
Текст ошибки сообщите нам.
Вы вообще скачивали мой пример, который к сообщению предыдущему приложен?
Там у меня три кнопки. Все компилится, работает и никто не ругается ни на кого...

Пример я скачал... И он не работает! Отправилже что ругается в коде на это значение Inc(ImageIndex);

Что тут сложно понять!?
 

sinkopa

Well-known member
17.06.2009
344
4
#8
Пример я скачал... И он не работает! Отправилже что ругается в коде на это значение Inc(ImageIndex);
Что тут сложно понять!?
:D По бу-ко-в-кам воспроизведите то ругательство которое Вам выдаёт Delphi.
Например:
Появляется окно в котором написано "Я отказываюсь компилировать программу. Хочу чтобы программист налил мне пива!".
Что тут сложно понять!? :)
Вот. Сам скачал, еще раз проверил, скомпилировал. Никто не ругается. ЕХЕ-ник в архиве.
Посмотреть вложение BitBtn_Test.rar
 

Вложения

19.03.2014
9
0
#9
Проверьте раскладку букв и корректность знаков препинания. Наверняка синтаксическая ошибка из-за опечатки.