• 制作放两个小图片的按钮 回复 "xhui" 的问题



    问题来源: http://www.cnblogs.com/del/archive/2009/03/12/1409708.html#1475240

    本例效果图:



    自定义的类(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.
    

  • 相关阅读:
    leetcode44:wildcard
    Python实现决策树
    PCA实现
    js触摸事件
    js中的getBoundingClientRect()函数
    Java中timer的schedule()和schedualAtFixedRate()函数的区别
    nodejs中的exports和module.exports
    为什么MySQL数据库要用B+树存储索引
    浅谈微服务中的熔断,限流,降级
    缓存击穿、缓存穿透和缓存雪崩
  • 原文地址:https://www.cnblogs.com/del/p/1409890.html
Copyright © 2020-2023  润新知