Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1117916546
новичок из сыктывкара
2005-06-05 00:22
2005.07.18
фильтрация данных


14-1118916224
Yanis
2005-06-16 14:03
2005.07.18
Как придумать программу?


1-1119614355
bns
2005-06-24 15:59
2005.07.18
TFileStream buffer


3-1117728453
xroot
2005-06-02 20:07
2005.07.18
Непонятная заморо4ка


3-1118123435
ShotGuN
2005-06-07 09:50
2005.07.18
Чем заменить Convert?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский