想作一个label控件,当鼠标进入的时候改变字体,离开的时候还原,但是,在create里用FCommFont.Assign(Font);保存最初的字体的时候,好象这一句没有起作用,请问这是为什么?!错在哪儿?应该怎么解决?!unit LabelButton;interfaceuses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics;type
TLblBtn = class(TLabel)
private
{ Private declarations }
FActiveFont: TFont; //鼠标进入后的字体
FCommFont: TFont; //鼠标离开后正常情况的字体
FDisabledFont: TFont; //不可用时的字体
procedure SetActiveFont(value: TFont);
procedure SetDisabledFont(value: TFont); procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; protected
{ Protected declarations }
//procedure SetFont(Value: TFont);
public
{ Public declarations }
destructor Destroy; override;
constructor Create(aOwner: TComponent); override;
published
{ Published declarations }
property ActiveFont: TFont read FActiveFont write SetActiveFont;
property DisabledFont: TFont read FDisabledFont write SetDisabledFont; end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Caidao', [TLblBtn]);
end;constructor TLblBtn.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
Transparent :=true;
FActiveFont := TFont.Create;
FCommFont := TFont.Create;
FDisabledFont := TFont.Create; FCommFont.Assign(Font); //就是这一句好象没有起作用!
end;destructor TLblBtn.Destroy;
begin
FCommFont.Free;
FActiveFont.Free;
FDisabledFont.Free;
inherited Destroy;
end;
procedure TLblBtn.SetActiveFont(value: TFont);
begin
//if Assigned(value) then FCommFont.Assign(value);
FCommFont.Assign(value);
end;procedure TLblBtn.SetDisabledFont(value: TFont);
begin
//if Assigned(value) then FDisabledFont.Assign(value);
FDisabledFont.Assign(value);
end;procedure TLblBtn.CMEnabledChanged(var Message: TMessage);
begin
inherited;
if Enabled then
Font.Assign(FCommFont)
else
Font.Assign(FDisabledFont);
end;procedure TLblBtn.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Enabled then Font.Assign(FActiveFont);
end;procedure TLblBtn.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Enabled then Font.Assign(FCommFont);
end;end.
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics;type
TLblBtn = class(TLabel)
private
{ Private declarations }
FActiveFont: TFont; //鼠标进入后的字体
FCommFont: TFont; //鼠标离开后正常情况的字体
FDisabledFont: TFont; //不可用时的字体
procedure SetActiveFont(value: TFont);
procedure SetDisabledFont(value: TFont); procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; protected
{ Protected declarations }
//procedure SetFont(Value: TFont);
public
{ Public declarations }
destructor Destroy; override;
constructor Create(aOwner: TComponent); override;
published
{ Published declarations }
property ActiveFont: TFont read FActiveFont write SetActiveFont;
property DisabledFont: TFont read FDisabledFont write SetDisabledFont; end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Caidao', [TLblBtn]);
end;constructor TLblBtn.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
Transparent :=true;
FActiveFont := TFont.Create;
FCommFont := TFont.Create;
FDisabledFont := TFont.Create; FCommFont.Assign(Font); //就是这一句好象没有起作用!
end;destructor TLblBtn.Destroy;
begin
FCommFont.Free;
FActiveFont.Free;
FDisabledFont.Free;
inherited Destroy;
end;
procedure TLblBtn.SetActiveFont(value: TFont);
begin
//if Assigned(value) then FCommFont.Assign(value);
FCommFont.Assign(value);
end;procedure TLblBtn.SetDisabledFont(value: TFont);
begin
//if Assigned(value) then FDisabledFont.Assign(value);
FDisabledFont.Assign(value);
end;procedure TLblBtn.CMEnabledChanged(var Message: TMessage);
begin
inherited;
if Enabled then
Font.Assign(FCommFont)
else
Font.Assign(FDisabledFont);
end;procedure TLblBtn.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Enabled then Font.Assign(FActiveFont);
end;procedure TLblBtn.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Enabled then Font.Assign(FCommFont);
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货