有几个问题好长时间没有解决,想请问大家。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时才能显示。
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时才能显示。
//画边框
Canvas.Pen.Color := InitializeColor;
Canvas.Pen.Width := 1;
Canvas.Rectangle(0, 0, Width, Height);
这几句会不会覆盖原来画的东西了??
2、把画的代码也贴出来吧
begin
inherited Create(AOwner);
FCaption := Name; //这样为空不行。 FCaption := Text; //这样也为空,不行 FCaption := 'SpreadButton1' //这样可以 Repaint;
end;但是总不能每个新建的Caption都是SpreadButton1 这个怎么解决?
2、应该是你的画布把字给盖住了。