Главная страница
    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.04 c
14-1119531872
kaif
2005-06-23 17:04
2005.07.18
Голосование: кто порождает СПАМ, заказчики или рассыльщики?


14-1119949293
Ega23
2005-06-28 13:01
2005.07.18
Помогите с терминологией!


14-1119344318
WondeRu
2005-06-21 12:58
2005.07.18
"Осторожно, СПИД!"


1-1120194700
Mishenka
2005-07-01 09:11
2005.07.18
Как узнать запущена ли в данный момент другая программа?


6-1113212545
Chubais
2005-04-11 13:42
2005.07.18
WSA SENDTO и передача больших структур





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский