wxHaskell

wxHaskell :: Notebook で tab を選択したときのイベントを取得する

radio box や list box 、choice は on selectによって選択したときのイベントを取得できますが、NotebookにはSelectingインスタンスがありません。そこで on click イベントによりどこのタブがクリックされたか判定します。 on click イベントはマウスがク…

wxHaskellのGridでデータをチェックボックス、数字、Choiceにより編集、表示する。

wxHaskell で HaskellをVBのように使いたい、そう思って来たのですが、公開されている情報が少ないです。F#の選択枝もありますが、いつか業務に使っているソフトをOSに依存しないものにしたいと言う望みがあります。さて、今回はGrid。 Gridは表現力があって…

wxHaskell で IME を制御する。(WIN32API)

最初、wxHaskell で HWND を取得する方法が分からず、WIN32APIを呼ぼうとしましたが、うまくいきませんでした。wxHaskell で HWND をとる方法を見つけてwxHaskell で出来るのを知りました。 ボタンを押すたびにIMEのオン、オフ状態が切り替わります。「英数…

TextCtr のフォーカスがオン・オフになったとき背景色を動的に変化させる(wxHaskell)

TAB キーでTextCtrlを移動してフォーカスがON、OFFになたとき、または、マウスでTextCtrlを選択してフォーカスがON、OFFになたときに背景色を変化させたい。 現在どの wxTextCtrl に入力しているか明確にするために、フォーカスがオンになっている wxTextCtr…

wxHaskell での「応答なし」を回避する。(Haskell によるメッセージ処理)

Haskell によるメッセージ処理 以前の「wxHaskell での「応答なし」を回避する」はメッセージ処理をCでやっていましたが、Esa Ilari Vuokko氏製のDirectXバインディングを使ってみるを参考にHaskellでメッセージ処理をします。 -- ghc --make Main.hs -o msg…

wxFormBuilder を使う(2)「woBoxSizer でパーツを配置」

python入門から応用までの学習サイト python-izm.com の BoxSizer を参考にボタンを配置してみます。BoxSizer はボタンやテキストなどの部品を縦方向もしくは横方向へ連続して配置するためのものです。縦に連続して配置するか、横に連続して配置するかは右の…

Haskell で wxFormBuilder を使う。

wxFormBuilderの使い方を学ぶには wxRubyのこと (RubyでGUI)はwxRubyのサイトです。wxFormBuilderを使用して、「Hello World」「ラーメンタイマー」「時計」「双六ゲーム」「Twitterクライアント」を作り、XRCファイルも公開していますので、wxFormBuilderの…

Frame にアイコンを表示する。

Frame にアイコンを表示するのには Graphics.UI.WXCore.Image の topLevelWindowSetIconFromFile を使います。 module Main where {- Graphics.UI.WX ライブラリはWXCoreよりは高級というかレイヤが上位。-} import Graphics.UI.WX (start) import Graphics.…

wxFormBuilder を使って電卓を作ってみました。

自宅PCに wxHaskell をインストールする際に wxWidgets をコンパイルした wxPack というのがあることを知り、 wxPackを使って wxHaskell をインストールしました。 wxPackをインストールするとwxFormBuilder もインストールされました。 wxFormBuilder は wx…

wxHaskell の再インストール(ld.exe: out of memory allocating 28119168 bytes)

Windows Vista の再インストールに伴いHaskellPlatform 2011.2.0.1をインストールしました。「wxHaskell をインストールする」と同じ手順でインストールしようとしたところトラブルがありましたので、メモしておきます。 http://sourceforge.net/projects/wx…

Graphics.UI.WX.Dialogs ダイアログボックス見本

ダイアログボックス 【dialog box】(IT用語辞典) 「ダイアログ」とは「対話」と言う意味で、 GUI 操作画面でユーザに何らかの入力を促すために表示されるポップアップウインドウのことです。 「モーダルダイアログ」(modal dialog) : 表示中はウインドウの…

MS-WIndows 環境での Haskell の文字コード

日本語を含んだHaskellのソースコードは UTF8 で記述しますがコンパイルされた文字列はHaskellの内部コード UCS4 に変換されます。 Windows システムとの文字列のやり取りは UCS4 から SJIS に変換して書き込み、受信した文字列はSJISからUCS4に変換します。…

フォームを閉じるとき終了確認をする(wxHaskell)

フォームを閉じるときにダイアログで終了の確認をします。 -- ghc --make Main.hs -o confirm.exe module Main where -- ライブラリを学習するためになるべく丁寧に依存先を書きました。 import Graphics.UI.WX (start) import Graphics.UI.WX.Events (on, c…

wxHaskell での「応答なし」を回避する。

重い処理をしながら textCtrl に記入しようとすると、Windows のイベントループが回らなくなって(応答なし)になってしまい、処理が終了すると一括して表示されてしまうという不具合が起きました。 重い処理をしながら結果をtextCtrl に記入したいのですが…

 C++ で書かれた wxTutorial を wxHaskell に置き換える(statusBar)

C++ で書かれた wxTutorial by Franky Braem の例を wxHaskell に置き換えながら wxWidgets と wxHaskell の学習をしようと思います。 まず、C++のソースです。 HelloWorldApp.h // http://wiki.wxwidgets.org/Hello_World #ifndef INCLUDED_HELLOWORLDAPP_H…

Linux でも wxHaskell

Ubuntu Linux でも wxHaskell が動作したのでメモしておきます。 wxWidgets ライブラリを apt-get コマンドでインストールしての cabal install wx はコンパイルに失敗。 WxHaskell/Building を参考にソースからインストールしました。 wxWidgets のインスト…

Frame をスクリーン中央に位置させる(frameCenter)

module Main where import Graphics.UI.WX import Graphics.UI.WXCore.Frame (frameCenter) main :: IO () -- start :: IO a -> IO () -- Defined in Graphics.UI.WX main = start hello {- frameCenter :: Frame a -> IO () Center the frame on the screen…

テキストボックス(textEntry) の大きさを設定する。

frame や button は clientSize でオブジェクトの大きさを変更しますが、テキストボックス(textEntry)は clientSize の値を変更してもオブジェクトの大きさは変化しません。 [wxhaskell-users] Size of an entry field に minsize を使う方法が紹介されてい…

wxHaskell を使ってみる(2)

以下を参考にしました。 wxWidgets Reference manual : どんなライブラリがあるか調べるのに役立ちます。 Documentation for wxHaskell 0.10.3 : wxwidget のHaskell での定義。 Index of /wxhaskell/samples/wx : サンプル。 WxHaskell/Quick start WxHaske…

wxHaskell を使ってみる。

サンプルをゴニョゴニョいじってみる。 (:=) でプロパティをセット。 module Main where import Graphics.UI.WX main :: IO () main = start hello hello :: IO () hello = do f <- frame [text := "日本語はUTF8で!"] p <- panel f [] title <- get f text …

wxHaskell をインストールする

「Real World Haskell」は Gtk2hs を紹介していますが wxHaskell は移植性が高く、ネイティブAPIを呼んでいますから綺麗で、パーツも豊富そうです。 wxWidgets については「wxWidgets でクロスプラットフォーム GUIアプリを作ろう」に詳しく記述されています…