unit ButtonComps; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses {$IFnDEF FPC} Windows, {$ELSE} LCLIntf, LCLType, LMessages, {$ENDIF} Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TEncartaButton = class(TGraphicControl) private Cap : string; Col : TColor; Border: TColor; OverFColor: TColor; OverColor: TColor; DownColor: TColor; MDown: TMouseEvent; MUp: TMouseEvent; MEnter : TNotifyEvent; MLeave : TNotifyEvent; Enab: Boolean; Bmp: TBitmap; SCap: Boolean; BtnClick: TNotifyEvent; procedure SetCol(Value: TColor); procedure SetBorder(Value: TColor); procedure SetCap(Value: string); procedure SetBmp(Value: TBitmap); procedure SetSCap(Value: Boolean); protected procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure Click; override; procedure SetParent(Value: TWinControl); override; public constructor Create(AOwner: TComponent); override; published property Caption : string read Cap write SetCap; property Color : TColor read Col write SetCol; property ColorBorder : TColor read Border write SetBorder; property Enabled : Boolean read Enab write Enab; property OnMouseDown: TMouseEvent read MDown write MDown; property OnMouseUp: TMouseEvent read MUp write MUp; property OnMouseEnter: TNotifyEvent read MEnter write MEnter; property OnMouseLeave: TNotifyEvent read MLeave write MLeave; property OnClick: TNotifyEvent read BtnClick write BtnClick; property Glyph: TBitmap read Bmp write SetBmp; property ColorOverCaption: TColor read OverFColor write OverFColor; property ColorOver: TColor read OverColor write OverColor; property ColorDown: TColor read DownColor write DownColor; property ShowCaption: Boolean read SCap write SetSCap; property ShowHint; property ParentShowHint; property OnMouseMove; property Font; end; TAOLButton = class(TGraphicControl) private Cap : string; Col : TColor; RaiseCol: TColor; MDown: TMouseEvent; MUp: TMouseEvent; MLeave : TNotifyEvent; Enab: Boolean; BtnClick: TNotifyEvent; procedure SetCol(Value: TColor); procedure SetCap(Value: string); procedure SetRaiseCol(Value: TColor); protected procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure Click; override; procedure SetParent(Value: TWinControl); override; public constructor Create(AOwner: TComponent); override; published property Caption : string read Cap write SetCap; property Color : TColor read Col write SetCol; property RaiseColor : TColor read RaiseCol write SetRaiseCol; property Enabled : Boolean read Enab write Enab; property OnMouseDown: TMouseEvent read MDown write MDown; property OnMouseUp: TMouseEvent read MUp write MUp; property OnMouseLeave: TNotifyEvent read MLeave write MLeave; property OnClick: TNotifyEvent read BtnClick write BtnClick; property ShowHint; property ParentShowHint; property OnMouseMove; property Font; end; TImageButton = class(TGraphicControl) private MOver: TBitmap; MDown: TBitmap; MUp: TBitmap; Bmp: TBitmap; ActualBmp: TBitmap; BmpDAble: TBitmap; BtnClick: TNotifyEvent; OnMDown: TMouseEvent; OnMUp: TMouseEvent; OnMEnter: TNotifyEvent; OnMLeave: TNotifyEvent; procedure SetMOver(Value: TBitmap); procedure SetMDown(Value: TBitmap); procedure SetMUp(Value: TBitmap); procedure SetBmp(Value: TBitmap); procedure SetBmpDAble(Value: TBitmap); protected procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure Click; override; public constructor Create(AOwner: TComponent); override; published property BitmapOver: TBitmap read MOver write SetMOver; property BitmapDown: TBitmap read MDown write SetMDown; property BitmapUp: TBitmap read MUp write SetMUp; property BitmapDisabled: TBitmap read BmpDAble write SetBmpDAble; property Bitmap: TBitmap read Bmp write SetBmp; property OnClick: TNotifyEvent read BtnClick write BtnClick; property OnMouseDown: TMouseEvent read OnMDown write OnMDown; property OnMouseUp: TMouseEvent read OnMUp write OnMUp; property OnMouseEnter: TNotifyEvent read OnMEnter write OnMEnter; property OnMouseLeave: TNotifyEvent read OnMLeave write OnMLeave; property Enabled; property ShowHint; property ParentShowHint; end; TSelButton = class(TGraphicControl) private Cap : string; Col : TColor; Border: TColor; OverFColor: TColor; OverColor: TColor; DownColor: TColor; MDown: TMouseEvent; MUp: TMouseEvent; MEnter : TNotifyEvent; MLeave : TNotifyEvent; Enab: Boolean; BtnClick: TNotifyEvent; Alment: TAlignment; BWidth: Longint; procedure SetCol(Value: TColor); procedure SetBorder(Value: TColor); procedure SetCap(Value: string); procedure SetAlment(Value: TAlignment); procedure SetBWidth(Value: Longint); protected procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure Click; override; procedure SetParent(Value: TWinControl); override; public constructor Create(AOwner: TComponent); override; published property Caption : string read Cap write SetCap; property Color : TColor read Col write SetCol; property ColorBorder : TColor read Border write SetBorder; property Enabled : Boolean read Enab write Enab; property OnMouseDown: TMouseEvent read MDown write MDown; property OnMouseUp: TMouseEvent read MUp write MUp; property OnMouseEnter: TNotifyEvent read MEnter write MEnter; property OnMouseLeave: TNotifyEvent read MLeave write MLeave; property OnClick: TNotifyEvent read BtnClick write BtnClick; property ColorOverCaption: TColor read OverFColor write OverFColor; property ColorOver: TColor read OverColor write OverColor; property ColorDown: TColor read DownColor write DownColor; property Alignment: TAlignment read Alment write SetAlment; property BorderWidth: Longint read BWidth write SetBWidth; property ShowHint; property ParentShowHint; property OnMouseMove; property Font; end; TSquareButton = class(TGraphicControl) private Cap : string; Col : TColor; Border: TColor; OverFColor: TColor; OverBorderCol: TColor; DownBorderCol: TColor; MDown: TMouseEvent; MUp: TMouseEvent; MEnter : TNotifyEvent; MLeave : TNotifyEvent; Enab: Boolean; BtnClick: TNotifyEvent; Alment: TAlignment; BWidth: Longint; procedure SetCol(Value: TColor); procedure SetBorder(Value: TColor); procedure SetCap(Value: string); procedure SetAlment(Value: TAlignment); procedure SetBWidth(Value: Longint); protected procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure Click; override; procedure SetParent(Value: TWinControl); override; public constructor Create(AOwner: TComponent); override; published property Caption : string read Cap write SetCap; property Color : TColor read Col write SetCol; property ColorBorder : TColor read Border write SetBorder; property Enabled : Boolean read Enab write Enab; property OnMouseDown: TMouseEvent read MDown write MDown; property OnMouseUp: TMouseEvent read MUp write MUp; property OnMouseEnter: TNotifyEvent read MEnter write MEnter; property OnMouseLeave: TNotifyEvent read MLeave write MLeave; property OnClick: TNotifyEvent read BtnClick write BtnClick; property ColorOverCaption: TColor read OverFColor write OverFColor; property Alignment: TAlignment read Alment write SetAlment; property ColorOverBorder: TColor read OverBorderCol write OverBorderCol; property BorderWidth: Longint read BWidth write SetBWidth; property DownBorderColor: TColor read DownBorderCol write DownBorderCol; property ShowHint; property ParentShowHint; property OnMouseMove; property Font; end; procedure Register; implementation procedure Register; begin RegisterComponents('Buttons', [TEncartaButton, TAOLButton, TImageButton, TSelButton, TSquareButton]); end; constructor TEncartaButton.Create(AOwner: TComponent); begin inherited Create(AOwner); Width := 86; Height := 22; Col := clBtnFace; OverFColor := clBlack; OverColor := $000ABED8; DownColor := $000ABED8; Canvas.Brush.Color := clBlack; Border := $00828F99; Font.Name := 'Arial'; Font.Color := clBlack; Enab := true; Bmp := TBitmap.Create; ShowHint := true; SCap := true; end; procedure TEncartaButton.SetParent(Value: TWinControl); begin inherited; if Value <> nil then Cap := Name; end; procedure TEncartaButton.Paint; var TextWidth, TextHeight : Longint; begin inherited Paint; Canvas.Font := Font; Canvas.Brush.Color := Col; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Font.Color := $00D6E0E0; if Bmp.Empty = false then begin if SCap = true then begin Canvas.BrushCopy(Rect(Width div 2 - (Bmp.Width+TextWidth) div 2-1,Height div 2 - Bmp.Height div 2, bmp.width+Width div 2 - (Bmp.Width+TextWidth) div 2,bmp.height+Height div 2 - Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); Canvas.Font.Color := Font.Color; Canvas.TextOut(Width div 2 + (Bmp.Width-TextWidth) div 2+5-1,Height div 2-TextHeight div 2,Cap); end else Canvas.BrushCopy(Rect(Width div 2-Bmp.Width div 2,Height div 2-Bmp.Height div 2, bmp.width+Width div 2-Bmp.Width div 2,bmp.height+Height div 2-Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); end else begin Canvas.Font.Color := Font.Color; if SCap = true then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); end; Canvas.Brush.Color := Border; Canvas.FrameRect(Rect(0,0,Width,Height)); end; procedure TEncartaButton.Click; begin inherited Click; Paint; if Enab then if Assigned(BtnClick) then BtnClick(Self); end; procedure TEncartaButton.SetCol(Value: TColor); begin Col := Value; Paint; end; procedure TEncartaButton.SetBorder(Value: TColor); begin Border := Value; Paint; end; procedure TEncartaButton.SetCap(Value: string); begin Cap := value; Paint; end; procedure TEncartaButton.SetBmp(Value: TBitmap); begin Bmp.Assign(value); invalidate; end; procedure TEncartaButton.SetSCap(value: Boolean); begin SCap := Value; Paint; end; procedure TEncartaButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; begin inherited MouseDown(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MDown) then MDown(Self, Button, Shift, X, Y); Canvas.Brush.Color := DownColor; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); if Bmp.Empty = false then begin if SCap = true then begin Canvas.BrushCopy(Rect(Width div 2 - (Bmp.Width+TextWidth) div 2-1+1,Height div 2 - Bmp.Height div 2+1, bmp.width+Width div 2 - (Bmp.Width+TextWidth) div 2+1,bmp.height+Height div 2 - Bmp.Height div 2+1), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); Canvas.TextOut(Width div 2 + (Bmp.Width-TextWidth) div 2+5-1+1,Height div 2-TextHeight div 2+1,Cap); end else Canvas.BrushCopy(Rect(Width div 2-Bmp.Width div 2+1,Height div 2-Bmp.Height div 2+1, bmp.width+Width div 2-Bmp.Width div 2+1,bmp.height+Height div 2-Bmp.Height div 2+1), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); end else if SCap = true then Canvas.TextOut(Width div 2 - TextWidth div 2+1,Height div 2-TextHeight div 2+1,Cap); Canvas.Brush.Color := Border; Canvas.FrameRect(Rect(0,0,Width,Height)); Canvas.Pen.Color := $00EDF4F8; Canvas.Polyline([Point(Width-1,0),Point(Width-1,Height)]); Canvas.Polyline([Point(Width,Height-1),Point(-1,Height-1)]); Canvas.Pen.Color := $004F4F4F; Canvas.Polyline([Point(0,Height-2),Point(0,0)]); Canvas.Polyline([Point(0,0),Point(Width-1,0)]); end; end; procedure TEncartaButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; MouseOverButton: Boolean; P: TPoint; begin inherited MouseUp(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MUp) then MUp(Self, Button, Shift, X, Y); GetCursorPos(P); MouseOverButton := (FindDragTarget(P, True) = Self); if MouseOverButton then begin Canvas.Brush.Color := OverColor; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Font.Color := OverFColor; if Bmp.Empty = false then begin if SCap = true then begin Canvas.BrushCopy(Rect(Width div 2 - (Bmp.Width+TextWidth) div 2-1,Height div 2 - Bmp.Height div 2, bmp.width+Width div 2 - (Bmp.Width+TextWidth) div 2,bmp.height+Height div 2 - Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); Canvas.TextOut(Width div 2 + (Bmp.Width-TextWidth) div 2+5-1,Height div 2-TextHeight div 2,Cap); end else Canvas.BrushCopy(Rect(Width div 2-Bmp.Width div 2,Height div 2-Bmp.Height div 2, bmp.width+Width div 2-Bmp.Width div 2,bmp.height+Height div 2-Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); end else if SCap = true then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; Canvas.FrameRect(Rect(0,0,Width,Height)); Canvas.Pen.Color := $00EDF4F8; Canvas.Polyline([Point(0,Height-2),Point(0,0)]); Canvas.Polyline([Point(0,0),Point(Width-1,0)]); Canvas.Pen.Color := $004F4F4F; Canvas.Polyline([Point(Width-1,0),Point(Width-1,Height)]); Canvas.Polyline([Point(Width,Height-1),Point(-1,Height-1)]); end; end; end; procedure TEncartaButton.MouseEnter(var Message: TMessage); var TextWidth, TextHeight : Integer; begin TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if Enab then begin Canvas.Brush.Color := OverColor; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Font.Color := OverFColor; if Bmp.Empty = false then begin if SCap = true then begin Canvas.BrushCopy(Rect(Width div 2 - (Bmp.Width+TextWidth) div 2-1,Height div 2 - Bmp.Height div 2, bmp.width+Width div 2 - (Bmp.Width+TextWidth) div 2,bmp.height+Height div 2 - Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); Canvas.TextOut(Width div 2 + (Bmp.Width-TextWidth) div 2+5-1,Height div 2-TextHeight div 2,Cap); end else Canvas.BrushCopy(Rect(Width div 2-Bmp.Width div 2,Height div 2-Bmp.Height div 2, bmp.width+Width div 2-Bmp.Width div 2,bmp.height+Height div 2-Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); end else if SCap = true then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; Canvas.FrameRect(Rect(0,0,Width,Height)); Canvas.Pen.Color := $00EDF4F8; Canvas.Polyline([Point(0,Height-2),Point(0,0)]); Canvas.Polyline([Point(0,0),Point(Width-1,0)]); Canvas.Pen.Color := $004F4F4F; Canvas.Polyline([Point(Width-1,0),Point(Width-1,Height)]); Canvas.Polyline([Point(Width,Height-1),Point(-1,Height-1)]); end; end; procedure TEncartaButton.MouseLeave(var Message: TMessage); var TextWidth, TextHeight : Integer; begin TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Brush.Color := Col; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Font.Color := $00D6E0E0; Canvas.Brush.Color := Col; Canvas.Font.Color := Font.Color; if Bmp.Empty = false then begin if SCap = true then begin Canvas.BrushCopy(Rect(Width div 2 - (Bmp.Width+TextWidth) div 2-1,Height div 2 - Bmp.Height div 2, bmp.width+Width div 2 - (Bmp.Width+TextWidth) div 2,bmp.height+Height div 2 - Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); Canvas.Font.Color := Font.Color; Canvas.TextOut(Width div 2 + (Bmp.Width-TextWidth) div 2+5-1,Height div 2-TextHeight div 2,Cap); end else Canvas.BrushCopy(Rect(Width div 2-Bmp.Width div 2,Height div 2-Bmp.Height div 2, bmp.width+Width div 2-Bmp.Width div 2,bmp.height+Height div 2-Bmp.Height div 2), bmp,Rect(0,0,bmp.width,bmp.height),bmp.Canvas.pixels[0,0]); end else if SCap = true then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; Canvas.FrameRect(Rect(0,0,Width,Height)); end; constructor TAOLButton.Create(AOwner: TComponent); begin inherited Create(AOwner); Width := 89; Height := 23; Col := $00A56934; Canvas.Brush.Color := clBlack; Font.Name := 'Arial'; Font.Color := clWhite; Font.Size := 8; Font.Style :=[fsBold]; Enab := true; ShowHint := true; RaiseCol := $00D7A28A; end; procedure TAOLButton.SetParent(Value: TWinControl); begin inherited; if Value <> nil then Cap := Name; end; procedure TAOLButton.Paint; var TextWidth, TextHeight : Longint; begin inherited Paint; Canvas.Font := Font; Canvas.Brush.Color := Col; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Brush.Color := RaiseCol; Canvas.FillRect(Rect(1,1,3,Height-1)); Canvas.FillRect(Rect(1,1,Width-1,3)); Canvas.Brush.Color := clBlack; Canvas.FillRect(Rect(Width-1,1,Width-3,Height-1)); Canvas.FillRect(Rect(Width-1,Height-1,1,Height-3)); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Font.Color := $00D6E0E0; Canvas.Brush.Color := Col; Canvas.Font.Color := Font.Color; Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := clBlack; Canvas.FrameRect(Rect(0,0,Width,Height)); end; procedure TAOLButton.Click; begin inherited Click; Paint; if Enab then if Assigned(BtnClick) then BtnClick(Self); end; procedure TAOLButton.SetCol(Value: TColor); begin Col := Value; Paint; end; procedure TAOLButton.SetCap(Value: string); begin Cap := value; Paint; end; procedure TAOLButton.SetRaiseCol(Value: TColor); begin RaiseCol := value; Paint; end; procedure TAOLButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; begin inherited MouseDown(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MDown) then MDown(Self, Button, Shift, X, Y); Canvas.Brush.Color := Color; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Brush.Color := clBlack; Canvas.FillRect(Rect(1,1,Width-1,2)); Canvas.Brush.Color := Col; Canvas.TextOut(Width div 2 - TextWidth div 2+2,Height div 2-TextHeight div 2+2,Cap); Canvas.Brush.Color := clBlack; Canvas.FrameRect(Rect(0,0,Width,Height)); end; end; procedure TAOLButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y); if (Button = mbLeft) and Enab then begin if Assigned (MUp) then MUp(Self, Button, Shift, X, Y); if (X>0) and (Y>0) and (X<=Width) and (Y<=Height) then Paint; end; end; procedure TAOLButton.MouseLeave(var Message: TMessage); begin Paint; end; constructor TImageButton.Create(AOwner: TComponent); begin inherited Create(AOwner); MOver := TBitmap.Create; MDown := TBitmap.Create; MUp := TBitmap.Create; Bmp := TBitmap.Create; BmpDAble := TBitmap.Create; ActualBmp := TBitmap.Create; Width := 50; Height := 50; Canvas.Brush.Color := clBtnFace; ShowHint := true; end; procedure TImageButton.Paint; begin inherited Paint; if ActualBmp.Width = 0 then ActualBmp.Assign(Bmp); Canvas.FillRect(Rect(0,0,Width,Height)); if Enabled or (BmpDAble.Width = 0) then Canvas.Draw(0,0,ActualBmp) else begin Width := BmpDAble.Width; Height := BmpDAble.Height; Canvas.Draw(0,0,BmpDAble); end; end; procedure TImageButton.Click; begin inherited Click; Paint; if Enabled then if Assigned(BtnClick) then BtnClick(Self); end; procedure TImageButton.SetMOver(Value: TBitmap); begin MOver.Assign(Value); Paint; end; procedure TImageButton.SetMDown(Value: TBitmap); begin MDown.Assign(Value); Paint; end; procedure TImageButton.SetMUp(Value: TBitmap); begin MUp.Assign(Value); Paint; end; procedure TImageButton.SetBmp(Value: TBitmap); begin Bmp.Assign(Value); ActualBmp.Assign(Value); Width := Bmp.Width; Height := Bmp.Height; Paint; end; procedure TImageButton.SetBmpDAble(Value: TBitmap); begin BmpDAble.Assign(Value); paint; end; procedure TImageButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseDown(Button, Shift, X, Y); if (Button = mbLeft) and Enabled then begin if Assigned (OnMDown) then OnMDown(Self, Button, Shift, X, Y); if MDown.Width > 0 then begin ActualBmp.Assign(MDown); Width := MDown.Width; Height := MDown.Height; Paint; end; end; end; procedure TImageButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var MouseOverButton: Boolean; P: TPoint; begin inherited MouseUp(Button, Shift, X, Y); if (Button = mbLeft) and Enabled then begin if Assigned (OnMUp) then OnMUp(Self, Button, Shift, X, Y); if MUp.Width > 0 then begin GetCursorPos(P); MouseOverButton := (FindDragTarget(P, True) = Self); if MouseOverButton then begin Width := MUp.Width; Height := MUp.Height; Canvas.FillRect(Rect(0,0,Width,Height)); Canvas.Draw(0,0,MUp); end else begin Width := bmp.Width; Height := Bmp.Height; Canvas.FillRect(Rect(0,0,Width,Height)); Canvas.Draw(0,0,Bmp); end; end else begin if MouseOverButton = false then begin Width := MOver.Width; Height := MOver.Height; Canvas.FillRect(Rect(0,0,Width,Height)); Canvas.Draw(0,0,MOver); end else begin Width := bmp.Width; Height := Bmp.Height; Canvas.FillRect(Rect(0,0,Width,Height)); Canvas.Draw(0,0,Bmp); end; end; end; end; procedure TImageButton.MouseEnter(var Message: TMessage); begin if Enabled then begin if MOver.Width > 0 then begin ActualBmp.Assign(MOver); Width := MOver.Width; Height := MOver.Height; Paint; end; end; end; procedure TImageButton.MouseLeave(var Message: TMessage); begin if Enabled then begin if Bmp.Width > 0 then begin ActualBmp.Assign(Bmp); Width := Bmp.Width; Height := Bmp.Height; Paint; end; end; end; constructor TSelButton.Create(AOwner: TComponent); begin inherited Create(AOwner); Width := 105; Height := 20; Col := clBtnFace; OverFColor := clBlack; OverColor := $00A4B984; DownColor := $00A4B984; Canvas.Brush.Color := clBlack; Border := clGray; Font.Name := 'Arial'; Font.Color := clGray; Font.Size := 8; Enab := true; ShowHint := true; Alment := taLeftJustify; BWidth := 1; end; procedure TSelButton.SetParent(Value: TWinControl); begin inherited; if Value <> nil then Cap := Name; end; procedure TSelButton.Paint; var TextWidth, TextHeight : Longint; i: Longint; begin inherited Paint; Canvas.Font := Font; Canvas.Brush.Color := Col; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Font.Color := $00D6E0E0; Canvas.Font.Color := Font.Color; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); if Alment = taLeftJustify then Canvas.TextOut(5,Height div 2-TextHeight div 2,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 6,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; for i := 0 to BWidth-1 do Canvas.FrameRect(Rect(i,i,Width-i,Height-i)); end; procedure TSelButton.Click; begin inherited Click; Paint; if Enab then if Assigned(BtnClick) then BtnClick(Self); end; procedure TSelButton.SetCol(Value: TColor); begin Col := Value; Paint; end; procedure TSelButton.SetBorder(Value: TColor); begin Border := Value; Paint; end; procedure TSelButton.SetCap(Value: string); begin Cap := value; Paint; end; procedure TSelButton.SetAlment(Value: TAlignment); begin Alment := Value; Paint; end; procedure TSelButton.SetBWidth(Value: Longint); begin BWidth := value; Paint; end; procedure TSelButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; i: Longint; begin inherited MouseDown(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MDown) then MDown(Self, Button, Shift, X, Y); Canvas.Brush.Color := DownColor; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2+1,Height div 2-TextHeight div 2+1,Cap); if Alment = taLeftJustify then Canvas.TextOut(5+1,Height div 2-TextHeight div 2+1,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 6-1,Height div 2-TextHeight div 2+1,Cap); Canvas.Brush.Color := Border; for i := 0 to BWidth-1 do Canvas.FrameRect(Rect(i,i,Width-i,Height-i)); end; end; procedure TSelButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; i: Longint; MouseOverButton: Boolean; P: TPoint; begin inherited MouseUp(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MUp) then MUp(Self, Button, Shift, X, Y); GetCursorPos(P); MouseOverButton := (FindDragTarget(P, True) = Self); if MouseOverButton then begin Canvas.Brush.Color := OverColor; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Font.Color := OverFColor; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); if Alment = taLeftJustify then Canvas.TextOut(5,Height div 2-TextHeight div 2,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 6,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; for i := 0 to BWidth-1 do Canvas.FrameRect(Rect(i,i,Width-i,Height-i)); end; end; end; procedure TSelButton.MouseEnter(var Message: TMessage); var TextWidth, TextHeight : Integer; i: Longint; begin TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if Enab then begin Canvas.Brush.Color := OverColor; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Font.Color := OverFColor; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); if Alment = taLeftJustify then Canvas.TextOut(5,Height div 2-TextHeight div 2,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 6,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; for i := 0 to BWidth-1 do Canvas.FrameRect(Rect(i,i,Width-i,Height-i)); end; end; procedure TSelButton.MouseLeave(var Message: TMessage); var TextWidth, TextHeight : Integer; i: integer; begin TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Brush.Color := Col; Canvas.FillRect(Rect(1,1,Width-1,Height-1)); Canvas.Font.Color := $00D6E0E0; Canvas.Brush.Color := Col; Canvas.Font.Color := Font.Color; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2,Cap); if Alment = taLeftJustify then Canvas.TextOut(5,Height div 2-TextHeight div 2,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 6,Height div 2-TextHeight div 2,Cap); Canvas.Brush.Color := Border; for i := 0 to BWidth-1 do Canvas.FrameRect(Rect(i,i,Width-i,Height-i)); end; constructor TSquareButton.Create(AOwner: TComponent); begin inherited Create(AOwner); Width := 113; Height := 17; Col := clBtnFace; OverFColor := clWhite; Canvas.Brush.Color := clBlack; Border := clBlack; Font.Name := 'Arial'; Font.Color := clBlack; Font.Size := 8; Enab := true; ShowHint := true; Alment := taLeftJustify; OverBorderCol := clBlack; BWidth := 2; DownBorderCol := clWhite; end; procedure TSquareButton.SetParent(Value: TWinControl); begin inherited; if Value <> nil then Cap := Name; end; procedure TSquareButton.Paint; var TextWidth, TextHeight : Longint; begin inherited Paint; Canvas.Font := Font; Canvas.Brush.Color := Col; Canvas.FillRect(Rect(0,0,Width,Height)); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Font.Color := $00D6E0E0; Canvas.Font.Color := Font.Color; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2-1,Cap); if Alment = taLeftJustify then Canvas.TextOut(6,Height div 2-TextHeight div 2-1,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 7,Height div 2-TextHeight div 2-1,Cap); Canvas.Brush.Color := Border; Canvas.FillRect(Rect(0,Height,Width,Height-BWidth)); Canvas.FillRect(Rect(0,0,BWidth,Height)); end; procedure TSquareButton.Click; begin inherited Click; Paint; if Enab then if Assigned(BtnClick) then BtnClick(Self); end; procedure TSquareButton.SetCol(Value: TColor); begin Col := Value; Paint; end; procedure TSquareButton.SetBorder(Value: TColor); begin Border := Value; Paint; end; procedure TSquareButton.SetCap(Value: string); begin Cap := value; Paint; end; procedure TSquareButton.SetAlment(Value: TAlignment); begin Alment := Value; Paint; end; procedure TSquareButton.SetBWidth(Value: Longint); begin BWidth := Value; Paint; end; procedure TSquareButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; begin inherited MouseDown(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MDown) then MDown(Self, Button, Shift, X, Y); Canvas.Brush.Color := Col; Canvas.FillRect(Rect(0,0,Width,Height)); if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2-1,Cap); if Alment = taLeftJustify then Canvas.TextOut(6,Height div 2-TextHeight div 2-1,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 7,Height div 2-TextHeight div 2-1,Cap); Canvas.Brush.Color := DownBorderCol; Canvas.FillRect(Rect(0,Height,Width,Height-BWidth)); Canvas.FillRect(Rect(0,0,BWidth,Height)); end; end; procedure TSquareButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TextWidth, TextHeight : Longint; P: TPoint; MouseOverButton: Boolean; begin inherited MouseUp(Button, Shift, X, Y); TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); if (Button = mbLeft) and Enab then begin if Assigned (MUp) then MUp(Self, Button, Shift, X, Y); GetCursorPos(P); MouseOverButton := (FindDragTarget(P, True) = Self); if MouseOverButton then begin Canvas.Brush.Color := Col; Canvas.FillRect(Rect(0,0,Width,Height)); Canvas.Font.Color := OverFColor; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2-1,Cap); if Alment = taLeftJustify then Canvas.TextOut(6,Height div 2-TextHeight div 2-1,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 7,Height div 2-TextHeight div 2-1,Cap); Canvas.Brush.Color := OverBorderCol; Canvas.FillRect(Rect(0,Height,Width,Height-BWidth)); Canvas.FillRect(Rect(0,0,BWidth,Height)); end; end; end; procedure TSquareButton.MouseEnter(var Message: TMessage); var TextWidth, TextHeight : Longint; begin if Enab then begin TextWidth := Canvas.TextWidth(Cap); TextHeight := Canvas.TextHeight(Cap); Canvas.Brush.Color := Col; Canvas.FillRect(Rect(0,0,Width,Height)); Canvas.Font.Color := OverFColor; if Alment = taCenter then Canvas.TextOut(Width div 2 - TextWidth div 2,Height div 2-TextHeight div 2-1,Cap); if Alment = taLeftJustify then Canvas.TextOut(6,Height div 2-TextHeight div 2-1,Cap); if Alment = taRightJustify then Canvas.TextOut(Width - TextWidth - 7,Height div 2-TextHeight div 2-1,Cap); Canvas.Brush.Color := OverBorderCol; Canvas.FillRect(Rect(0,Height,Width,Height-BWidth)); Canvas.FillRect(Rect(0,0,BWidth,Height)); end; end; procedure TSquareButton.MouseLeave(var Message: TMessage); begin Paint; end; end.