有几个问题好长时间没有解决,想请问大家。(100分)

  • 主题发起人 主题发起人 nnnnyyyy
  • 开始时间 开始时间
N

nnnnyyyy

Unregistered / Unconfirmed
GUEST, unregistred user!
有几个问题好长时间没有解决,想请问大家。

1: 还是自己写的一个控件TSpeadButton 继承(TGraphicControl)。Caption在新建的时候显示不出来。
constructor TSpeadButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

FCaption := Name;

Repaint;
end;

procedure TSpeadButton.Paint;
var
FontHeight: Integer; //字体高度
FillNumber: Word; //填充次数
Red, Green, Blue: Byte; //分解颜色
InitializeColor, TerminalColor: TColor; //起始色、终止色
begin

//画形状
Canvas.FillRect(Rect(0, 0, Width, Height));

if Enabled then //处于可用状态
begin
InitializeColor := FInitializeColor;
TerminalColor := FTerminalColor;
Font.Color := clWindow;
end
else//处于不可用状态
begin
InitializeColor := clSilver;
TerminalColor := clWhite;
Font.Color := clGray;
end;

//填充渐变色
for FillNumber := 0 to Height-1 do
begin
Red := GetRvalue(InitializeColor) + Trunc(FillNumber * (GetRvalue(TerminalColor) - GetRvalue(InitializeColor)) / (Height - 1));
Green := GetGvalue(InitializeColor) + Trunc(FillNumber * (GetGvalue(TerminalColor) - GetGvalue(InitializeColor)) /(Height - 1));
Blue := GetBvalue(InitializeColor) + Trunc(FillNumber * (GetBvalue(TerminalColor) - GetBvalue(InitializeColor)) / (Height - 1));

Canvas.Pen.Color := RGB(Red, Green, Blue);
Canvas.MoveTo(0, FillNumber);
Canvas.LineTo(Width, FillNumber);
end;

Canvas.Brush.Style := bsClear;

//重写Caption
if Trim(Caption) <> '' then
begin
Canvas.Font := Font;
FontHeight := Canvas.TextHeight('X'); //得到字体高度
Canvas.TextOut((Width - Canvas.TextWidth(Caption)) div 2 , (Height - FontHeight) div 2, Caption);
end;

//画边框
Canvas.Pen.Color := InitializeColor;
Canvas.Pen.Width := 1;
Canvas.Rectangle(0, 0, Width, Height);
end;


****************************************************************************************
2:自己写了一个控件TSpreadEdit,继承TCustomEdit. 我在Edit内部的右侧用画布画了一个矩形。但是这时出面了几个问题
在没有画矩形之前,Edit的Text是能显示的。之后就不能显示了。只有进入Edit时才能显示。
 
控件新建时Caption显示不出来。

constructor TSpeadButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

FCaption := Name; //这样为空不行。

FCaption := Text; //这样也为空,不行

FCaption := 'SpreadButton1' //这样可以

Repaint;
end;

但是总不能每个新建的Caption都是SpreadButton1 这个怎么解决?
 
constructor TSpeadButton.Create(AOwner: TComponent;name: string);
 
这是什么意思?
 
后退
顶部