我用第一种方法:
  Canvas.Rectangle(CurrRect);
  Canvas.TextOut(CurrRect.Left+5,CurrRect.Top+5,'123456789');
  矩形和字都出来了,但是不能把字限制在矩形区里,超出了。  我用第二种方法:
  Canvas.Rectangle(CurrRect);
  Canvas.TextRect(CurrRect,10,10,'123456789');
  结果看见文字却不见了矩形,把上面两行换个顺序,结果看见了矩形看不见文字?  我该怎么办呢?

解决方案 »

  1.   

    var
      s: string;
      r: TRect;
    begin
      r.Left := 10;
      r.Top := 10;
      r.Right := 100;
      r.Bottom := 100;  s := 'Test1 Test2 Test3 Test4 Test5 Test7';
      
      DrawText(Canvas.Handle, @s[1], Length(s), r, DT_LEFT or DT_WORDBREAK);
    end;
      

  2.   

    在输出文字之前调用一下这个: 
      SetBkMode(Canvas.Handle, TRANSPARENT);
    或者: 
      Canvas.Brush.Style:= bsClear;
      

  3.   

    var 
        s:   string; 
        r:   TRect; 
    begin 
        r.Left   :=   10; 
        r.Top   :=   10; 
        r.Right   :=   100; 
        r.Bottom   :=   100;     s   :=   'Test1   Test2   Test3   Test4   Test5   Test7'; 
        
        DrawText(Canvas.Handle,   @s[1],   Length(s),   r,   DT_LEFT   or   DT_WORDBREAK); 
    end;----------------------
    这个行,好使
      

  4.   

        Canvas.Rectangle(CurrRect); 
        Canvas.TextRect(CurrRect,10,10,'123456789'); 
        结果看见文字却不见了矩形,把上面两行换个顺序,结果看见了矩形看不见文字? 
    -----------------------------------
    看见文字看不见矩形,是因为文字框与矩形一样大小,你可以把文字框缩小5个像数点就比较像输入框了
    看见矩形不见文字,是因为矩形在文字框上层,可以用SendToBack/SendToFront调整层显
      

  5.   

     DrawText(Canvas.Handle,   @s[1],   Length(s),   r,   DT_LEFT   or   DT_WORDBREAK);  Canvas.Brush.Style:=   bsClear; 都不能使长的文本在矩形区内自动换行啊?
      

  6.   


      r.Left:= 0;
      r.Top := 0;
      r.Right := 100;
      r.Bottom:= 100;  Canvas.Rectangle(r);  //画矩形  inc(r.Left, 5);
      inc(r.Top,  5);
      dec(r.Right, 5);
      dec(r.Bottom,5);  SetBkMode(Canvas.Handle, TRANSPARENT);    //设置文字背景透明
      DrawText(Canvas.Handle, PChar(s), Length(s), r, DT_LEFT or DT_WORKBREAK); //在矩形内输出文字并自动换行
      

  7.   

     多次试验表明:使用DT_WORKBREAK 后,遇到S中的空格才会换行。如果S中没有空格,就不换行
      

  8.   

     多次试验表明:使用DT_WORKBREAK   后,遇到S中的空格才会换行。如果S中没有空格,就不换行
    -------------------------------------------
    Delphi7下测试代码是符合你的要求的. 并不需要空格.
    procedure TForm1.Button1Click(Sender: TObject);
    var
      r: TRect;
      s: string;
    begin
      s:= '测试字符串测试字符串测试字符串测试字符串测试字符串测试字符串测试字符串测试字符串';  r.Left:= 0;
      r.Top := 0;
      r.Right := 100;
      r.Bottom:= 100;  Canvas.Rectangle(r);  //画矩形  inc(r.Left, 5);
      inc(r.Top,  5);
      dec(r.Right, 5);
      dec(r.Bottom,5);  SetBkMode(Canvas.Handle, TRANSPARENT);    //设置文字背景透明
      DrawText(Canvas.Handle, PChar(s), Length(s), r, DT_LEFT or DT_WORDBREAK); //在矩形内输出文字并自动换行
    end;