读书人

打印中英文和数字混合的字符串,怎么等

发布时间: 2012-04-03 12:38:19 作者: rapoo

打印中英文和数字混合的字符串,如何等宽换行问题
使用 printer.canvas.textout(x,y,str);
例如打印地址,一行只允许打印10个汉字.
str:='上海市浦东区某某路某某小区A单元B区1幢102室';

打印出来的结果为:

上海市浦东区某某路某
某路某某小区A单元B
区1幢102室

如果遇到"102"等连在一起的串,不要分开.

如何写个函数.请指教~

[解决办法]
rocedure setprint(pagesize:tpagesize;width,height:variant;orientation:tprinterorientation);
var
device: array[0..255> of char;
driver: array[0..255> of char;
port: array[0..255> of char;
hdmode: thandle;
pdmode: pdevmode;
begin
//设置打印机
try
printer.printerindex := printer.printerindex;
printer.getprinter(device, driver, port, hdmode);
if hdmode <> 0 then
begin
pdmode := globallock(hdmode);
if pdmode <> nil then
begin
if pagesize=custom then
begin
//设定自定义纸张
pdmode^.dmfields := pdmode^.dmfields or
dm_papersize or
dm_paperwidth or
dm_paperlength;



pdmode^.dmpapersize := 0;
pdmode^.dmpaperwidth:= width*10 ;
pdmode^.dmpaperlength:=height*10;
end
else
begin
//设定纸张类型
pdmode^.dmfields := pdmode^.dmfields or
dm_papersize ;
if pagesize=a3 then pdmode^.dmpapersize := dmpaper_a3;
if pagesize=a4 then pdmode^.dmpapersize := dmpaper_a4;
if pagesize=a5 then pdmode^.dmpapersize := dmpaper_a5;
if pagesize=b4 then pdmode^.dmpapersize := dmpaper_b4;
if pagesize=b5 then pdmode^.dmpapersize := dmpaper_b5;
if pagesize=csheet then pdmode^.dmpapersize := dmpaper_csheet;
if pagesize=executive then pdmode^.dmpapersize := dmpaper_executive;
if pagesize=letter then pdmode^.dmpapersize:= dmpaper_letter;
end;
printer.orientation:=orientation;
globalunlock(hdmode);
end;
end ;
printer.printerindex := printer.printerindex;
except
showmessage('没有默认选择打印机,或默认打印机不可使!');
exit;
end;
end;
你可以换下纸张格式看看
[解决办法]
路过。。。顶下。。
[解决办法]
写个字符串处理的函数吧
从第一个字逐个计数到10插入回车(#13#10),如果遇到的不是汉字的,比如英文单词:若其长度超过的就提前换行,不然继续。
比如:
汉字汉字汉字abcdefgh //不换行,正好10个汉字

汉字汉字汉字汉字ALongWord //换行,变成:
汉字汉字汉字汉字
ALongWord

读书人网 >.NET

热点推荐