以下这段代码要实现向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中?
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中?
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);
可以使用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 ,这种处理被关闭。
此时不但有内存泄漏。而且还要求达不到。
每一行.