是不是按扭,菜单的颜色都不能改变? 如果你是想在你的程序里面更改的话,你可以在ONPaint event里面重新画一次就可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵.服了.这样的回答也算'答案'?拜托,回答问题的时候不要想当然.自己写一个可以改变颜色的控件吧.==================colorbutton source code===========================unit Button1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;type TButton1 = class(TButton) private FColor: TColor; FCanvas: TCanvas; IsFocused: Boolean; procedure SetColor(Value: TColor); procedure DrawItem(const DrawItemStruct: TDrawItemStruct); procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM; procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; procedure DrawButtonText(Canvas: TCanvas; const Caption: string; TextBounds: TRect; State: TButtonState); 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 clBtnFace; { Published declarations } end;procedure Register;implementationprocedure Register;begin RegisterComponents('Samples', [TButton1]);end;{ TButton1 }procedure TButton1.CMEnabledChanged(var Message: TMessage);begin inherited; Invalidate;end;procedure TButton1.CMFontChanged(var Message: TMessage);begin inherited; Invalidate;end;procedure TButton1.CNDrawItem(var Message: TWMDrawItem);begin DrawItem(Message.DrawItemStruct^);end;procedure TButton1.CNMeasureItem(var Message: TWMMeasureItem);begin with Message.MeasureItemStruct^ do begin itemWidth := Width; itemHeight := Height; end;end;constructor TButton1.Create(AOwner: TComponent);begin inherited; FCanvas := TCanvas.Create; FColor := clBtnFace;end;procedure TButton1.CreateParams(var Params: TCreateParams);begin inherited CreateParams(Params); Params.Style := Params.Style or BS_OWNERDRAW;end;destructor TButton1.Destroy;begin FCanvas.Free; inherited;end;procedure TButton1.DrawButtonText(Canvas: TCanvas; const Caption: string; TextBounds: TRect; State: TButtonState);begin with Canvas do begin Brush.Style := bsClear; if State = bsDisabled then begin OffsetRect(TextBounds, 1, 1); Font.Color := clWhite; DrawText(Handle, PChar(Caption), Length(Caption), TextBounds, 0); OffsetRect(TextBounds, -1, -1); Font.Color := clDkGray; DrawText(Handle, PChar(Caption), Length(Caption), TextBounds, 0); end else DrawText(Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER or DT_SINGLELINE); end;end;procedure TButton1.DrawItem(const DrawItemStruct: TDrawItemStruct);var IsDown, IsDefault: Boolean; State: TButtonState; R: TRect;begin FCanvas.Handle := DrawItemStruct.hDC; R := ClientRect; with DrawItemStruct do begin IsDown := itemState and ODS_SELECTED <> 0; IsDefault := itemState and ODS_FOCUS <> 0; if not Enabled then State := bsDisabled else if IsDown then State := bsDown else State := bsUp; end; if IsFocused or IsDefault then begin FCanvas.Pen.Color := clWindowFrame; FCanvas.Pen.Width := 1; FCanvas.Brush.Style := bsClear; FCanvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom); InflateRect(R, -1, -1); end; if IsDown then begin FCanvas.Pen.Color := clBtnShadow; FCanvas.Pen.Width := 1; FCanvas.Brush.Color := FColor; FCanvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom); InflateRect(R, -1, -1); end else with FCanvas do begin DrawEdge(Handle, R, BDR_RAISEDINNER or BDR_RAISEDOUTER, BF_RECT or BF_ADJUST); FCanvas.Pen.Color := FColor; FCanvas.Pen.Width := 1; FCanvas.Brush.Color := FColor; FCanvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom); InflateRect(R, -1, -1); end; if IsFocused then begin R := ClientRect; InflateRect(R, -1, -1); end; FCanvas.Font := Self.Font; if IsDown then OffsetRect(R, 1, 1); DrawButtonText(FCanvas, Caption, R, State); if IsFocused then begin R := ClientRect; InflateRect(R, -4, -4); FCanvas.Pen.Color := clWindowFrame; FCanvas.Brush.Color := FColor; DrawFocusRect(FCanvas.Handle, R); end; FCanvas.Handle := 0;end;procedure TButton1.SetButtonStyle(ADefault: Boolean);begin if ADefault <> IsFocused then begin IsFocused := ADefault; Refresh; end;end;procedure TButton1.SetColor(Value: TColor);begin if FColor <> Value then begin FColor := Value; Invalidate; end;end;end. Mudeen(笑哥哥) ,不至于把一个第三方控件的源代码全给贴出来吧。 : johnsonrao(johnson) ;呵呵,你不要说我嚣张.以上这段代码不是我写的.但是你知道是谁写的吗?绝大部分都是VCL的源码.我只是想表述一个意思:既然回答人家的问题,你就要认真负责. 要是哪天人家对你说你去改控制面板去改外观,你会怎么想?开玩笑也不要这样吧.===================================================================以上不针对个人,只是一点想法而已,看我不惯随便骂就行了.我无所谓. to:pazee(耙子) 不是我问题说得不明白,是你的理解力有问题,如果我只是想问改机器的设置,用的着到delphi的论坛里吗? 救急啊, 关于delphi主从表的删除问题 怎样计算时间? 判断输入的内容是否是数字的函数是什么呢?急用!!! 关于Microsoft和Oracle对Delphi用ADO方式连接Oracle提供的两个驱动程序的问题。 关于StringGird导出数据到Execl数据格式问题。 请问各位:当登陆及序幕画面出现完进入主窗体以后,为何不能继续操作,光标一直处于运行状态 各位老兄,帮帮我,急 ***请进请进,有分送*** 我KAO,到底怎么了? 有经验的高手,关于串口通迅的问题,非常棘手。请各位帮忙瑞 关于Label长度的问题
这样的回答也算'答案'?
拜托,回答问题的时候不要想当然.
自己写一个可以改变颜色的控件吧.
==================colorbutton source code===========================
unit Button1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;type
TButton1 = class(TButton)
private
FColor: TColor;
FCanvas: TCanvas;
IsFocused: Boolean;
procedure SetColor(Value: TColor);
procedure DrawItem(const DrawItemStruct: TDrawItemStruct);
procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; procedure DrawButtonText(Canvas: TCanvas; const Caption: string;
TextBounds: TRect; State: TButtonState); 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 clBtnFace;
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TButton1]);
end;{ TButton1 }procedure TButton1.CMEnabledChanged(var Message: TMessage);
begin
inherited;
Invalidate;
end;procedure TButton1.CMFontChanged(var Message: TMessage);
begin
inherited;
Invalidate;
end;procedure TButton1.CNDrawItem(var Message: TWMDrawItem);
begin
DrawItem(Message.DrawItemStruct^);
end;procedure TButton1.CNMeasureItem(var Message: TWMMeasureItem);
begin
with Message.MeasureItemStruct^ do
begin
itemWidth := Width;
itemHeight := Height;
end;
end;constructor TButton1.Create(AOwner: TComponent);
begin
inherited;
FCanvas := TCanvas.Create;
FColor := clBtnFace;
end;procedure TButton1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or BS_OWNERDRAW;
end;destructor TButton1.Destroy;
begin
FCanvas.Free;
inherited;
end;procedure TButton1.DrawButtonText(Canvas: TCanvas; const Caption: string;
TextBounds: TRect; State: TButtonState);
begin
with Canvas do
begin
Brush.Style := bsClear;
if State = bsDisabled then
begin
OffsetRect(TextBounds, 1, 1);
Font.Color := clWhite;
DrawText(Handle, PChar(Caption), Length(Caption), TextBounds, 0);
OffsetRect(TextBounds, -1, -1);
Font.Color := clDkGray;
DrawText(Handle, PChar(Caption), Length(Caption), TextBounds, 0);
end else
DrawText(Handle, PChar(Caption), Length(Caption), TextBounds,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;procedure TButton1.DrawItem(const DrawItemStruct: TDrawItemStruct);
var
IsDown, IsDefault: Boolean;
State: TButtonState;
R: TRect;
begin
FCanvas.Handle := DrawItemStruct.hDC;
R := ClientRect; with DrawItemStruct do
begin
IsDown := itemState and ODS_SELECTED <> 0;
IsDefault := itemState and ODS_FOCUS <> 0;
if not Enabled then State := bsDisabled
else if IsDown then State := bsDown
else State := bsUp;
end; if IsFocused or IsDefault then
begin
FCanvas.Pen.Color := clWindowFrame;
FCanvas.Pen.Width := 1;
FCanvas.Brush.Style := bsClear;
FCanvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom); InflateRect(R, -1, -1);
end; if IsDown then
begin
FCanvas.Pen.Color := clBtnShadow;
FCanvas.Pen.Width := 1;
FCanvas.Brush.Color := FColor;
FCanvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
InflateRect(R, -1, -1);
end
else
with FCanvas do
begin
DrawEdge(Handle, R, BDR_RAISEDINNER or BDR_RAISEDOUTER, BF_RECT or BF_ADJUST);
FCanvas.Pen.Color := FColor;
FCanvas.Pen.Width := 1;
FCanvas.Brush.Color := FColor;
FCanvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
InflateRect(R, -1, -1);
end; if IsFocused then
begin
R := ClientRect;
InflateRect(R, -1, -1);
end; FCanvas.Font := Self.Font;
if IsDown then
OffsetRect(R, 1, 1);
DrawButtonText(FCanvas, Caption, R, State);
if IsFocused then
begin
R := ClientRect;
InflateRect(R, -4, -4);
FCanvas.Pen.Color := clWindowFrame;
FCanvas.Brush.Color := FColor;
DrawFocusRect(FCanvas.Handle, R);
end; FCanvas.Handle := 0;
end;procedure TButton1.SetButtonStyle(ADefault: Boolean);
begin
if ADefault <> IsFocused then
begin
IsFocused := ADefault;
Refresh;
end;
end;procedure TButton1.SetColor(Value: TColor);
begin
if FColor <> Value then
begin
FColor := Value;
Invalidate;
end;
end;
end.
呵呵,你不要说我嚣张.以上这段代码不是我写的.但是你知道是谁写的吗?
绝大部分都是VCL的源码.
我只是想表述一个意思:既然回答人家的问题,你就要认真负责. 要是哪天人家对你说你去改控制面板去改外观,你会怎么想?开玩笑也不要这样吧.
===================================================================
以上不针对个人,只是一点想法而已,看我不惯随便骂就行了.我无所谓.