取得字串儲存長度 |
答題得分者是:brook
|
blue
中階會員 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
|
it1506
初階會員 發表:33 回覆:89 積分:49 註冊:2011-02-16 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
blue
中階會員 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
Hi,感謝 Max5020及Pcplayer99先進的指導:
小弟最主要問題是因為要列印報表(因沒有標準格式,只能用 PrinterCanvas輸出, 偏偏客戶要的字型英/中並非1/2字寬....(好像一般字也是),但卻要對齊, 只能一個字一個字輸出,所以需要知道輸出的字所佔的"寬"度, 謝謝! ===================引 用 pcplayer99 文 章=================== 你要这个长度来干什么? 在 Unicode 系统里面,直接这样转换没有意义。要转换,用 TEncoding.Convert 或者 TEncoding 的类似方法。但实际上这个长度,并不是真正的 Byte 数。 |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
這個問題也困擾了我很久,還是覺得用中文字的第一字元大於127的方式比較正確.
[code cpp] 請在此區域輸入程式碼 //Unicode長度幾個Bytes int GetBytesOfUnicodeString(UnicodeString uu) { // return ByteLength(uu); // return AnsiString(uu).Length(); /* //"上?指?"; int rc = 0; HDC c = CreateDC("DISPLAY", "", "", NULL); if (c) { TCanvas *a = new TCanvas(); if (a) { a->Handle = c; a->Font->Name="Courier"; rc = a->TextWidth(uu)/a->TextWidth("A"); delete a; } DeleteDC(c); } return rc; */ int rc = 0; for (int i = 1; i <= uu.Length(); i++) { if (uu[i] > 127) rc += 2; else rc++; } return rc; } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |