2012-07-16 24 views
1

我想盡量減少控件之間的垂直距離以編程方式構造Windows窗體(使用C#)。這涉及適當地設置Height屬性。我怎麼能檢測任何unicode字符有descenders,使用.NET

我發現如果控件的文本沒有包含任何帶有下拉字符的字母(即沒有任何字符j,g,p,q或y),那麼控件Height可以小於當它包含這樣的字母時(如果確實包含帶有下降字母的字母,那麼如果高度不夠,則將下降字符切掉)。

只要語言是英語或英語,它就可以很好地測試任何上述5個字符,但我需要能夠滿足任何語言的要求。

有沒有一種方法,給定一些任意的Unicode字符(也許是一個字體)來確定該Unicode字符是否有下拉?

+1

H̡̫̤̤̣͉̤ͭ̓̓̇͗ơ̯̗̘̮͒̄̈ͤ͡w͓͙͖̥͉̹͎͉͖̳̘͋ͬ̊ͦ̌ͯ̿̔̏ͣ̉̚̕ŏ̸̖̙͈͕̯̮̙̣͓͈͕̯̮̙̣͓͙͔̺͇̗͙͔̺͇̗̤͓̞̫͋ͤ̊͗̓͌ͭ̍̐͒͌ͭ̍̐͒̿̊̇̿̊̇ͩͩ͑̋ͮͥͦ̊̆̊͊͟͜͞͞҉҉̠̦̩͕̆̊͊҉҉̠̦̩͕̟̹͈̺̹̋̅ͯĺ̡̘̹̻̩̩̟̹͈̺̹͋̋̅ͯ͘ĺ̡̢̢̘̹̻̩̩̪͚̖͇̬͍͇͓͈͙͎̬̠͇͎̬̠͇̗̹̝̗̹̝̮̗̩̳̮̗̩̳̮̗̩̳̮̗̩̳̙͉̥̬͙̟̮͕̙͉̥̬͙̟̮͕̙͉̥̬͙̟̮͕̙͉̥̬͙̟̮͕̙͉̥̬͙̟̮͕͋͗ͬ͒̔͋͊̓ͣ̏̿͐ͯ̌ͤ̓̓͐͐͋̌ͤ̓̓͐͐͋̄̌ͧͩ̄̌ͧͩ̾̾̾̾ͤ̌͗ͩͤ̌͗ͩͤ̌͗ͩͤ̌͗ͩͤ̌͗ͩ͘̕̕̕̕̕̕̕͢͢͠͡͡͡͡͡͡͡ – 2012-07-16 12:08:10

回答

1

沒有爲Unicode字符定義的屬性來表示存在下拉字符,它實際上是字形設計的一個特徵,而不是字符。例如,「Q」在許多字體中都有下行字,而「J」在其中有一個。另外,考慮到上下文,你還應該考慮放在字母下面的變音標記,而不僅僅是基本字母的下移。也可能是變音符號以上字母。

因此,您需要閱讀有關字符尺寸的字體信息(如果可用),或者在軟件中暫時繪製字符並測量它們的尺寸。根據經驗,任何低於1.1倍字體大小的行高都會導致某些字符和字體出現問題。使用1(「設置固體」)是不夠的,因爲字符實際上可能超出字體大小。

+0

感謝您的經驗法則。我會嘗試以某種方式到達一些快樂的媒介。 – Peter 2012-07-16 12:59:59

0

在Windows中,您調用GetPath()以獲取包含構成字形字符串的周長或輪廓的每個點的X/Y座標的數組。在數組中搜索最小/最大值,這會得到包含字符串的正方形的正方形。正對字母的邊緣。