你是不是说在一个应用程序改变另外一个程序里的button颜色啊? wm_ctlsetcolor应该是设置颜色的
解决方案 »
- 求一份indy10 idftp的代理设置代码
- 关于Treeview读取配置文件
- 本人刚建一QQ群《数字人生》,希望给大家提供一个各种编程语言交流的平台!欢迎大家加入!!!
- 哪里有类似于SQL server 客户端工具企业管理器这样的软件 来替代企业管理器
- 关于上传,下载的问题~在线等!!
- 谁还遇到过这个问题:函数放在dll中就运行出错??
- 这样的数组常量该如何写啊
- 谁做过票据打印机的程序?高分相送!!UP有分
- Delphi调试CGI的外挂程序叫什么名字?哪里可以下载?
- 怎样发布Corba应用程序
- XPmenu(v2.1)的XPContainers属性中对ScrollBox和TabSheet的控制都为true,但是为什么我看不到效果?
- 如何获取两个字符串的相同字符数目??
vcl里我从createparams到createwnd到createhandle到paintto都看了个遍还没找到从哪里下手的好。呵呵。
unit tzButton;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,ExtCtrls;type
TtzButton = class(TButton) //思想就是给它加个画布,改画布颜色
private
FCanvas: TCanvas;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure Paint; virtual; //后加的
procedure PaintWindow(DC: HDC); override;
property Canvas: TCanvas read FCanvas; procedure ButtonClick(Sender: TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Color;
end;
procedure Register;implementationprocedure Register;
begin
RegisterComponents('TZhuang', [TtzButton]);
end;{ TtzButton }procedure TtzButton.paint;
var ARect: TRect;
Flags: Longint;begin with Canvas do begin
ARect := GetClientRect;
Brush.Color := Self.Color;
FillRect(ARect);
//模仿TCustomPanel.paint的代码
Frame3D(Canvas, ARect, clBtnHighlight, clBtnShadow, 1);
Flags := DT_EXPANDTABS or DT_VCENTER or DT_CENTER;
//Flags := DT_CENTER or DT_VCENTER;
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Handle, PChar(Caption), -1, ARect, Flags); end;end;constructor TtzButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self; OnClick:= ButtonClick;
end;destructor TtzButton.Destroy;
begin
FCanvas.Free;
inherited Destroy;
end;procedure TtzButton.WMPaint(var Message: TWMPaint);
begin
ControlState:= ControlState + [csCustomPaint];
//Include(FControlState, csCustomPaint);
inherited;
//Exclude(FControlState, csCustomPaint);
ControlState:= ControlState - [csCustomPaint];
end;procedure TtzButton.PaintWindow(DC: HDC);
begin
FCanvas.Lock;
try
FCanvas.Handle := DC;
try
TControlCanvas(FCanvas).UpdateTextFlags;
Paint;
finally
FCanvas.Handle := 0;
end;
finally
FCanvas.Unlock;
end;
end;procedure TtzButton.ButtonClick(Sender: TObject);
begin
invalidate; //刷新!
end;end.