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

Вниз

Кнопка-компонент из 3 картинок (image ей)?   Найти похожие ветки 

 
grol ©   (2005-06-25 13:52) [0]

Мастера у меня назрел еще такой вопрос! Можно ли из 3-х Image(картинок) сделать компонент-кнопку, т.е у меня есть три картинки: кнопка обычная, нажатая и активная (на ней курсор мышки)? Я конечно могу каждый раз на форму кидать по три Image, вставляя в каждый Image картинку, но это только на одну кнопку 3 image"a, а если я хочу 10 кнопок, то это будет уже 30 image"ей!!! Я представляю, что у кнопки должны быть такие свойства как у Image"a, и в свойствах этого компонета дожны быть ссылки на 3 картинки, отвечающие нужному состоянию. Сразу скажу, что BitBtn не подойдет, так как форма кнопки прямоугольником и не повторяет форму рисунка в картинки. Компонент Image он тоже прямоугольный, но если всавить в него картинку и назначить свойство Transparent, Image станет при этом позрачный и повторит форму рисунка в картинке, т.е. рисунка кнопки. Ответьте мне пожалуйста на этот вопрос! Заранее всем спасибо!


 
злобная танька   (2005-06-25 14:13) [1]

можно!


 
grol ©   (2005-06-25 14:17) [2]

Очень хороший ответ! Спасибо я все понял!


 
злобная танька   (2005-06-25 14:56) [3]

ну напиши наследника от TGraphicControl..
в свойствах укажи например
 array[1..3] of TBitMap;

определи методы обработки сообщений CM_MOUSELEAVE и CM_MOUSEENTER и прочих что от мыши приходят. в этих методах будет код типа

procedure TImButton.Mousedown;
begin
Canvas.Draw(0,0,imgs[3]);
OnMouseDown;
end;

OnMouseDown - переменная типа TMouseEvent (метод)


 
ferr ©   (2005-06-25 16:14) [4]

А перерисовывать кто будет? в OnPaint.


 
Nik_vr ©   (2005-06-25 17:09) [5]

Вот пример, написанный на основе Graphic32...

unit GRButton32;

interface

uses
 SysUtils, Classes, Controls, GR32_Image, GR32, Dialogs;

type
TButtonState=(bsInactive, bsPushed, bsUsed);

type
 TButton32 = class(TImage32)
 private
   FInactiveButton: TBitmap32;
   FPushedButton: TBitmap32;
   FUsedButton: TBitmap32;
   FState: TButtonState;
   FChecked: boolean;
   procedure SetPushedButton(const Value: TBitmap32);
   procedure SetInactiveButton(const Value: TBitmap32);
   procedure SetUsedButton(const Value: TBitmap32);
   procedure SetChecked(const Value: boolean);
 protected
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); overload; override;
   procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); overload; override;
 public
   { Public declarations }
   constructor Create;    
   // Set images
   property InactiveButton: TBitmap32 read FInactiveButton write SetInactiveButton;
   property PushedButton: TBitmap32 read FPushedButton write SetPushedButton;
   property UsedButton: TBitmap32 read FUsedButton write SetUsedButton;
   // Load images
   procedure LoadInactiveButton(FileName: string);
   procedure LoadPushedButton(FileName: string);
   procedure LoadUsedButton(FileName: string);
   //
   procedure DrawButton;
   property Checked: boolean read FChecked write SetChecked;    
 published
   { Published declarations }
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Graphics32", [TButton32]);
end;

{ TButton33 }

procedure TButton32.LoadPushedButton(FileName: string);
var
tempImage: TBitmap32;
begin
tempImage:=TBitmap32.Create;
tempImage.LoadFromFile(FileName);
FPushedButton:=tempImage;
end;

procedure TButton32.LoadInactiveButton(FileName: string);
var
tempImage: TBitmap32;
begin
tempImage:=TBitmap32.Create;
tempImage.LoadFromFile(FileName);
FInactiveButton:=tempImage;
end;

procedure TButton32.LoadUsedButton(FileName: string);
var
tempImage: TBitmap32;
begin
tempImage:=TBitmap32.Create;
tempImage.LoadFromFile(FileName);
FUsedButton:=tempImage;
end;

procedure TButton32.SetPushedButton(const Value: TBitmap32);
begin
 FPushedButton := Value;
end;

procedure TButton32.SetInactiveButton(const Value: TBitmap32);
begin
 FInactiveButton := Value;
end;

procedure TButton32.SetUsedButton(const Value: TBitmap32);
begin
 FUsedButton := Value;
end;

procedure TButton32.DrawButton;
begin
case FState of
 bsInactive: Bitmap:=FInactiveButton;
 bsPushed: Bitmap:=FPushedButton;
 bsUsed: Bitmap:=FUsedButton;
end;

Height:=Bitmap.Height;
Width:=Bitmap.Width;      
end;

constructor TButton32.Create;
begin
 FState:=bsInactive;
end;

procedure TButton32.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
 Y: Integer);
begin
 inherited;
 if Button<>mbLeft then exit;
 FState:=bsPushed;
 DrawButton;
end;

procedure TButton32.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
 Y: Integer);
begin
 inherited;
 if Button<>mbLeft then exit;
 if FChecked
  then FState:=bsUsed
  else FState:=bsInactive;

//  FState:=bsInactive;
 DrawButton;
end;

procedure TButton32.SetChecked(const Value: boolean);
begin
 FChecked := Value;
 if FChecked
  then FState:=bsUsed
  else FState:=bsInactive;

 DrawButton;
end;

end.


 
Eraser ©   (2005-06-25 17:12) [6]

grol ©   (25.06.05 13:52)

Почти в любом наборе компонентов третьих производителей есть такой компонент. Советую пакет ком-в JEDI VCL - там всё (почти) и сразу.


 
ferr ©   (2005-06-25 18:10) [7]

constructor Create;
может не так...


 
злобная танька   (2005-06-26 08:29) [8]


> Nik_vr ©   (25.06.05 17:09) [5]

по-моему лучше будет прикрутить ImageList чем каждую картинку расписывать..


 
Antonn ©   (2005-06-26 09:07) [9]


> по-моему лучше будет прикрутить ImageList чем каждую
> картинку расписывать..

я так себе и делал :)


 
Nik_vr ©   (2005-06-26 13:27) [10]

Меньше модулей - меньше вес программы :)


 
Eraser ©   (2005-06-26 17:52) [11]

Nik_vr ©   (26.06.05 13:27) [10]
Меньше модулей - меньше вес программы :)


Однако скорость разработки в разы больше... так что неизвестно ЧТО лучше...


 
NightStranger ©   (2005-06-27 01:28) [12]

Зачем изобретать велосипед? www.nightstranger9.narod.ru/delphi/bevlab.zip


 
MacroDenS ©   (2005-06-27 14:18) [13]

А нафига тебе 3 имаджа? Картинки в ресурс или с собой... 1 имадж обрабатываем указанные события, грузим из понравившихся мест. Это для варианта если просто имагом пользоваться.
Хотя (сугубо мое ИМХО), если и компонент посать, то там 3 имага вроде тоже не нужны, принцып тот же...



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

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

Наверх




Память: 0.5 MB
Время: 0.035 c
14-1119969947
Tuzemec
2005-06-28 18:45
2005.07.18
SMPP


14-1119623819
Kerk
2005-06-24 18:36
2005.07.18
Оргазнизация поиска по сайту


1-1119508806
Grief
2005-06-23 10:40
2005.07.18
иконка у dll


14-1119443532
Seg
2005-06-22 16:32
2005.07.18
Функция округления от Мелкософта


14-1119723874
Иксик
2005-06-25 22:24
2005.07.18
Как легче всего доехать из Москвы в Питер?