全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2663
推到 Plurk!
推到 Facebook!

image的textout 字體寬高問題

答題得分者是:dllee
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-02 15:45:03 IP:61.220.xxx.xxx 訂閱
我測試ㄧ個字串...假設輸入.台灣兩字會依照下列程式碼去得到其中一個字的寬高.  但用Edit1->Text.SubString(2,1);去擷取一個字之後寬度都會變的蠻小的.. 如果是直接在 Edit4->Text = IntToStr(Image1->Canvas->TextWidth("台")); 就會顯示正常寬度.. 請問如果要如何克服這問題?  如果輸入的是非ansi的字串..該如何正確讓他能畫出來?     我看HELP上的用textout是支援widestring.但還是畫不出來. 請前輩們指點..     <textarea rows="15" cols="80">Image1->Canvas->Font->Name = "MS Sans Serif"; Image1->Canvas->Font->Size = 10 Image1->Canvas->TextOutA(0,0,Edit1->Text); Astr = Edit1->Text.SubString(2,1); Edit2->Text = IntToStr(pSize.cx); Edit3->Text = IntToStr(pSize.cy); Edit4->Text = IntToStr(Image1->Canvas->TextWidth(Astr.c_str())); Edit5->Text = IntToStr(Image1->Canvas->TextHeight(Astr.c_str()));</textarea>
編輯記錄
pireer 重新編輯於 2007-07-02 15:46:00, 註解 無‧
pireer 重新編輯於 2007-07-02 17:09:30, 註解 無‧
pireer 重新編輯於 2007-07-03 08:12:54, 註解 無‧
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-02 18:11:02 IP:220.134.xxx.xxx 訂閱
試試  Text.SubString(2,2)
一個中文字的長度是兩個字元而不是一個
------
http://www.ViewMove.com
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-02 18:15:09 IP:61.220.xxx.xxx 訂閱
感謝前輩指點..我之前都抓英文字所以1用習慣忘了中文字要改2..

那在請問一下.第二個問題
非ansi的字串..該如何正確讓他能畫出來?
假設隨意輸入俄文或其他語言的字體.
該怎麼畫在image上



===================引 用 dllee 文 章===================
試試? Text.SubString(2,2)
一個中文字的長度是兩個字元而不是一個
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-02 19:09:50 IP:220.134.xxx.xxx 訂閱
指定字型, 指定 Charset, 若還是不行.... 
等 VCL 支援 unicode 的版本吧,不然要自行判斷現在輸入的是那一個的字,應該不太容易吧(至少我是不會啦 :p),
或看看有沒有其他人有經驗可以回覆一下。
------
http://www.ViewMove.com
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-03 08:11:43 IP:61.220.xxx.xxx 訂閱
我目前 EDIT的元件有支援unicode..
但image的textout 我去看HELP..有寫支援WideString.跟AnsiString兩種.
這樣應該是可以畫出來才對..

但我實際去畫..都是畫出問號 "?"......
有前輩有試過嗎?

dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-03 13:39:51 IP:220.134.xxx.xxx 訂閱
指定的字型不支援您輸入文字的編碼, 自然就是 ? 問號。
內建的 VCL 是不支援 unicode 的,請找第三方元件吧,
再不然就請自行轉碼,轉碼程式在本站就有。請參考:
文字轉碼程式
------
http://www.ViewMove.com
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-03 16:05:43 IP:61.220.xxx.xxx 訂閱
請問前輩...
如果一個字串為 "中文ABC123測試"...
有什麼方法依照TextHeight and TextWidth 所給的寬高.
將這字串轉成ㄧ個WORD陣列的資料格式來儲存..


dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-03 21:22:14 IP:59.105.xxx.xxx 訂閱
將這字串轉成ㄧ個WORD陣列的資料格式來儲存
是什麼意思?要存文字?要存圖?只存字寬與字高?
完全不懂您的意思耶...
------
http://www.ViewMove.com
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-04 08:20:45 IP:61.220.xxx.xxx 訂閱
假設一個字串為 "中文ABC123測試"...
要將每一個字假設16*16 儲存到WORD [1024][16] 陣列中(設最大儲存字數為1024..)

因為要將隨意輸入的字串儲存文字.
所以用IMAGE的TEXTOUT將字畫出來再用下面方法轉成WORD資料.

我目前想到的辦法是用掃描Pixels..如下
Canvas->Pixels[x][y] == clBlack

這樣才能轉成WORD資料..
ㄧ次一個字還是一次可以掃整個字串??
中英文數字同字型同大小但寬度不同.那該如何判斷?
請前輩指點.

編輯記錄
pireer 重新編輯於 2007-07-04 08:22:56, 註解 無‧
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-07-04 21:38:12 IP:59.105.xxx.xxx 訂閱
有些字型固定寬度, 有些不固定, 一個字一個字抓就好啦。
------
http://www.ViewMove.com
系統時間:2024-05-06 4:01:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!