向一个memo中输入文字(包括数字,标点,汉字)怎么实现标点不能在一个新行的最前面,数字不能分开,而且每一行对齐,打印控件是qrrichtext,而且qrrichtext中每一行汉子的个数有时会是30个汉子,有时会是28个汉子。
解决方案 »
- 自动填写网页的程序,目前遇到的问题
- 加班暂告一段落,散分
- 新手问:关于UDPclient和UDPserver的问题?急!!
- 很怕用控件,因为做安装盘不知该怎么加相关东西,帮我看一下
- 如何快速把数组中的数据写入数据库?
- 哪位能够提供图标制作工具Axialis IconWorkshop 5.0的注册码?非常感谢!
- 怎样判断ServerSocket有连接?
- 超级交互图形开发包--Visual Graph
- 为什么在一个窗口里面不能使用form.show显示另外一个窗口阿
- 刚才查看了有关全局变量的提问,看来在delphi里并没有真正的全局变量!
- 问题怪啊,大家看看!!
- 我在目录中查找指定文件出现以下错误
qrrichtext1.lines.clear;
if length(mre1.Text) > 600 then
begin
//回车
str := enterline(mre1.Text, 30);
qrrichtext1.Font.Size := 14;
end
else
begin
str := enterline(mre1.Text, 28);
qrrichtext1.Font.Size := 15;
end; qrrichtext1.Lines.Add(str);
enterline函数:
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;{=============================================================================}
{=============================================================================}
//处理回车
{=============================================================================}function enterline(str: string; width: integer): string;
var
ls_len: integer;
strn, strf, ls_str: string;
begin
result := '';
strn := str;
ls_len := pos(#13#10, strn);
while ls_len > 0 do
begin
strf := copy(strn, 1, ls_len - 1) + #13#10;
delete(strn, 1, ls_len + 1);
ls_len := pos(#13#10, strn);
ls_str := ls_str + newline(strf, width);
result := ls_str;
end;
result := result + newline(strn, width);
end;
{=============================================================================}
//处理回车
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;{=============================================================================}
{=============================================================================}
//处理回车
{=============================================================================}function enterline(str: string; width: integer): string;
var
ls_len: integer;
strn, strf, ls_str: string;
begin
result := '';
strn := str;
ls_len := pos(#13#10, strn);
while ls_len > 0 do
begin
strf := copy(strn, 1, ls_len - 1) + #13#10;
delete(strn, 1, ls_len + 1);
ls_len := pos(#13#10, strn);
ls_str := ls_str + newline(strf, width);
result := ls_str;
end;
result := result + newline(strn, width);
end;
{=============================================================================}
//处理回车
qrrichtext1.lines.clear;
if length(mre1.Text) > 600 then
begin
//回车
str := enterline(mre1.Text, 30);
qrrichtext1.Font.Size := 14;
end
else
begin
str := enterline(mre1.Text, 28);
qrrichtext1.Font.Size := 15;
end; qrrichtext1.Lines.Add(str);
之后预览打印,你可以试试