フォント選択ダイアログといったものは、.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()
フォントのプレビューフォームのウィンドウを閉じると、フォント名を取得するという単純なものとなります。
実際の制作では、プレビューフォームのウィンドウには「OK」ボタンなどを付けた方がよいでしょう。
#PY = loaddll( hidemarudir + "\\" + "hmPy.dll" ); #_ = dllfuncw(#PY, "DoFile", currentmacrodirectory + "\\fontlist.py" ); message($SelectFontName + " | " + $SelectFontSize + " | " + $SelectFontStyle); freedll(#PY);