如题

解决方案 »

  1.   

    找第三方控件学习一下,
    到这看看有没有你所学要的:http://www.2ccc.com/article.asp?articleid=827
      

  2.   

    普通的按钮没法改变。如果用普通控件,用TPanel代替吧。
      

  3.   

    获取到控件DC,就可以对其进行“描绘”。
    比如,普通按钮:TButton
    var
      btnDC: HDC;
    begin  btnDC := GetDC(Button1.Handle);
      FillRect(btnDC,Rect(1,1,Button1.Width-1,Button1.Height-1),HBRUSH(0));
      TextOut(btnDC,0,0,PChar(Button1.Caption),Length(Button1.Caption));
      ReleaseDC(Button1.Handle,btnDC);
      ...end;
      

  4.   

    我用的是BITBTN,你用的是API函数吧,源码能详细些么?
      

  5.   

    {
    初始:蓝色;
    鼠标左键按下:红色;
    鼠标放开:黑色;
    鼠标移开:蓝色;
    }
    unit ColorBtn;interfaceuses Windows, Messages, SysUtils, Classes, Controls, ExtCtrls,
      Graphics,Dialogs;type  TColorBtn = class(TGraphicControl)
      private
        OnMDown: TMouseEvent;
        OnMUp: TMouseEvent;
      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;
      public
        constructor Create(AOwner: TComponent);override;
      published
        property OnMouseDown: TMouseEvent read OnMDown write OnMDown;
        property OnMouseUp: TMouseEvent read OnMUp write OnMup;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('MyTest', [TColorBtn]);
    end;{ TColorBtn }procedure TColorBtn.Click;
    begin
      inherited;end;constructor TColorBtn.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      Width := 30;
      Height := 30;
    end;procedure TColorBtn.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
      Y: Integer);
    begin
      inherited MouseDown(Button, Shift, x, y);
      canvas.Brush.Color := clRed;
      canvas.FillRect(Rect(0,0,30,30));
    end;procedure TColorBtn.MouseLeave(var Message: TMessage);
    begin
      Paint;
    end;procedure TColorBtn.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
      Y: Integer);
    begin
      inherited MouseUp(Button, Shift, x, y);
      canvas.Brush.Color := clBlack;
      canvas.FillRect(Rect(0,0,30,30));
    end;procedure TColorBtn.Paint;
    begin
      inherited Paint;
      canvas.Brush.Color := clBlue;
      canvas.FillRect(Rect(0,0,30,30));
    end;end.