我想在我的项目中,自定义一种按钮,做成一个类,该怎么弄啊?
解决方案 »
- 用户进程中发生浮点异常错误。已取消当前事务。怎么解决
- 狠人进来!小问题一个
- 【高难问题】quickrep中怎么计算每页中规定的记录显示记录的和?
- 问个问题,为了使程序开始时就隐藏我用了Application.ShowMainForm := false;可让它显示时窗体上什么都没有
- ADO的存储过程的问题,顶者有分
- 关于数组的问题,有如下错误!咋么办?
- 哪里有delphi6的正式中文版下载
- 关于打印机
- 请问为什么图像质量会降低呢?
- TStringList增加带=号的参数如何处理
- 面向对象编程,关于自定义类、对象的问题?
- SOS!,为吓米 我的delphi在运行Excel的时候,出现“命令不可用,应用程序许可已过期”!!
unit TradeImage;interfaceuses
Windows, Messages, SysUtils, Classes, Controls,Graphics;type
TTradeImg = class(TGraphicControl)
private
{ Private declarations }
frGlyph:TBitmap;
bkGlyph:TBitmap;
r:TRect;
FAutoSize:Boolean;
fOnClick, fOnDblClick: TNotifyEvent;
fOnMouseDown, fOnMouseUp: TMouseEvent;
fOnMouseMove: TMouseMoveEvent;
InMousePress:boolean;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure SetfrGlyph(Value: TBitmap);
procedure SetbkGlyph(Value: TBitmap);
procedure SetAutoSize(Value: Boolean);override;
protected
{ Protected declarations }
procedure Paint; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer); override;
public
{ Public declarations }
constructor Create(aOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Action;
property Align;
property AutoSize:Boolean read FAutoSize write SetAutoSize default true;
property Enabled;
property frontGlyph: TBitmap read frGlyph write SetfrGlyph;
property backGlyph: TBitmap read bkGlyph write SetbkGlyph;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property Visible;
property OnClick: TNotifyEvent read fOnClick write fOnClick;
property OnDblClick: TNotifyEvent read fOnDblClick write fOnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
{$IFNDEF VER80}
property OnStartDrag;
{$ENDIF}
property OnMouseDown: TMouseEvent read fOnMouseDown write fOnMouseDown;
property OnMouseMove: TMouseMoveEvent read fOnMouseMove write fOnMouseMove;
property OnMouseUp: TMouseEvent read fOnMouseUp write fOnMouseUp;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Wuqiu', [TTradeImg]);
end;procedure TTradeImg.CMEnabledChanged(var Message: TMessage);
begin
// if (frGlyph<>nil)and self.Enabled then
Canvas.CopyRect(r, frGlyph.Canvas, r)
// else
// Canvas.CopyRect(r, bkGlyph.Canvas, r);
end;procedure TTradeImg.CMMouseEnter(var Message: TMessage);
begin
if (bkGlyph<>nil)and self.Enabled then
Canvas.CopyRect(r, bkGlyph.Canvas, r);
end;procedure TTradeImg.CMMouseLeave(var Message: TMessage);
begin
if (frGlyph<>nil)and self.Enabled then
Canvas.CopyRect(r, frGlyph.Canvas, r);
end;constructor TTradeImg.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
frGlyph:=TBitmap.Create;
bkGlyph:=TBitmap.Create;
width:=25;
height:=25;
r:=Rect(0,0,width,height);
cursor:=crHandPoint;
Enabled :=true;
end;destructor TTradeImg.Destroy;
begin
frGlyph.Free;
bkGlyph.Free;
inherited Destroy;
end;procedure TTradeImg.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if Enabled then
begin
if Assigned(fOnMouseDown) then
fOnMouseDown(Self, Button, Shift, X, Y);
if (Button = mbLeft) then
begin
InMousePress := True;
if (ssDouble in Shift) and Assigned(fOnDblClick) then
fOnDblClick(Self);
end;
end;end;procedure TTradeImg.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
if Assigned(fOnMouseMove) then
fOnMouseMove(Self, Shift, X, Y);end;procedure TTradeImg.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if InMousePress then
begin
InMousePress := False;
if (X>=0)and(X<=Width)and(Y>0)and(Y<=Height) then
if Assigned(fOnClick) then
fOnClick(Self);
end;
if Assigned(fOnMouseUp) then
fOnMouseUp(Self, Button, Shift, X, Y);
end;procedure TTradeImg.Paint;
begin
Canvas.CopyRect(r, frGlyph.Canvas, r);
end;procedure TTradeImg.SetAutoSize(Value:boolean);
begin
if FAutoSize<>Value then
begin
FAutoSize:=value;
if value and (frGlyph<>nil) then
begin
width:=frGlyph.Width;
height:=frGlyph.Height;
end;
end;
end;procedure TTradeImg.SetbkGlyph(Value: TBitmap);
begin
if bkGlyph <> Value then
begin
bkGlyph.Assign(Value);
Invalidate;
end;
end;procedure TTradeImg.SetfrGlyph(Value: TBitmap);
begin
if frGlyph <> Value then
begin
frGlyph.Assign(Value);
if Value <>nil then
begin
frGlyph.Width := Value.Width;
frGlyph.Height := Value.Height;
if FAutoSize then
begin
width:=Value.Width;
height:=Value.Height;
end;
r := Rect(0, 0, Value.Width, Value.Height);
end;
Invalidate;
end;
end;end.
Windows, Messages, SysUtils, Classes, Controls,Graphics;type
TTradeImg = class(TGraphicControl)
private
{ Private declarations }
frGlyph:TBitmap;
bkGlyph:TBitmap;
r:TRect;
FAutoSize:Boolean;
fOnClick, fOnDblClick: TNotifyEvent;
fOnMouseDown, fOnMouseUp: TMouseEvent;
fOnMouseMove: TMouseMoveEvent;
InMousePress:boolean;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure SetfrGlyph(Value: TBitmap);
procedure SetbkGlyph(Value: TBitmap);
procedure SetAutoSize(Value: Boolean);override;
protected
{ Protected declarations }
procedure Paint; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer); override;
public
{ Public declarations }
constructor Create(aOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Action;
property Align;
property AutoSize:Boolean read FAutoSize write SetAutoSize default true;
property Enabled;
property frontGlyph: TBitmap read frGlyph write SetfrGlyph;
property backGlyph: TBitmap read bkGlyph write SetbkGlyph;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property Visible;
property OnClick: TNotifyEvent read fOnClick write fOnClick;
property OnDblClick: TNotifyEvent read fOnDblClick write fOnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
{$IFNDEF VER80}
property OnStartDrag;
{$ENDIF}
property OnMouseDown: TMouseEvent read fOnMouseDown write fOnMouseDown;
property OnMouseMove: TMouseMoveEvent read fOnMouseMove write fOnMouseMove;
property OnMouseUp: TMouseEvent read fOnMouseUp write fOnMouseUp;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Wuqiu', [TTradeImg]);
end;procedure TTradeImg.CMEnabledChanged(var Message: TMessage);
begin
// if (frGlyph<>nil)and self.Enabled then
Canvas.CopyRect(r, frGlyph.Canvas, r)
// else
// Canvas.CopyRect(r, bkGlyph.Canvas, r);
end;procedure TTradeImg.CMMouseEnter(var Message: TMessage);
begin
if (bkGlyph<>nil)and self.Enabled then
Canvas.CopyRect(r, bkGlyph.Canvas, r);
end;procedure TTradeImg.CMMouseLeave(var Message: TMessage);
begin
if (frGlyph<>nil)and self.Enabled then
Canvas.CopyRect(r, frGlyph.Canvas, r);
end;constructor TTradeImg.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
frGlyph:=TBitmap.Create;
bkGlyph:=TBitmap.Create;
width:=25;
height:=25;
r:=Rect(0,0,width,height);
cursor:=crHandPoint;
Enabled :=true;
end;destructor TTradeImg.Destroy;
begin
frGlyph.Free;
bkGlyph.Free;
inherited Destroy;
end;procedure TTradeImg.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if Enabled then
begin
if Assigned(fOnMouseDown) then
fOnMouseDown(Self, Button, Shift, X, Y);
if (Button = mbLeft) then
begin
InMousePress := True;
if (ssDouble in Shift) and Assigned(fOnDblClick) then
fOnDblClick(Self);
end;
end;end;procedure TTradeImg.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
if Assigned(fOnMouseMove) then
fOnMouseMove(Self, Shift, X, Y);end;procedure TTradeImg.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if InMousePress then
begin
InMousePress := False;
if (X>=0)and(X<=Width)and(Y>0)and(Y<=Height) then
if Assigned(fOnClick) then
fOnClick(Self);
end;
if Assigned(fOnMouseUp) then
fOnMouseUp(Self, Button, Shift, X, Y);
end;procedure TTradeImg.Paint;
begin
Canvas.CopyRect(r, frGlyph.Canvas, r);
end;procedure TTradeImg.SetAutoSize(Value:boolean);
begin
if FAutoSize<>Value then
begin
FAutoSize:=value;
if value and (frGlyph<>nil) then
begin
width:=frGlyph.Width;
height:=frGlyph.Height;
end;
end;
end;procedure TTradeImg.SetbkGlyph(Value: TBitmap);
begin
if bkGlyph <> Value then
begin
bkGlyph.Assign(Value);
Invalidate;
end;
end;procedure TTradeImg.SetfrGlyph(Value: TBitmap);
begin
if frGlyph <> Value then
begin
frGlyph.Assign(Value);
if Value <>nil then
begin
frGlyph.Width := Value.Width;
frGlyph.Height := Value.Height;
if FAutoSize then
begin
width:=Value.Width;
height:=Value.Height;
end;
r := Rect(0, 0, Value.Width, Value.Height);
end;
Invalidate;
end;
end;end.
这个实例你看看
我想自定义一个类.