Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизКнопка-компонент из 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c