A#とVisualStudio2005による.NETプログラミング・Formを作ってみる編
インストールができたので、コーディングに移る。基本的にはAda05と.NET Frameworkの合わせ技だ。
.NET FrameworkのSystem名前空間は、ここではMSSystになる。それ以下は同じなので、必要に応じてwithする。とりあえず、プレゼンテーションツールなので、画面を最大化したウィンドウを作ってみよう。Ada@WCIMHも参照のこと。
- Steady_Talk.adb (as Main)
with Main_Form; with MSSyst.Windows.Forms.Application; procedure Steady_Talk is pragma Linker_Options("-subsystem=2"); begin Mssyst.Windows.Forms.Application.Run(Main_Form.new_Main_Form); end Steady_Talk;
- Main_Form.ads
with MSSyst.String; with MSSyst.Windows.Forms.Form; package Main_Form is type Typ is new MSSyst.Windows.Forms.Form.Typ with null record; type Ref is access all Typ'Class; function new_Main_Form(This : Ref := null) return Ref; pragma MSIL_Constructor(new_Main_Form); end Main_Form;
- Main_Form.adb
with MSSyst.Windows.Forms.FormBorderStyle; with MSSyst.Windows.Forms.FormWindowState; with MSSyst.Windows.Forms.Control; with MSSyst.Windows.Forms.Control.ControlCollection; with MSSyst.Windows.Forms.Label; with MSSyst.Drawing.Font; with MSSyst.Drawing.Color; package body Main_Form is function new_Main_Form(This : Ref := null) return Ref is use type MSSyst.String.Ref; Super : MSSyst.Windows.Forms.Form.Ref := MSSyst.Windows.Forms.Form.new_Form(MSSyst.Windows.Forms.Form.Ref(This)); Label : MSSyst.Windows.Forms.Label.Ref; Label_Font : MSSyst.Drawing.Font.Ref; begin -- 適当に最大化して背景色を変えてみたり This.set_Text("Steady Talk"); This.set_BackColor(MSSyst.Drawing.Color.get_Orange); This.set_Opacity(0.9); This.set_FormBorderStyle(MSSyst.Windows.Forms.FormBorderStyle.None); This.set_WindowState(MSSyst.Windows.Forms.FormWindowState.Maximized); -- とりあえず文字を入れてみる。 Label := MSSyst.Windows.Forms.Label.new_Label; Label.set_Text("Hello world!"); -- フォントを変えたいんだけどクラッシュする -- Label_Font := MSSyst.Drawing.Font.new_Font(This => null, prototype => Label.get_Font, newStyle => Label.get_Font.get_Style); -- Label.set_Font(Label_Font); -- This.get_Controls.Add(L)だとエラーになる MSSyst.Windows.Forms.Control.ControlCollection.Add(This.get_Controls, Label); return This; end; end Main_Form;
これで何となく動いている。やってみた感じ、そこまでアクロバティックな事は要求されなかった。2003年より進化している様に見える。
しかし、MSSyst.Drawing.Fontのインスタンスを作ろうと思ったら、コンパイラがクラッシュした。メッセージ的には以下の通りだが、その部分を読んでみても詳しいことは分からなかった。
4.01p (20060112) (.NET VM) Assert_Failure jvm-info.adb:301 Error detected at main_form.adb:23:121
面倒なのでGDIを使おう。