列印時,怎樣讓MEMO中的內容自動分行,高手請指教。 我在輸入MEMO中的內容時按CRTL+ENTER讓其內容分成幾行,現要列印時卻列印在同一行中,我想讓列印出來的內容與我輸入時的一樣分成幾行,也就碰到一個ENTER就分一行,請教高手。謝謝! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 csdn論壇這段時間的高手都到那去了? 可以自己加入#13来控制。此问题好像一直没有好的方法解决。另外给你一个自己写的换行的东西,不是很稳定。str是要打印的内容,width是行宽。function newline(str: string; width: integer): string;var buf, resultBuf, estr: wideString; str1, str2, cstr: string; cnum, enum, i, j, mnum: integer;label resultlab;begin //转成宽字符后可以不用判断汉字 buf := str; resultBuf := ''; //初始化结果 while Length(buf) > width do begin estr := copy(buf, 1, width); Delete(buf, 1, width); ///////////////////////////如有数字,则从后面截取字//////////////////////////////////// mnum:=0; cstr := estr; cnum := length(cstr) - length(estr); enum := 2 * length(estr) - length(cstr); if trunc(cnum + enum / 2) <= width then begin if enum mod 2 = 1 then begin /////////////////////空格不能插入数字中/////////////////////////////////// str1:=''; str1 := Copy(estr, Length(estr)-mnum, 1); while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) do begin mnum:=mnum+1; str1 := Copy(estr, Length(estr)-mnum, 1); end; enum := enum + 1; insert(' ',estr,length(estr)-mnum) //estr := estr + ' '; end; if trunc(cnum + enum / 2) < width then begin estr := estr + copy(buf, 1, (width - trunc(cnum + enum / 2))); Delete(buf, 1, (width - trunc(cnum + enum / 2))); end; end; /////////////////////处理数字/////////////////////// str1 := ''; str2 := ''; mnum := 0; str1 := Copy(estr, Length(estr), 1); str2 := copy(buf, 1, 1); while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) and (((str2 >= '0') and (str2 <= '9')) or (str2 = '.')) do begin mnum := mnum + 1; estr := estr + str2; delete(buf, 1, 1); str1:=''; str2 := ''; str1 := Copy(estr, Length(estr), 1); str2 := copy(buf, 1, 1); end; cstr := estr; cnum := length(cstr) - length(estr); enum := 2 * length(estr) - length(cstr); if mnum > (width - cnum - trunc(enum / 2)) then begin str1 := ''; str1 := Copy(estr, Length(estr), 1); while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) do begin buf :=copy(estr, Length(estr), 1)+ buf; estr := copy(estr, 1, Length(estr) - 1); str1 := ''; str1 := Copy(estr, Length(estr), 1); end; goto resultlab; end else begin estr := estr + copy(buf, 1, mnum); delete(buf, 1, mnum); end; {/////处理标点符号////////////////////////////////////// } str1 := ''; str1 := copy(buf, 1, 1); if (str1 = ',') or (str1 = ',') or (str1 = '。') or (str1 = '.') or (str1 = '?') or (str1 = '?') or (str1 = '!') or (str1 = '!') or (str1 = ';') or (str1 = ';') or (str1 = '、') or (str1 = '》') or (str1 = '”') or (str1 = '"') or (str1 = ')') or (str1 = ')') then begin estr := Copy(estr, 1, Length(estr)) + str1; delete(buf, 1, 1); end; { /////////////////////加空格////////////////////////////////////////// } resultlab: cstr := estr; cnum := length(cstr) - length(estr); //汉字个数 enum := 2 * length(estr) - length(cstr); //数字个数 if trunc(cnum + enum / 2) < width then begin j := 6; for i := 1 to (width - trunc(cnum + enum / 2)) do begin //////////////////空格不能插入数字中//////////////////////// str1 := ''; str1 := copy(estr, j - 1, 1); while (j = 1) or ((str1 >= '0') and (str1 <= '9')) or (str2 = '.') do //判断是否数字 begin j := j + 2; str1 := ''; str1 := copy(estr, j - 1,1); end; insert(' ', estr, j); j := j + 2; end; end; resultBuf := resultBuf + estr + #13#10; end; resultBuf := resultBuf + buf; Result := resultBuf;end; 请教一个listbox的问题 一些三层架构的问题 ado连sqlserver程序关闭是否会自动释放 100分求图片处理。Delphi如何得到图片的素描效果。。不够我再加 请教大家:如何把.DCU文件反编译回源代码?谢谢。 如何在treeview中判断当前节点有没有子结点??? 紧急求助,关于DBNavigator控件的问题 Delphi , MO, MOIMS, 开发WebGis中遇到的问题 怎样锁定表中的一条记录? Very 菜的问题——怎样才能启动一个另外的程序? 怎么样写这个函数 请教一个基础问题 FORM与FRAMES有什么区别
另外给你一个自己写的换行的东西,不是很稳定。
str是要打印的内容,width是行宽。
function newline(str: string; width: integer): string;
var
buf, resultBuf, estr: wideString;
str1, str2, cstr: string;
cnum, enum, i, j, mnum: integer;
label resultlab;
begin
//转成宽字符后可以不用判断汉字
buf := str;
resultBuf := ''; //初始化结果
while Length(buf) > width do
begin
estr := copy(buf, 1, width);
Delete(buf, 1, width);
///////////////////////////如有数字,则从后面截取字////////////////////////////////////
mnum:=0;
cstr := estr;
cnum := length(cstr) - length(estr);
enum := 2 * length(estr) - length(cstr);
if trunc(cnum + enum / 2) <= width then
begin
if enum mod 2 = 1 then
begin
/////////////////////空格不能插入数字中///////////////////////////////////
str1:='';
str1 := Copy(estr, Length(estr)-mnum, 1);
while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) do
begin
mnum:=mnum+1;
str1 := Copy(estr, Length(estr)-mnum, 1);
end;
enum := enum + 1;
insert(' ',estr,length(estr)-mnum)
//estr := estr + ' ';
end;
if trunc(cnum + enum / 2) < width then
begin
estr := estr + copy(buf, 1, (width - trunc(cnum + enum / 2)));
Delete(buf, 1, (width - trunc(cnum + enum / 2)));
end;
end;
/////////////////////处理数字///////////////////////
str1 := '';
str2 := '';
mnum := 0;
str1 := Copy(estr, Length(estr), 1);
str2 := copy(buf, 1, 1);
while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.'))
and (((str2 >= '0') and (str2 <= '9')) or (str2 = '.')) do
begin
mnum := mnum + 1;
estr := estr + str2;
delete(buf, 1, 1);
str1:='';
str2 := '';
str1 := Copy(estr, Length(estr), 1);
str2 := copy(buf, 1, 1);
end;
cstr := estr;
cnum := length(cstr) - length(estr);
enum := 2 * length(estr) - length(cstr);
if mnum > (width - cnum - trunc(enum / 2)) then
begin
str1 := '';
str1 := Copy(estr, Length(estr), 1);
while (((str1 >= '0') and (str1 <= '9')) or (str1 = '.')) do
begin
buf :=copy(estr, Length(estr), 1)+ buf;
estr := copy(estr, 1, Length(estr) - 1);
str1 := '';
str1 := Copy(estr, Length(estr), 1);
end;
goto resultlab;
end
else
begin
estr := estr + copy(buf, 1, mnum);
delete(buf, 1, mnum);
end;
{/////处理标点符号////////////////////////////////////// }
str1 := '';
str1 := copy(buf, 1, 1);
if (str1 = ',') or (str1 = ',') or (str1 = '。') or (str1 = '.') or (str1 = '?') or (str1 = '?')
or (str1 = '!') or (str1 = '!') or (str1 = ';') or (str1 = ';') or (str1 = '、') or (str1 = '》')
or (str1 = '”') or (str1 = '"') or (str1 = ')') or (str1 = ')') then
begin
estr := Copy(estr, 1, Length(estr)) + str1;
delete(buf, 1, 1);
end;
{ /////////////////////加空格////////////////////////////////////////// }
resultlab: cstr := estr;
cnum := length(cstr) - length(estr); //汉字个数
enum := 2 * length(estr) - length(cstr); //数字个数
if trunc(cnum + enum / 2) < width then
begin
j := 6;
for i := 1 to (width - trunc(cnum + enum / 2)) do
begin
//////////////////空格不能插入数字中////////////////////////
str1 := '';
str1 := copy(estr, j - 1, 1);
while (j = 1) or ((str1 >= '0') and (str1 <= '9')) or (str2 = '.') do //判断是否数字
begin
j := j + 2;
str1 := '';
str1 := copy(estr, j - 1,1);
end;
insert(' ', estr, j);
j := j + 2;
end;
end;
resultBuf := resultBuf + estr + #13#10;
end;
resultBuf := resultBuf + buf;
Result := resultBuf;
end;