為什麼輸入中文所出現結果是亂碼? |
尚未結案
|
Drake
一般會員 發表:3 回覆:3 積分:1 註冊:2003-08-12 發送簡訊給我 |
底下是我在討論區查尋到的程式碼
原本是Delphi,我轉成BCB
確輸入中文時會出現亂碼
其於都正常,why???
我show在Image上的字如何成正比率的放大?
也就是我抓到1個點(pixel值)要變成4個點(也就是放大4倍)
int i, xPos, iTxtWidth; String str, sfont; TLogFont lf; sfont = ComboBox1->Text;//"新細明體", "標楷體"; str = Edit1->Text.c_str(); GetObject(Form1->Font->Handle, sizeof(TLogFont), &lf); try { i = 1; xPos = 0; while (i <= str.Length()) { if(IsDBCSLeadByte(Byte(str[i]))) { if(ComboBox3->ItemIndex == 0) { lf.lfWidth = 24; lf.lfHeight = 24; } else if(ComboBox3->ItemIndex == 1) { lf.lfWidth = 16; lf.lfHeight = 16; } else { lf.lfWidth = 24; lf.lfHeight = 24; } StrPCopy(lf.lfFaceName, sfont); lf.lfEscapement = 0; // 這行不可 mark 掉 //lf.lfOrientation = 900; // 字轉 90 度(這行可要可不要,要的時候值須與 lfEscapement 相同) lf.lfItalic = 0; // 0 正常 1:斜體 Image1->Canvas->Font->Handle = CreateFontIndirect(&lf); Image1->Canvas->Font->Color = clRed; Image1->Canvas->TextOut(xPos, 0, str[i] str[i 1]); // y 座標從最底層開始畫,才不會轉了 90 度後,字都看不見了 iTxtWidth = Image1->Canvas->TextWidth(str[i] str[i 1]); i = 2; } else { if(ComboBox3->ItemIndex == 0) { lf.lfWidth = 24; lf.lfHeight = 24; } else if(ComboBox3->ItemIndex == 1) { lf.lfWidth = 12; lf.lfHeight = 8; } else { lf.lfWidth = 24; lf.lfHeight = 24; } //lf.lfFaceName = "Arial"; StrPCopy(lf.lfFaceName, ComboBox1->Text); lf.lfEscapement = 0; // 這行不拿掉 //lf.lfOrientation = 0; // 這行可拿掉 lf.lfItalic = 0; Image1->Canvas->Font->Handle = CreateFontIndirect(&lf); Image1->Canvas->Font->Color = clRed; Image1->Canvas->TextOut(xPos, 0, str[i]); iTxtWidth = Image1->Canvas->TextWidth(str[i]); i ; } xPos = xPos iTxtWidth; } } catch (...) {}發表人 - drake 於 2005/03/24 15:22:09 發表人 - drake 於 2005/03/24 15:23:20 |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 底下是我在討論區查尋到的程式碼 原本是Delphi,我轉成BCB 確輸入中文時會出現亂碼 其於都正常,why??? 我show在Image上的字如何成正比率的放大? 也就是我抓到1個點(pixel值)要變成4個點(也就是放大4倍)int i, xPos, iTxtWidth; String str, sfont; TLogFont lf; sfont = ComboBox1->Text;//"新細明體", "標楷體"; str = Edit1->Text.c_str(); GetObject(Form1->Font->Handle, sizeof(TLogFont), &lf); try { i = 1; xPos = 0; while (i <= str.Length()) { if(IsDBCSLeadByte(Byte(str[i]))) { if(ComboBox3->ItemIndex == 0) { lf.lfWidth = 24; lf.lfHeight = 24; } else if(ComboBox3->ItemIndex == 1) { lf.lfWidth = 16; lf.lfHeight = 16; } else { lf.lfWidth = 24; lf.lfHeight = 24; } StrPCopy(lf.lfFaceName, sfont); lf.lfEscapement = 0; // 這行不可 mark 掉 //lf.lfOrientation = 900; // 字轉 90 度(這行可要可不要,要的時候值須與 lfEscapement 相同) lf.lfItalic = 0; // 0 正常 1:斜體 Image1->Canvas->Font->Handle = CreateFontIndirect(&lf); Image1->Canvas->Font->Color = clRed; Image1->Canvas->TextOut(xPos, 0, str[i] + str[i+1]); // y 座標從最底層開始畫,才不會轉了 90 度後,字都看不見了 iTxtWidth = Image1->Canvas->TextWidth(str[i] + str[i+1]); i += 2; } else { if(ComboBox3->ItemIndex == 0) { lf.lfWidth = 24; lf.lfHeight = 24; } else if(ComboBox3->ItemIndex == 1) { lf.lfWidth = 12; lf.lfHeight = 8; } else { lf.lfWidth = 24; lf.lfHeight = 24; } //lf.lfFaceName = "Arial"; StrPCopy(lf.lfFaceName, ComboBox1->Text); lf.lfEscapement = 0; // 這行不拿掉 //lf.lfOrientation = 0; // 這行可拿掉 lf.lfItalic = 0; Image1->Canvas->Font->Handle = CreateFontIndirect(&lf); Image1->Canvas->Font->Color = clRed; Image1->Canvas->TextOut(xPos, 0, str[i]); iTxtWidth = Image1->Canvas->TextWidth(str[i]); i++; } xPos = xPos + iTxtWidth; } } catch (...) {} Drake 你好: (1)請善用本站的搜尋功能,相關主題已經有現成的參考資料 (> < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
Drake
一般會員 發表:3 回覆:3 積分:1 註冊:2003-08-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |