delphi 制作放两个小图片的按钮


本例效果图:


自定义的类(TMyButton):
--------------------------------------------------------------------------------

unit Unit2;

interface

uses
Windows, Messages, Classes, Graphics, StdCtrls;

type
TMyButton = class(TButton)
private
FBit1,FBit2: TBitmap;
protected
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Click; override;
end;

implementation

{ TMyButton }

procedure TMyButton.Click;
begin
inherited;
MessageBox(0, 'MyButton', 'Hi', MB_OK);
end;

constructor TMyButton.Create(AOwner: TComponent);
var
wh: Integer;
begin
inherited;
FBit1 := TBitmap.Create;
FBit2 := TBitmap.Create;
//在此可以载入图片, 为了测试方便, 我随便画两个矩形吧
wh := Height - 8;
FBit1.SetSize(wh, wh);
FBit2.SetSize(wh, wh);
FBit1.Canvas.Brush.Color := clRed;
FBit1.Canvas.Rectangle(0, 0, wh, wh);
FBit2.Canvas.Brush.Color := clLime;
FBit2.Canvas.Rectangle(0, 0, wh, wh);
end;

destructor TMyButton.Destroy;
begin
FBit1.Free;
FBit2.Free;
inherited;
end;

procedure TMyButton.WMPaint(var Message: TWMPaint);
var
cvs: TCanvas;
DC: HDC;
begin
Inherited;
DC := GetDC(Handle);
cvs := TCanvas.Create;
cvs.Handle := DC;
cvs.Draw(4, (Height - FBit2.Height) div 2, FBit1);
cvs.Draw(Width - FBit2.Width - 4, (Height - FBit2.Height) div 2, FBit2);
cvs.Free;
ReleaseDC(Handle, DC);
end;

end.
--------------------------------------------------------------------------------


测试代码:
--------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyButton.Create(Self) do begin
Parent := Self;
Left := Random(Self.ClientWidth - Width);
Top := Random(Self.ClientHeight - Height);
end;
end;

end.


联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678