DrawText函数格式如下:
DrawText(Handle,                  //device context句柄
         PChar(Word),             //要显示的字符串
         Length(Word),            //字符串的长度
         R,                       //矩形
         DT_WORDBREAK             //输出格式
         );      如果Word字符串有20个字符,而R的宽度只有80个像素,则R的宽度不足以将Word在一行容纳,按照上面格式也无法折行,而是将Word不能显示的部分直接去掉了。DrawText有没有其他的格式让Word也折行显示,如果没有这样的格式,有没有其他的办法达到满足我的目的?

解决方案 »

  1.   

    DrawStyle:=DT_EXPANDTABS or WordWraps[FWordWrap];DoDrawText(CalcRect, GetText, DrawStyle or DT_CALCRECT);procedure DoDrawText(var Rect: TRect; CText: String; Flags: Word);
    begin
        if (Flags and DT_CALCRECT <> 0) and ((CText = '') or ShowAccelChar and
           (CText[1] = '&') and (CText[2] = #0)) then CText := CText + ' ';
        if not ShowAccelChar then
            Flags := Flags or DT_NOPREFIX;    Canvas.Font:=Font;
        if not Enabled then
        begin
            OffsetRect(Rect, 1, 1);
            Canvas.Font.Color:=clBtnHighlight;
            DrawText(Canvas.Handle, PChar(CText), Length(CText), Rect, Flags);
            OffsetRect(Rect, -1, -1);
            Canvas.Font.Color:=clBtnShadow;
            DrawText(Canvas.Handle, PChar(CText), Length(CText), Rect, Flags);
        end
        else
            DrawText(Canvas.Handle, PChar(CText), Length(CText), Rect, Flags);
    end;
      

  2.   

    to ljyt(罗云) :DrawTextEx该怎么用啊,能给个例子吗,我用着不行。to xue_fg(砂的世界):你的代码是应该是以前编写的,将其中对我有用的一段Copy出来供我参考,能不能把你的思路说说,没有上下文,我理解不了你的代码。
      

  3.   

    DrawTextEx比DrawText多一个参数,是一个结构,自己看看吧……每个参数的意思也很简单。
    typedef struct {  
        UINT cbSize; 
        int  iTabLength; 
        int  iLeftMargin; 
        int  iRightMargin; 
        UINT uiLengthDrawn; 
    } DRAWTEXTPARAMS, FAR *LPDRAWTEXTPARAMS; 
      

  4.   

    to ljyt(罗云) :DrawTextEx的用法我知道了,可是怎样才能将一个长的单词自动折行呢,用哪些格式,能给个例子吗,我就等着你的例子了,不然的话我还要自己编写一个处理字符串的函数。
      

  5.   

    问题解决,是自己写函数处理的。
    由于ljyt和xue_fg没有正确回答问题,分数只能给jishiping,不过也感谢你们的捧场。