【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

GUIコントロールの追加

n7shi2009-01-12


AndromedaにGUIコントロール(Win32ラッパー)を追加しました。LLPMLの問題もいくつか修正しました。

ボタンを押すと終了する簡単なアプリケーションは次のようになります。

#pragma subsystem(WINDOWS_GUI)

var f = new Form;
f.SetClientSize(120, 50);

var b = new Button;
b.SetBounds(30, 15, 60, 20);
b.Text = "Quit";
b.Click.Add(\ => f.Close());
f.AddControl(b);

Application.Run(f);

クラスも関数も定義せずにフラットに書いています。

最初のpragmaはコマンドプロンプトを抑制するためのものです。printfデバッグをするときはコメントアウトします。

イベント定義(b.Click.Add)ではラムダ式を使っています。パーサの都合でC#Haskellをごちゃ混ぜにした文法になっています。

【C#】        x => x + 1
【Haskell】  \x -> x + 1
【Andromeda】\x => x + 1

\はバックスラッシュをλに見立てたもののようです。

クラスで書き換え

C#風にウィンドウをクラスにする書き方も可能です。

#pragma subsystem(WINDOWS_GUI)

Application.Run(new Form1);

class Form1 : Form
{
    function ctor
    {
        SetClientSize(120, 50);
        
        var b = new Button;
        b.SetBounds(30, 15, 60, 20);
        b.Text = "Quit";
        b.Click.Add(\ => Close());
        AddControl(b);
    }
}

コントロールが増えるとこの形の方が便利です。