最終更新日 2024-09-25
フォントリストやフォントプレビュー
概要
フォント選択ダイアログといったものは、.NETであれば、非常に簡単に呼び出せるため、
特に例は不要でしょう。
ここでは既定のフォントダイアログではなく、「お手製のフォント選択画面」のようなものを作る例となります。

フォントのリストとフォントプレビュー
以下のファイルをfontlist.pyとして保存します。
# coding: cp932
import clr
clr.AddReference("System.Drawing")
clr.AddReference('System.Windows.Forms')
from System.Drawing import Font, FontStyle
from System.Drawing.Text import InstalledFontCollection
from System.Windows.Forms import (Form, Button, BorderStyle, DockStyle,
ListBox, ComboBox, TextBox, StatusBar)
fontCollection = InstalledFontCollection()
fonts = [f for f in fontCollection.Families]
f = Form()
f.Text = 'フォントプレビューワー'
f.Width = 800
f.Height = 600
lb = ListBox()
lb.Width = 230
for font in fonts:
lb.Items.Add(font.Name)
lb.SelectedIndex = 0
cbSizes = ComboBox()
for i in range(9, 49):
cbSizes.Items.Add(str(i))
cbSizes.Text = '30'
cbStyles = ComboBox()
for s in ['Regular', 'Bold', 'Italic']:
cbStyles.Items.Add(s)
cbStyles.Text = 'Regular'
tb = TextBox()
tb.Font = Font(fonts[0], 30)
tb.Multiline = True
tb.Text = u"Hello World!\r\nこんにちわ!"
sb = StatusBar()
sb.Text = 'Found %d installed fonts' % len(fonts)
# Layout:
lb.Dock = DockStyle.Left
tb.Dock = DockStyle.Fill
cbSizes.Dock = DockStyle.Top
cbStyles.Dock = DockStyle.Top
sb.Dock = DockStyle.Bottom
f.Controls.Add(tb)
f.Controls.Add(cbStyles)
f.Controls.Add(cbSizes)
f.Controls.Add(lb)
f.Controls.Add(sb)
f.ActiveControl = lb
# Event handling
def ChangeFont():
try:
tb.Font = Font(fonts[lb.SelectedIndex],
int(cbSizes.Text),
getattr(FontStyle, cbStyles.Text))
sb.Text = ''
except Exception, e:
sb.Text = unicode(e)
lb.SelectedIndexChanged += lambda sender, args: ChangeFont()
cbSizes.TextChanged += lambda sender, args: ChangeFont()
cbStyles.TextChanged += lambda sender, args: ChangeFont()
try:
f.ShowDialog()
finally:
hm.Macro.Var["$SelectFontName"] = tb.Font.Name
hm.Macro.Var["$SelectFontSize"] = tb.Font.Size.ToString()
hm.Macro.Var["$SelectFontStyle"] = tb.Font.Style.ToString()
f.Close()
.macからの呼び出し
フォントのプレビューフォームのウィンドウを閉じると、フォント名を取得するという単純なものとなります。
実際の制作では、プレビューフォームのウィンドウには「OK」ボタンなどを付けた方がよいでしょう。
#PY = loaddll( hidemarudir + "\\" + "hmPy.dll" ); #_ = dllfuncw(#PY, "DoFile", currentmacrodirectory + "\\fontlist.py" ); message($SelectFontName + " | " + $SelectFontSize + " | " + $SelectFontStyle); freedll(#PY);