読者です 読者をやめる 読者になる 読者になる

年金ロボットをめざして

FX(外国為替証拠金取引)自動運用ロボットの開発ブログのはずだった

wxBasic とても小さなプログラム

今回は wxBasic による「とても小さなプログラム」を紹介しよう。

まずはその前に Hello World のウィンドウタイトル版ともいえるプログラムを見てみよう。
ただウィンドウを表示するだけのプログラムで、そのウィンドウのタイトルに Hello World を表示するプログラムだ。

f:id:fxrobot:20131205220310j:plain

上は説明のために 7行を要したが、実際は下のように 2行で実現できる。

frame=New wxFrame(Nothing, wxID_ANY, "Hello World", wxPoint(-1, -1), wxSize(250, 150))
frame.show(True)

実行した結果は下の通りだ。

f:id:fxrobot:20131205220323j:plain

wxPoint() と wxSize() は省略することもできる。wxPoint(-1, -1) の 2つの -1 はウィンドウの表示位置を Windows に任せるということ。wxPoint(200, 100) とすれば、x=200, y=100 と具体的な座標を指定することができる。wxSize(250, 150) はウィンドウの大きさを指定する。横が 250、縦が 150 だ。Nothing の部分は親ウィンドウを指定する部分だが、この場合は親はなく Nothing を指定している。大文字小文字の区別はなく nothing でもよい。

frame.show(True) で実際のウィンドウ表示を行っている。True は true でもよい。
このようにウィンドウを表示するだけならたった 2行で可能だ。

次にメニューとステータスバー付きのウィンドウを表示してみよう。さらに表示するだけではなく特定のメニュー項目を選ぶことで、特定の処理を行うプログラムを作ってみよう。

f:id:fxrobot:20131206180603j:plain

  上が、そのプログラムの全体だ。
なお、画像は Mery(テキストエディタhttp://www.haijin-boys.com/)のスクリーンショットで、wxBasic 構文ファイルを設定したもの。ただし、その構文ファイルはまだ未完成。完成したら公開する予定だ。色合いはぼくの好みというのではなく Mery のデフォルトに従った。

そして下が、その実行結果だ。まずはそれを示しておこう。

f:id:fxrobot:20131205215219j:plain

「とても小さなプログラム」を簡単に説明しようと思うが、Option Explicit や Dim frame = New wxFrame(Nothing, wxID_ANY, "とても小さなプログラム", wxPoint(200, 200), wxSize(500, 400)) などもすべて小文字で、

option explicit
option backslash off
dim frame = new wxframe(nothing, wxid_any, "とても小さなプログラム",
                        wxpoint(200, 200), wxsize(500, 400))

 などとしてもよい。しかし、強制ではないが、少なくともコンスタントは wx 以外を大文字で表す形がよいと思う。具体的には wxID_ANY などだ。

さて、それでは上から順に見てみよう。
f:id:fxrobot:20131202101509j:plain
// とても小さなプログラム
Option Explicit
Option Backslash Off

          // Option Explicit は VisualBasic のそれと同じ
          // Option Backslash Off はバックシュラッシュを含む漢字を表示するために必要
          // 「wxBasic の日本語対応」の記事を参照

Dim frame = New wxFrame(Nothing, wxID_ANY, "とても小さなプログラム",
                        wxPoint(200, 200), wxSize(500, 400))

          // すでに最初に触れたように、このようにフレームを定義して
          // frame.Show(True) とするだけで、ウィンドウ(フレーム)が表示できる
          // 数多い wx 言語のなかでも wxBasic は最も簡単な記述が可能だ

// メニュー生成
Dim mFile = New wxMenu()
    mFile.Append(wxID_EXIT, "&X 終了\tAlt-X", "プログラムを終了します")
Dim mHelp = New wxMenu()
    mHelp.Append(wxID_ABOUT,
        "&A プログラムについて\tCtrl-A", "プログラムについて表示します")

          // 上では 2つのメニュー項目を定義している
          // mFile と mHelp だ。ここで作っておいてあとで貼り付ける
// メニューバー生成
Dim menuBar = New wxMenuBar()
    menuBar.Append(mFile,  "&F ファイル")
    menuBar.Append(mHelp, "&H ヘルプ")

          // 先ほど定義した mFile と mHelp を生成した menuBar に貼り付ける
frame.SetMenuBar(menuBar)

          // 上の1行で実際にメニューバーが表示される
// ステータスバー生成
frame.CreateStatusBar(2)
frame.SetStatusText("ようこそ、とても小さなプログラム へ!")
          // ステータスバーを生成し、そこに表示するテキストを指定している
          // (2) はステータスバーの領域を2分割するを意味する

// ウィンドウを閉じて終了する関数
Function OnQuit(Event)
    frame.Close(True)
End Function

          // 上の関数はイベントが発生したときに使うための定義
// コールバック設定(OnQuit)
Connect(frame, wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, "OnQuit")

          // 前に定義した関数をここで使用する
          // 事前に決められている ID とイベントタイプを指定している
          // ID は wxID_Exit でイベントタイプは wxEVT_COMMAND_MENU_SELECTED
          // 特定のメニュー項目を選んだときに OnQuit 関数を実行している
// メッセージダイアログを表示する関数
Function OnAbout(Event)
    Dim msg = "wxBasic によるとても小さなプログラム例です\n" &
                            "25行程度のとても小さなサンプルプログラムです"
    wxMessageBox(msg, "とても小さなプログラム について",
                                    wxOK + wxICON_INFORMATION, frame)
End Function

          // 上の関数はイベントが発生したときに使うための 2つ目の定義
// コールバック設定(OnAbout)
Connect(frame, wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, "OnAbout")

          // 前に定義した 2つ目の関数をここで使用する
          // 事前に決められている ID とイベントタイプを指定している
          // ID は wxID_ABOUT でイベントタイプは wxEVT_COMMAND_MENU_SELECTED
          // 特定のメニュー項目を選んだときに OnAbout 関数を実行している
// ウィンドウを表示
frame.Show(True)

          // ここでようやく全体を表示する命令を出している..という体だが
          // 実はこれがなくてもウィンドウは正常に表示される
          // それでも frame.Show(True) によって表示すると理解しておくこと
f:id:fxrobot:20131202101509j:plain
どうだろう、理解は容易だったのではないだろうか。
wxBasic の GUI の仕組みは基本的にこのようになっている。これは非常に明快な仕組みであり、ぼくが wxBasic に好意を持つ一つの理由となっている。

あとはイベントのためにどのような ID があり、どのようなイベントタイプがあるのかがわかれば自由自在となるはずだ。それについてはまた別の機会にさせていただく。

では、また。