以下这段代码要实现向BMP中写入若干行文字   i1:=RichEdit1.lines.count;
  for i:=0  to  (i1-1)  do
  begin
  s1:=RichEdit1.lines.strings[i];
  bmp := TBitmap.Create;
  bmp.LoadFromFile('c:\delphi_wallpaper1024.bmp') ;
  bmp.Canvas.Brush.Style := bsClear;
  bmp.Canvas.Font.Color := clRed; //这里设置字体属性;
  bmp.Canvas.Font.Size :=20;
  bmp.Canvas.TextOut(800, 50+i*25, s1); //X, Y是文字输出的坐标信息;        
  bmp.SaveToFile('c:\delphi_wallpaper1024a.bmp') ;
  FreeAndNil(bmp);
  end;这段代码执行后只能将RichEdit1中最后一行的内容写入到BMP中,请问这是为什么,如何才能将RichEdit1中的多行内容全部分行写入到BMP中?

解决方案 »

  1.   


      i1:=RichEdit1.lines.count;
      bmp := TBitmap.Create;
      bmp.LoadFromFile('c:\delphi_wallpaper1024.bmp') ;
      bmp.Canvas.Brush.Style := bsClear;
      bmp.Canvas.Font.Color := clRed; //这里设置字体属性;
      bmp.Canvas.Font.Size :=20;
      for i:=0  to  (i1-1)  do
      begin
        s1:=RichEdit1.lines.strings[i];
        bmp.Canvas.TextOut(800, 50+i*25, s1); //X, Y是文字输出的坐标信息;
      end;
      bmp.SaveToFile('c:\delphi_wallpaper1024a.bmp') ;
      FreeAndNil(bmp);
      

  2.   

    搂住的代码每次都覆盖了BMP,所以不行。楼上的代码可行,但是遇到某行很长的话,可能输出就会有问题了。
     
    可以使用API函数 DrawText 进行输出。函数具体说明见:http://baike.baidu.com/view/1023733.htm
     
    例如:
      DrawText(bmp.Canvas.Handle, PChar(RichEdit1.Lines.Text), -1, _rect, DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
     
    以上代码的解释:
     
      变量 bmp 是 TBitmap 类型,变量 _rect 是 TRect 类型,范围可以是你的 bmp 的大小,后面是指定格式化正文的方法,左对齐、自动换行和关闭前缀字符的处理。通常 DrawText 解释助记前缀字符,& 为给其后的字符加下划线,解释 && 为显示单个 & 。指定 DT_NOPREFIX ,这种处理被关闭。
      

  3.   

    楼主的bmp创建了多次,每次都重新加载了位图,然后写入数据,但是bmp却是在循环之后保存了一次。
    此时不但有内存泄漏。而且还要求达不到。
      

  4.   

    创建新图或加装图片,然后把RichEdit1的Lines在图片中循环画
    每一行.