傳給一個TStringList﹐給定一個寬度﹐實現自動分行﹐如何實現﹖ (50分)

  • 主题发起人 主题发起人 dadabox
  • 开始时间 开始时间
D

dadabox

Unregistered / Unconfirmed
GUEST, unregistred user!
我想實現打印自動分行﹐用Printer.Canvas.TextWidth得到的數值﹐如從a-z,1-9加起來的值
為642﹐我的紙才寬580﹐但打在紙上還有剩余﹐說明他們的單元計算不是一樣的。請問各是
什么單位﹐怎么轉換呢﹖大伙兒對于自動分行有什么好的建議﹖我想用MEMO為自己分行﹐免
得我自己來分行﹐但這個寬度也是一個問題﹐不知道該設多少﹖誰有沒有更好的方法或函數﹖
謝謝﹗
 
TextWidth得到的数值是以屏幕象素为单位的!! 分行也可以自己写函数,主要是宽度问题.
可以通过TextHeight来获得字体的高度.从而设置宽度!
 
TextWidth得到的数值是以屏幕象素为单位的,一般情况下是1/96英寸,
针式打印机的分辨率一般是180dpi,即每英寸180点,据此可以换算。
 
打印机的分辨率可用GetDeviceCaps得到,这样可计算得比较准确
 
我要實現自動分行﹐怎么做﹖我想傳一個TString﹐再給一個長度﹐實現自動分行。要是我
自己來判斷很累﹐而且不好區分單詞和漢字。如果用MEMO﹐又慢又不知道設寬度。所以﹐我
想找一個函數或方法﹐哪位有好辦法﹖有源代碼最好﹐實在沒有至少提個思路也行。小弟菜
菜﹐多謝了﹗
 
大伙兒快點來幫忙呀﹗我要傳一個TStringList﹐然后給定一個寬度﹐實現自動分行。最好
是以詞為單位分行﹐而不是字母﹐就像WORD中分行那樣。哪位大俠能提供這類的函數﹖謝謝﹗
 
place a label on your form, setting autosize to be true and caption to be the string you want, then you can get the
width of the string.

 
[8D]本函数返回给定字符串在给定字体和给定宽度下能显示的字符串[^]
function WrapStr(str:String;Canvas:TCanvas;width:integer):String;
var ws : WideString;i,l:integer;
begin
ws := str;
l := Length(ws);
for i := 1 to Length(ws) do
begin
if canvas.TextWidth(copy(ws,1,i))>=width then
begin
l := i;
Break;
end;
end;
Result := Copy(ws,1,l);
end;
 
多謝zhukewen,搞定了。
 
后退
顶部