TextOut
DrawText
都不能设置在一段文字中的某几个字符颜色或效果,
也考虑过TextOut几个字符后更改画刷再TextOut,
但字间距、换行之类的实在太难控制,
有什么API或算法能做到?

解决方案 »

  1.   

    这个有点难控制了....要不把它画好后再用label???
      

  2.   

    楼上你想问问题自己去开帖,别走题好不
    字宽之类的你去查MSDN的Font and Text Functions专题
      

  3.   

    Pen.color:=$00112233;
    Pen.Font:=!@@@43  (记不清了!);
    TextOut(10,10,'试');
    Pen.color:=$00332211;
    Pen.Font:=&^%^$  (记不清了!);
    TextOut(20,10,'试');
    ^^^^^^^^^^^^^^^
    多颜色 多字体.......................笨方法
      

  4.   

    Image1中加载一张颜色渐变的位图:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Self.Font.Color := clGreen;
      Self.Font.Name  := 'Arial';
      Self.Font.Size  := 40;
      Self.Canvas.Brush.Style := bsClear;  BeginPath(Self.Canvas.Handle);
      Self.Canvas.TextOut(10, 10, 'Hello, world!');
      EndPath(Self.Canvas.Handle);  SelectClipPath (Self.Canvas.Handle, RGN_COPY) ;  BitBlt(Self.Canvas.Handle, 10, 10, Self.Width, Self.Height,
             Image1.Canvas.Handle, 0, 0, SRCCOPY);
      StrokeAndFillPath(Self.Canvas.Handle);
    end;
      

  5.   

    设置字体间距用API  SetTextJustification
    行距控制可以使用Image1.Canvas.TextRect, 这样控制的比较准确。
    获取字体的宽和高: Image1.Canvas.TextHeight('我'); Image1.Canvas.TextWidth('你');
    其实你的要求更容易实现,不用BitBlt,直接绘制矩形就可以了。具体代码我就不写了。
      

  6.   

    渐变很简单,AND复制也能实现,关键是输入一段文字(假设100个中英文混合字符带换行符)
    用DrawText设定一个区域写入的字符需要自动换行的
    如果仅仅只是需要第50-60个字符变一种颜色,或换个字体,或改变字体大小(也可能组合上述条件),怎么算出具体在什么位置....
      

  7.   


    http://download.csdn.net/source/197437看看这个吧,这个程序实现了在Bitmap上写字的功能.