我做了一个的大概是这样的组件:
---------------
|       |  text1:如CSDN     |
|  图片 |------------------           
|       |  text2:如连接成功 |
----------------------------
这样的效果:现在的问题是我不能正常显示右边的两项text,debug后觉得是Drawtext时有问题,请各位指点!
procedure TBtn5.Paint;
var
  TextRect:TRect;
begin
  inherited;
 TextRect:=Rect(Left,Top,Left+self.ClientWidth,self.Top+(self.ClientHeight div 2));//写text1
  DrawText(Canvas.Handle,PChar(FText),length(FText),TextRect,Flags[FAlignment]);
  TextRect:=Rect(Glyph.Width,Top-(self.ClientHeight div 2),self.ClientWidth,self.Top-self.ClientHeight);//写text2
  DrawText(Canvas.Handle,PChar(FText1),length(FText1),TextRect,Flags[FAlignment]);
end;这里是左边的图片的代码:
procedure TBtn5.SetGlyph1(Value: TBitmap);
var
BmpRect:TRect;
Bmp1:TBitmap;
begin
  if FGlyph1<>Value then
    FGlyph1.Assign(Value);
  try
    with Glyph1 do
    begin
      BmpRect:=Rect(Self.Left,Self.Top,Self.Left+Self.Width,Self.Top+Self.Height);
      Canvas.Draw(0,0,FGlyph1);
    end;
  finally
    Bmp1.Free;
  end;
    Invalidate();
end;

解决方案 »

  1.   

    为了固定位置你动态生成一个label,或者edit之类的组件
      

  2.   

    现在我就时需要在button上面画出来
      

  3.   

    // 改动如下:
    TextRect := Rect(0, 0, ClientWidth, (ClientHeight div 2));
      

  4.   

    to 楼上,这样把text画到glyph左边去了,我希望画在右边,只要我用Glyph.Width代调0就可以了,问题是下半部分的text可能因为height或top不对,总是没显示
      

  5.   

    还有,记得speedbutton的glyph是随着caption的输入向左移动的,怎么实现???
      

  6.   

    TextRect:=Rect(Glyph.Width,Top,self.ClientWidth div 2,self.ClientWidth div 2,self.Top+self.ClientHeight);//写text1
      DrawText(Canvas.Handle,PChar(FText),length(FText),TextRect,Flags[FAlignment]);
      TextRect:=Rect(Glyph.Width,Top+(self.ClientHeight div 2),self.ClientWidth,self.Top+self.ClientHeight);//写text2
      DrawText(Canvas.Handle,PChar(FText1),length(FText1),TextRect,Flags[FAlignment]);我也不知对不对,试一下先
      

  7.   

    先谢谢 vavyboyleon(一天到晚加班的驴),可是不对!写到左边去了
    TextRect1:=Rect(Glyph.Width,0,self.ClientWidth,(self.ClientHeight div 2));
    TextRect1 := Rect(0, 0, ClientWidth, (ClientHeight div 2));
      DrawText(Canvas.Handle,PChar(FText),length(FText),TextRect1,Flags[FAlignment]);
      TextRect1:=Rect(Glyph.Width,(self.ClientHeight div 2),self.ClientWidth,self.ClientHeight);
      DrawText(Canvas.Handle,PChar(FText1),length(FText1),TextRect1,Flags[FAlignment]);
    这个可以通过测试,就是调用unit来调试,但是作组件安装后就不行,又回到左边了