線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2179
推到 Plurk!
推到 Facebook!

自製類 measureText 方法 - 使用 Delphi / C++ Builder

答題得分者是:aftcast
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-10-18 00:13:54 IP:111.249.xxx.xxx 訂閱

自製類 measureText 方法 - 使用 Delphi / C Builder


不知道可以應用的場合有哪些 (笑)

<style type="text/css"> qtl { position: absolute; border: 1px solid #cccccc; -moz-border-radius: 5px; opacity: 0.2; line-height: 100%; z-index: 999; direction: ltr; } qtl:hover,qtl.open { opacity: 1; } qtl,qtlbar { height: 22px; } qtlbar { display: block; width: 100%; background-color: #cccccc; cursor: move; } qtlbar img { border: 0; padding: 3px; height: 16px; width: 16px; cursor: pointer; } qtlbar img:hover { background-color: #aaaaff; } qtl>iframe { border: 0; height: 0; width: 0; } qtl.open { height: auto; } qtl.open>iframe { height: 200px; width: 300px; } </style><qtl > <iframe name="content"></iframe>
編輯記錄
GrandRURU 重新編輯於 2012-10-17 19:21:25, 註解 無‧
GrandRURU 重新編輯於 2012-10-17 20:12:15, 註解 增加 C++ Builder 程式段‧
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-10-19 09:17:17 IP:180.168.xxx.xxx 未訂閱
 這功能很重要

當您要限制寬度列印/文字入圖檔時,
必須先計算文字產生後的寬度,然後再判斷....
例如
1. 要把一串文字,放到圖片中,文字不能被切除
A. 寬度壓縮
B. 折行


------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-10-19 10:29:52 IP:59.120.xxx.xxx 訂閱
謝謝Andy8c大大分享經驗

我在想如果是TImage的話,它也有Width和Height
會出現Andy大所說的情況嗎?

===================引 用 ANDY8C 文 章===================
這功能很重要

當您要限制寬度列印/文字入圖檔時,
必須先計算文字產生後的寬度,然後再判斷....
例如
1. 要把一串文字,放到圖片中,文字不能被切除
A. 寬度壓縮
B. 折行


<style type="text/css"> qtl { position: absolute; border: 1px solid #cccccc; -moz-border-radius: 5px; opacity: 0.2; line-height: 100%; z-index: 999; direction: ltr; } qtl:hover,qtl.open { opacity: 1; } qtl,qtlbar { height: 22px; } qtlbar { display: block; width: 100%; background-color: #cccccc; cursor: move; } qtlbar img { border: 0; padding: 3px; height: 16px; width: 16px; cursor: pointer; } qtlbar img:hover { background-color: #aaaaff; } qtl>iframe { border: 0; height: 0; width: 0; } qtl.open { height: auto; } qtl.open>iframe { height: 200px; width: 300px; } </style><qtl > <iframe name="content"></iframe>
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-10-19 22:02:50 IP:180.168.xxx.xxx 未訂閱
 一樣要己算
例如:
Timage -> 120x 24 上要畫上(貼上) 文字,內容是 A1B2C34
如果字體是 新細明體,大小是 24 (類似 WORD 的大小描述)

那 A1B2C34 在圖檔上的寬度是多少? 字體大小不要改變,會不會超出 Timage 的範圍.

如果字串 改為 "字體1大小2" , 寬度又是多少? 字體大小不要改變,會不會超出 Timage 的範圍.

這些都要算, 不同的需求會有不同的考量.




------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-10-21 15:33:22 IP:72.13.xxx.xxx 未訂閱
我是拿來做成「可以調整成最適欄寬」的 DBGrid
雙擊 title,該欄依照目前顯示文字調整為最適欄寬
另寫一個方法,將所有欄依照目前顯示文字調整為最適欄寬
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-10-21 22:14:08 IP:114.32.xxx.xxx 訂閱
這個應用非常的多,在led上的跑馬燈也會用到。

不過,個人建議你回傳TSize會比TPoint更直覺,啊不然有點小誤會的啦!


===================引 用 GrandRURU 文 章===================

自製類 measureText 方法 - 使用 Delphi / C Builder


不知道可以應用的場合有哪些 (笑)

<style type="text/css"> qtl { position: absolute; border: 1px solid #cccccc; -moz-border-radius: 5px; opacity: 0.2; line-height: 100%; z-index: 999; direction: ltr; } qtl:hover,qtl.open { opacity: 1; } qtl,qtlbar { height: 22px; } qtlbar { display: block; width: 100%; background-color: #cccccc; cursor: move; } qtlbar img { border: 0; padding: 3px; height: 16px; width: 16px; cursor: pointer; } qtlbar img:hover { background-color: #aaaaff; } qtl>iframe { border: 0; height: 0; width: 0; } qtl.open { height: auto; } qtl.open>iframe { height: 200px; width: 300px; } </style><qtl > <iframe name="content"></iframe>
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2012-10-22 08:43:57 IP:59.120.xxx.xxx 訂閱
酷!原來還有TSize,這是我第一次見到它!晚點我再來改。

想不到還有這麼多的應用方式,希望這個函式不會減低諸位的工作價值,不然我就成罪人囉 (光速逃)

===================引 用 aftcast 文 章===================
這個應用非常的多,在led上的跑馬燈也會用到。

不過,個人建議你回傳TSize會比TPoint更直覺,啊不然有點小誤會的啦!
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2012-10-22 22:44:33 IP:210.66.xxx.xxx 未訂閱
原來大俠也有在玩這些......
個人心得,DELPHI 除資料庫以外,說實在的,能做的事還不少,但要努力精研....
感恩
===================引 用 aftcast 文 章===================
這個應用非常的多,在led上的跑馬燈也會用到。

不過,個人建議你回傳TSize會比TPoint更直覺,啊不然有點小誤會的啦!

<style type="text/css"> qtl { position: absolute; border: 1px solid #cccccc; -moz-border-radius: 5px; opacity: 0.2; line-height: 100%; z-index: 999; direction: ltr; } qtl:hover,qtl.open { opacity: 1; } qtl,qtlbar { height: 22px; } qtlbar { display: block; width: 100%; background-color: #cccccc; cursor: move; } qtlbar img { border: 0; padding: 3px; height: 16px; width: 16px; cursor: pointer; } qtlbar img:hover { background-color: #aaaaff; } qtl>iframe { border: 0; height: 0; width: 0; } qtl.open { height: auto; } qtl.open>iframe { height: 200px; width: 300px; } </style><qtl > <iframe name="content"></iframe>
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
leveon
資深會員


發表:29
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2012-10-23 09:48:11 IP:118.165.xxx.xxx 訂閱
 謝謝分享 
之前計算固定寬度下
能裝下最大的字的Size也是利用類似的做法

var
TextWidth:integer;
begin
Label1.Font.Size := 36;
Label1.Font.Name := '@王漢宗特明體繁';
TextWidth := Label1.Canvas.TextWidth(Label1.Caption);
showmessage(inttostr(TextWidth));

jcjroc
高階會員


發表:21
回覆:276
積分:114
註冊:2002-09-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2012-10-23 11:21:30 IP:59.124.xxx.xxx 訂閱
好像只能用在 Desktop dc 喔!!!

這功能我通常是用GetTextExtentPoint完成
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2012-10-23 15:37:24 IP:114.32.xxx.xxx 訂閱
看一下graphics.pas :

function TCustomCanvas.TextWidth(const Text: string): Integer;
begin
Result := TextExtent(Text).cX;
end;
function TCanvas.TextExtent(const Text: string): TSize;
begin
RequiredState([csHandleValid, csFontValid]);
Result.cX := 0;
Result.cY := 0;
Windows.GetTextExtentPoint32(FHandle, Text, Length(Text), Result);
end;


所以? 一樣的啦! :p 當然GetTextExtentPoint32是根

===================引 用 jcjroc 文 章===================
好像只能用在 Desktop dc 喔!!!

這功能我通常是用GetTextExtentPoint完成
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2012-10-25 19:33:55 IP:111.249.xxx.xxx 訂閱
讚的啦!

諸位大師法力真是太高強了!

分數都不知道要給哪位了!

===================引 用 aftcast 文 章===================
看一下graphics.pas :

function TCustomCanvas.TextWidth(const Text: string): Integer;
begin
Result := TextExtent(Text).cX;
end;
function TCanvas.TextExtent(const Text: string): TSize;
begin
RequiredState([csHandleValid, csFontValid]);
Result.cX := 0;
Result.cY := 0;
Windows.GetTextExtentPoint32(FHandle, Text, Length(Text), Result);
end;


所以? 一樣的啦! :p 當然GetTextExtentPoint32是根

===================引 用 jcjroc 文 章===================
好像只能用在 Desktop dc 喔!!!

這功能我通常是用GetTextExtentPoint完成
系統時間:2017-10-23 17:30:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!