How to | .NET/Link を使ってユーザインターフェースを作成する方法
.NET/Link を使うと,.NETの型をWolfram言語から直接呼び出すことによって,高度なユーザインターフェースを書くことができる..NET/Link では,Wolfram言語においてプログラムを書いている場合と同じように,一度に1行あるいは数行のコードを追加しながらそれを評価することが可能である.このため.NET/Link は,ユーザインターフェースを実行中に試してみることができる非常に強力な開発環境であると言える.
.NET/Link(Windowsのプラットフォーム上でのみロードすることが可能)を使うにはまず .NET/Link パッケージをロードする必要がある:
Needs["NETLink`"]InstallNETを使って.NETランタイムを起動する:
InstallNET[];まずWindowsフォーム,つまり「ウィンドウ」を作成することから始める.このようなフォームにはメニュー等のコントロールを加えることができる:
myform = NETNew["System.Windows.Forms.Form"];ShowNETWindow[myform];これでフォームが表示されるようになった.幅,高さ,タイトルについて以下の特性を設定するとどうなるかを見てみよう:
myform@Width = 500;myform@Height = 400;myform@Text = "Rich Text Processor";C#やVisual Basicでの場合と同じように,.NETの標準特性を設定したわけであるが,C#やVisual Basicのプログラミング言語と違って,変更はすぐにウィンドウに現れる.
次にリッチテキスト(RTF)ボックスを作成して,テキストを入力,表示する.これは後でフォームに加えられる:
myrichtextbox = NETNew["System.Windows.Forms.RichTextBox"];そのデフォルトのフォントファミリとフォントサイズを設定する:
myrichtextbox@Font = NETNew["System.Drawing.Font", "Verdana", 12];今度はRTFボックスをフォームにドッキングさせる.
LoadNETType["System.Windows.Forms.DockStyle"];DockStyleをFillに設定して,RTFボックスをフォームの端にドッキングさせる.これによって,フォームの大きさがどのように変更されても,RTFボックスがフォームの中に充填されるようになる:
myrichtextbox@Dock = DockStyle`Fill;myrichtextbox@Parent = myform;
次にメニュー項目をいくつか作成して,これをフォームに加える.
saveas = NETNew["System.Windows.Forms.MenuItem"];
saveas@Text = "Save As...";file = NETNew["System.Windows.Forms.MenuItem"];
file@Text = "File";Save Asのメニュー項目をFileのメニュー項目に加える:
file@MenuItems@AddRange[{saveas}];selectfont = NETNew["System.Windows.Forms.MenuItem"];
selectfont@Text = "Select Font";selecttextcolor = NETNew["System.Windows.Forms.MenuItem"];
selecttextcolor@Text = "Select Text Color";format = NETNew["System.Windows.Forms.MenuItem"];
format@Text = "Format";Select FontとSelect Text Colorのメニュー項目をFormatのメニュー項目に加える:
format@MenuItems@AddRange[{selectfont, selecttextcolor}];メインメニューを作って,FileとFormatのメニュー項目をそれに加える:
mainmenu = NETNew["System.Windows.Forms.MainMenu", {file, format}];myform@Menu = mainmenu;
今度は,イベント(この場合は,特定のメニュー項目をクリックすること)がどのように処理されるかを指定しなければならない.
Save Asのメニュー綱目をクリックすると,リッチテキストかプレーンテキストのドキュメントを保存するファイルブラウザが開く:
AddEventHandler[saveas@Click, SaveAsClick];SaveAsClick[_, _] := (SaveFileDialog = NETNew["System.Windows.Forms.SaveFileDialog"];SaveFileDialog@Title = "Rich Text Format - Save File";
SaveFileDialog@DefaultExt = "rtf";
SaveFileDialog@Filter = "Rich Text Files|*.rtf|Text Files|*.txt";
SaveFileDialog@FilterIndex = 1;LoadNETType["System.Windows.Forms.DialogResult"];If[SaveFileDialog@ShowDialog[] == DialogResult`OK, If[SaveFileDialog@FileName == "", Abort[]];
LoadNETType["System.IO.Path"];ext = ToUpperCase[Path`GetExtension[SaveFileDialog@FileName]];If[ext === ".RTF", myrichtextbox@SaveFile[SaveFileDialog@FileName, NETNew["System.Windows.Forms.RichTextBoxStreamType"]@RichText], LoadNETType["System.IO.StreamWriter"];textwriter = NETNew["System.IO.StreamWriter", SaveFileDialog@FileName];textwriter@Write[myrichtextbox@Text];textwriter@Close[];textwriter = MakeNETObject[Null]]])Select Fontのメニュー項目をクリックすると,テキストが選択されている場合にはWindowsのフォントダイアログが呼び出される:
AddEventHandler[selectfont@Click, selectfontclick];selectfontclick[_, _] := (FontDialog = NETNew["System.Windows.Forms.FontDialog"];FontDialog@Font = myrichtextbox@SelectionFont;LoadNETType["System.Windows.Forms.DialogResult"];If[FontDialog@ShowDialog[] === DialogResult`OK, myrichtextbox@SelectionFont = FontDialog@Font])
同様に,Select Text Colorのメニュー項目をクリックすると,テキストが選択されている場合には,Windowsのカラーダイアログが開く:
AddEventHandler[selecttextcolor@Click, selecttextcolorclick];selecttextcolorclick[_, _] := (ColorDialog = NETNew["System.Windows.Forms.ColorDialog"];ColorDialog@Color = myrichtextbox@SelectionColor;LoadNETType["System.Windows.Forms.DialogResult"];If[ColorDialog@ShowDialog[] === DialogResult`OK, myrichtextbox@SelectionColor = ColorDialog@Color])
これでフォーム内でテキストを入力し,フォーマットすることができるようになった.
またフォームを設定して,何かテキストを最初に表示させることもできる:
myrichtextbox@Text = ".NET/Link makes .NET an extension of Mathematica.";フォームでFormat ▶ Select Fontを選び,テキストの一部を太字や斜体字で表示させる.Format ▶ Select Text Colorを選んでテキストに色を加える:
ファイルは,これでフォーム内でFile ▶ Save Asを選んで保存することができるようになった: