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时才能显示。
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时才能显示。