我怎么改变按钮的背景色啊!!!
能否告诉我解决的思路,给个这个方面的例子吧
能否告诉我解决的思路,给个这个方面的例子吧
解决方案 »
- delphi dbgrid打印问题
- delphi写的页签控件(继承RzPageControl)如何在控件的右键菜单中生成新页签
- 急求大侠給我个算法!--画流程图
- MS-SQL Server中删除记录出错时该怎么处理!!
- Delphi6.0中,用QReport组件页中的控件做报表时,按工作人员分组,如何对工作时间(Time_Total)进行汇总?
- 菜鸟请教ocx问题
- 请问:write('x=',x:20:10)如何解释?
- 把我用了6年多14"显示器放一边了,换了17"液晶,爽啊!散分!
- ExtractFileDir和ExtractFilePath……
- 请问SQL动态查询
- 用wm_copydata发送消息,竟然有消息丢失的现象,不解???
- 请问delphi或者bcb写的dll能否被jscript调用?
去找个代码看看就知道了。
或者简单写。从TCUSTOMBUTTON派生吧。。就把PAINT 方法OVERRIDE一下。
就可以了。
TMyBtn=class(TCustomButton);
private
..
protected
...
procedure Paint;override;
public
...
end;
........
procedure TMyBtn.paint;
var
rc:TRect;
begin
with Canvas do begin
rc:=GetClientRect;
Brush.Color:=clRed;
FillRect(rc);
...........
end;
end;
//效果就是个红色的BUTTON;
我想要一个例子
能给我发一份吗?我玩delphi不长时间!
[email protected]
unit Button1;interfaceuses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;type
TButton1=class(TButton)
private
FColor:TColor;
FCanvas:TCanvas;
IsFocused:Boolean;
procedure SetColor(Value:TColor);
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure SetButtonStyle(ADefault: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Color:TColor read FColor write SetColor default clWhite;
end;
procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TButton1]);
end;//*** 构造函数 *****************************************************
constructor TButton1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCanvas := TCanvas.Create;
FColor:=clWhite;//默认颜色
end;//*** 析构函数 *************************************************
destructor TButton1.Destroy;
begin
FCanvas.Free;
inherited Destroy;
end;//*** 定义按钮样式,必须将该按钮重定义为自绘式按钮 *************
procedure TButton1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do Style := Style or BS_OWNERDRAW;
end;//*** 属性写方法 ************************************************
procedure TButton1.SetColor(Value:TColor);
begin
FColor:=Value;
Invalidate;
end;//*** 设置按钮状态***********************************************
procedure TButton1.SetButtonStyle(ADefault: Boolean);
begin
if ADefault <> IsFocused then
begin
IsFocused := ADefault;
Refresh;
end;
end;//*** 绘制按钮 ***************************************************
procedure TButton1.CNDrawItem(var Message: TWMDrawItem);
var
IsDown, IsDefault: Boolean;
ARect: TRect;
Flags: Longint;
DrawItemStruct: TDrawItemStruct;
wh:TSize;
begin
DrawItemStruct:=Message.DrawItemStruct^;
FCanvas.Handle := DrawItemStruct.hDC;
ARect := ClientRect;
with DrawItemStruct do
begin
IsDown := itemState and ODS_SELECTED <> 0;
IsDefault := itemState and ODS_FOCUS <> 0;
end; Flags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;
if IsDown then Flags := Flags or DFCS_PUSHED;
if DrawItemStruct.itemState and ODS_DISABLED <> 0 then
Flags := Flags or DFCS_INACTIVE; if IsFocused or IsDefault then
begin
//按钮得到焦点时的状态绘制
FCanvas.Pen.Color := clWindowFrame;
FCanvas.Pen.Width := 1;
FCanvas.Brush.Style := bsClear;
FCanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
InflateRect(ARect, -1, -1);
end; FCanvas.Pen.Color := clBtnShadow;
FCanvas.Pen.Width := 1;
FCanvas.Brush.Color := FColor;
if IsDown then begin
//按钮被按下时的状态绘制
FCanvas.Rectangle(ARect.Left , ARect.Top, ARect.Right, ARect.Bottom);
InflateRect(ARect, -1, -1);
end else
//绘制一个未按下的按钮
DrawFrameControl(DrawItemStruct.hDC, ARect, DFC_BUTTON, Flags);
FCanvas.FillRect(ARect); //绘制Caption文本内容
FCanvas.Font := Self.Font;
ARect:=ClientRect;
wh:=FCanvas.TextExtent(Caption);
FCanvas.Pen.Width := 1;
FCanvas.Brush.Style := bsClear;
if not Enabled then
begin //按钮失效时应多绘一次Caption文本
FCanvas.Font.Color := clBtnHighlight;
FCanvas.TextOut((Width div 2)-(wh.cx div 2)+1,
(height div 2)-(wh.cy div 2)+1,
Caption);
FCanvas.Font.Color := clBtnShadow;
end;
FCanvas.TextOut((Width div 2)-(wh.cx div 2),(height div 2)-(wh.cy div 2),Caption); //绘制得到焦点时的内框虚线
if IsFocused and IsDefault then
begin
ARect := ClientRect;
InflateRect(ARect, -4, -4);
FCanvas.Pen.Color := clWindowFrame;
FCanvas.Brush.Color := FColor;
DrawFocusRect(FCanvas.Handle, ARect);
end;
FCanvas.Handle := 0;
end;
//** The End *********************************************************
end.
end.