有几个问题好长时间没有解决,想请问大家。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.   

    1、运行时能显示出来吗??我看代码好像是始终不能显示Caption啊
       //画边框
       Canvas.Pen.Color := InitializeColor;
       Canvas.Pen.Width := 1;
       Canvas.Rectangle(0, 0, Width, Height);
      这几句会不会覆盖原来画的东西了??
    2、把画的代码也贴出来吧
      

  2.   

    第一个发现了问题所在。constructor TSpeadButton.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
     
      FCaption := Name;  //这样为空不行。  FCaption := Text; //这样也为空,不行  FCaption := 'SpreadButton1' //这样可以  Repaint;
    end;但是总不能每个新建的Caption都是SpreadButton1 这个怎么解决?
      

  3.   

    1、给FCaption赋值时name和text属性还没有被赋值,所以FCaption得到的值也为空,所以该代码不能写在Create中,写到其他的重载函数中试试。
    2、应该是你的画布把字给盖住了。