-
Подскажите компонент Кнопку, с тремя свойствами TBitmap обычное состояние, наведение и нажатие. Есть такой? Пробовал сделать что-то на подобии, на базе Timage, но даже добавить рисунок в собственное поле TBitmap в Object Inpector`е ума не хватает, вылетает ошибка.
unit myImageButton;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TmyImageButton = class(TImage)
private
FCount: integer;
protected
FMouseUpImage:tBitmap;
FMouseDown_image:tBitmap;
public
published
procedure Click;override;
Procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
property Count:integer read FCount write FCount;
property MouseUpImage:TBitmap read FMouseUpImage write FMouseUpImage;
property MouseDownImage:TBitmap read FMouseDown_image write FMouseDown_image;
constructor Create(aowner:Tcomponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TmyImageButton]);
end;
constructor TmyImageButton.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
end;
procedure TmyImageButton.Click;
begin
inherited click;
Picture.Bitmap:= FMouseDown_image;
end;
procedure TmyImageButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited Mouseup(Button,Shift,x,y);
Picture.Bitmap:= FMouseUpImage;
end;
end.
-
посмотреть, как сделан TBitBtn или TSpeedButton чего-то не хватает ?
-
Спасибо, тупанул. Там оказывается процедура стоит, по присоеденению TPicture, даже, а не Tbitmap.
-
При создании компонента не получаеться вывести текст на изображение . При клике текст выводится. А при создании нет. Подскажите, не могу сообразить как правильно сделать. Как вызвать процедуру вывода текста, при старте формы, в моем случае SetCaption(s:string);?
unit myImageButton;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TmyImageButton = class(TImage)
private
FMouseUpImage:TPicture;
FMouseDown_image:TPicture;
FMouseUpImage2:TPicture;
FMouseDown_image2:TPicture;
FCaption, FText:string;
procedure SetPicture(Value: TPicture);
procedure SetPicture2(Value: TPicture);
protected
public
published
procedure SetCaption(s:string);
Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
Procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
property MouseUpImage:TPicture read FMouseUpImage write SetPicture;
property MouseDownImage:TPicture read FMouseDown_image write SetPicture2;
property Text:string read FText write SetCaption;
constructor Create(aowner:Tcomponent); override;
destructor Destroy; override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TmyImageButton]);
end;
procedure TmyImageButton.SetCaption(s:string);
begin
FMouseUpImage.Bitmap:=FMouseUpImage2.Bitmap;
FMouseDown_image.Bitmap:=FMouseDown_image2.Bitmap;
SetBkMode(FMouseUpImage.Bitmap.Canvas.Handle, 0);
SetBkMode(FMouseDown_image.Bitmap.Canvas.Handle, 0);
FMouseUpImage.Bitmap.Canvas.TextOut((ClientWidth - Canvas.TextWidth(s)) div 2, (ClientHeight - Canvas.TextHeight(s)) div 2, s);
FMouseDown_image.Bitmap.Canvas.TextOut((ClientWidth - Canvas.TextWidth(s)) div 2, (ClientHeight - Canvas.TextHeight(s)) div 2, s);
FMouseUpImage.Bitmap.Canvas.Refresh;
FMouseDown_image.Bitmap.Canvas.Refresh;
end;
constructor TmyImageButton.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
ControlStyle := ControlStyle + [csReplicatable];
FMouseUpImage := TPicture.Create;
FMouseDown_image := TPicture.Create;
FMouseUpImage2 := TPicture.Create;
FMouseDown_image2 := TPicture.Create;
FMouseUpImage2.Bitmap:= FMouseUpImage.Bitmap;
FMouseDown_image2.Bitmap:= FMouseDown_image.Bitmap;
Picture.Bitmap:= FMouseUpImage.Bitmap;
AutoSize:=true;
Height := 26;
Width := 110;
SetCaption(Text);
end;
destructor TmyImageButton.Destroy;
begin
FMouseUpImage.Free;
FMouseDown_image.Free;
inherited Destroy;
end;
procedure TmyImageButton.SetPicture(Value: TPicture);
begin
FMouseUpImage.Assign(Value);
Picture.Bitmap:=FMouseUpImage.Bitmap;
FMouseUpImage2.Bitmap:=FMouseUpImage.Bitmap;
end;
procedure TmyImageButton.SetPicture2(Value: TPicture);
begin
FMouseDown_image.Assign(Value);
FMouseDown_image2.Bitmap:=FMouseDown_image.Bitmap;
end;
procedure TmyImageButton.Mousedown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited click;
if Button=mbLeft then
Picture.Bitmap:= FMouseDown_image.Bitmap;
end;
procedure TmyImageButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Picture.Bitmap:= FMouseUpImage.Bitmap;
inherited Mouseup(Button,Shift,x,y);
sleep(100);
end;
end.
-
Buzzik © (15.04.10 16:49) [3]
> посмотреть, как сделан TBitBtn или TSpeedButton чего-то > не хватает ?
-
Нет, не помогает. Там не так как у меня. Вопрос стоит так, как вызвать процедуру при создании компонента на форме. Через constructor TmyImageButton.Create(aowner:Tcomponent); не выходит или я что-то делаю не так.
-
> Нет, не помогает. Там не так как у меня.
надо сделать так, как там.
-
Ок, понял.
|