关于打印中英文混合文本时的换行问题!(300分)

  • 主题发起人 主题发起人 Luis Pater
  • 开始时间 开始时间
to:lhc4000:
1、我原来就做过类似的程序,不过处理还要麻烦。
2、记得是128,怎么会是159了?
3、我只是提供了思路,最后一个判断可以两个,基本可以出来。
4、那个delphi中的函数也是这么求的。
 
to gydldfw:
128以下的肯定是英文字符,但128-159之间的不是汉字字符。
 
to gydldfw:
其实,在实际应用中,你説的128也不会出问题,因为128-159中的字符一般情况下都用不到的。
 
长见识。
对于字符编码的确没有研究,但这种程序关键是区分中英文。
 
回车符放在输出的文本中会出现乱码,想办法吧!反正要替换掉的![:)]
 
你去测试一下,回车的ascii为多少啊?它一般也小于128,用我说的办法应该可以解决。
 
我来偷个懒!不高兴研究算法喽!嘿嘿……看看我这个方法怎么样![:D][:D]
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
dpix:integer;
begin
dpix:=GetDeviceCaps(Printer.Handle,LogPixelsX);
Printer.Canvas.Font.Name:='宋体';
Printer.Canvas.Font.Size:=11;
i:=Printer.Canvas.TextWidth(WIDESTRING('啊人人啊人人啊人人啊人人啊人人啊人人啊人人啊人人啊人人啊人人啊人人啊人人'));
if (i>Round(1400/254*dpix)) then
showmessage('错啦!');
end;

这样就不存在什么长短问题啦!嘿嘿……不过过一会儿还是看一下算法问题!毕竟算法要比懒招好多了![8D][8D]
 
有钱的人总喜欢偷懒,让我们为300分忙个死
 
我在“房地产开发估价管理系统”:http://www.softreg.com.cn/shareware_view.asp?id=/F04B69C2-64F9-4E24-ABA4-F35DEB8990B9/
和“房屋安全鉴定管理系统”:http://yckxzjj.vip.sina.com/delphi/wangyou1.htm
中解决了此问题
 
lhc4000话不能这样说嘛!大家一起研究的嘛![:)][:)]
来!问题还没完呢!中文问题解决了!英文问题出来了!总不能让system变成sys
tem了吧??
嘿嘿……
是不是应该检测该英文单词左右的字数是不是空格??如果后一个空格超过长度了!就截断到前一个??
我不是有钱,我加入大富翁都2年有余了!平时只看的!很少问问题!这么多年的积蓄,难得出来解决以下问题还是不错的嘛![8D]
 
你用什么方法解决问题了?说声吧,让我也知道一下,总会有用得着的一天的。
关于英文的问题,我想你的方法可行。
 
是可以截断英文的,
可以写成sys-
tem
这样在中文,英文的排版中会简单一点.
 
function EnterPrint(Str:WideString;Left,Top,LineLength,tBetween:integer;FontName:String;FontSize:Integer):boolean;
//Str:要输出的字符、Left:左边距、Top:上边距、LineLength:文字长度、tBetween:行间距、FontName:字体、FontName:字号
var
i,A:integer;
HeaderLen,TextLen,LineHeight,dpix:integer;
tStr,HeaderText,copyText,tEnter:WideString;
begin
i:=0;
A:=0;
LineHeight:=0;
TextLen:=Length(Str);
tEnter:=char(13) + char(10);
tStr:=Str;
while A<=Length(Str)do
begin
inc(i);
inc(A);
CopyText:=copy(tStr,i+1,TextLen);
HeaderText:=copy(tStr,1,i);
HeaderLen:=Printer.Canvas.TextWidth(WIDESTRING(HeaderText));
dpix:=GetDeviceCaps(Printer.Handle,LogPixelsX);
Printer.Canvas.Font.Name:=FontName;
Printer.Canvas.Font.Size:=FontSize;
if ((HeaderLen>Round(LineLength/254*dpix)) or (pos(tEnter,HeaderText)<>0)) then
begin
if (pos(tEnter,HeaderText)<>0) then
HeaderText:=Copy(HeaderText,1,Length(HeaderText)-2);
TTextOut(Left,Top+tBetween*LineHeight,WIDESTRING(HeaderText),FontName,FontSize);
inc(LineHeight);
i:=0;
tStr:=copyText;
end;
end;
TTextOut(Left,Top+tBetween*LineHeight,WIDESTRING(HeaderText),FontName,FontSize);
result:=true;
end;

代码写得不好看!呵呵……乱了一点![:)][:)]
今天解决英文排版问题![8D]
 
后退
顶部