↑これは「そんなファイルねーよ」です。俺のソースで出てきたときは。
2011年7月31日日曜日
Erlang Crashdumpの表示方法
WindowsのbatファイルからErlangプログラムを起動することを試していた。
プログラムが落ちたとき、Erlangの情報がCrashdumpしかなかったので、それを表示させるべく、下記URLを参考に表示させてみた。
Erlang のクラッシュダンプ - Life Logging Life : http://blogs.asanegra.org/mnaniwa/entry/29
このとき、上記サイトの通りにいかなかった箇所を記述する。
サイトでは、EshellのカレントとCrashdumpの場所が同一の状態で、webtool:start().を行うと表示できるとある。
しかし、できなかった。
http://localhost:8888へアクセスし、Crashdumpを指定すると、C:\fakepathにCrashdumpないという表示が出る。
なので、C直下にfakepathを作成し、Crashdumpをそこに置いたら、できるようになった。
下記画像が表示できた様子:
これをどう解析して、落ちた原因を特定するのかは不明。
プログラムが落ちたとき、Erlangの情報がCrashdumpしかなかったので、それを表示させるべく、下記URLを参考に表示させてみた。
Erlang のクラッシュダンプ - Life Logging Life : http://blogs.asanegra.org/mnaniwa/entry/29
このとき、上記サイトの通りにいかなかった箇所を記述する。
サイトでは、EshellのカレントとCrashdumpの場所が同一の状態で、webtool:start().を行うと表示できるとある。
しかし、できなかった。
http://localhost:8888へアクセスし、Crashdumpを指定すると、C:\fakepathにCrashdumpないという表示が出る。
なので、C直下にfakepathを作成し、Crashdumpをそこに置いたら、できるようになった。
下記画像が表示できた様子:
これをどう解析して、落ちた原因を特定するのかは不明。
Erlang filename basename のサンプル sample
filename の basenameのサンプルだ。
注意点は「/(スラッシュ)」のパスしかダメなところ。
ソース:
-module(basenameTest).
-export([start/0]).
start() ->
Path = "C:/Dir/FileA.txt",
File1 = filename:basename(Path),
io:format("File1:~p~n",[File1]).
注意点は「/(スラッシュ)」のパスしかダメなところ。
ソース:
-module(basenameTest).
-export([start/0]).
start() ->
Path = "C:/Dir/FileA.txt",
File1 = filename:basename(Path),
io:format("File1:~p~n",[File1]).
Erlang filenameのsplitとbinaryのsplit
splitでwindowsのパスを分割しようとして苦しんだ。
そのためのメモ。
動作結果:
ソース:
-module(filenameTest).
-export([start/0]).
start() ->
Path = "C:\Dir\File.txt",
io:format("Path:~p~n",[Path]),
Split = filename:split(Path),
io:format("Split:~p~n",[Split]),
Path1 = "C:/Dir/File.txt",
io:format("~nPath1:~p~n",[Path1]),
Split1 = filename:split(Path1),
io:format("Split1:~p~n",[Split1]),
Path2 = list_to_binary(Path),
Splitter = <<" ">>,
Split2 = binary:split(Path2, Splitter),
io:format("~nSplit2:~p~n",[Split2]),
AddPath = Path ++ " " ++ Path1,
Path3 = list_to_binary(AddPath),
Split3 = binary:split(Path3, Splitter),
io:format("~nSplit3:~p~n",[Split3]).
そのためのメモ。
動作結果:
ソース:
-module(filenameTest).
-export([start/0]).
start() ->
Path = "C:\Dir\File.txt",
io:format("Path:~p~n",[Path]),
Split = filename:split(Path),
io:format("Split:~p~n",[Split]),
Path1 = "C:/Dir/File.txt",
io:format("~nPath1:~p~n",[Path1]),
Split1 = filename:split(Path1),
io:format("Split1:~p~n",[Split1]),
Path2 = list_to_binary(Path),
Splitter = <<" ">>,
Split2 = binary:split(Path2, Splitter),
io:format("~nSplit2:~p~n",[Split2]),
AddPath = Path ++ " " ++ Path1,
Path3 = list_to_binary(AddPath),
Split3 = binary:split(Path3, Splitter),
io:format("~nSplit3:~p~n",[Split3]).
2011年7月30日土曜日
Erlang Windows上でダブルクリックでErlangを実行する。
大層なことをタイトルに書いたが、要するに
batファイルをダブルクリックして、Erlangのプログラムを起動する
ってだけ。
test.batファイルの中身:
erl -noshell -s hello1 hello_out -s init stop
hello1.erlの中身:
-module(hello1).
-export([hello_out/0]).
hello_out() -> io:fwrite("Hello world!\n").
事前にhello1をコンパイルする必要がある。
そして、test.batファイルとhello1.beamを同一ディレクトリに配置して、test.batファイルをダブルクリックする。
そうすると、コマンドプロンプトが起動し、「Hello world!」が表示される。
batファイルをダブルクリックして、Erlangのプログラムを起動する
ってだけ。
test.batファイルの中身:
erl -noshell -s hello1 hello_out -s init stop
hello1.erlの中身:
-module(hello1).
-export([hello_out/0]).
hello_out() -> io:fwrite("Hello world!\n").
事前にhello1をコンパイルする必要がある。
そして、test.batファイルとhello1.beamを同一ディレクトリに配置して、test.batファイルをダブルクリックする。
そうすると、コマンドプロンプトが起動し、「Hello world!」が表示される。
2011年7月24日日曜日
Erlang zip sample サンプル
Erlangのzip:zipについてどう動作するのか確認したくて、プログラミングしたので、そのソースを載せる。
そのまとめみたいなメモをgoogle Docに作ったので、合わせて参照あれ。
https://docs.google.com/document/d/1lQmkEN8UxggewyHtPGLfwhW5_r8qR1e7yeedYkdnR2M/edit?hl=ja
ソース:
-module(zipTest).
-include_lib("wx.hrl").
-export([start/0]).
%% -*- coding: shift-JIS -*-
%% Current Directory -> C:\Users\andre\erlwork
start() ->
%myzipMem().
%myzipVerbose().
%myzipCwd().
%myzipUcp().
myzipCmt().
%% @doc write to file on memory data that compress by zip:zip/3
%% in C:\Users\andre\erlwork\auiTest.erl
%% out C:\Users\andre\erlwork\ngs_bin.zip
myzipMem() ->
Option = [memory],
case zip:zip("ngs.zip",["auiTest.erl"],Option) of
{ok,{"ngs.zip",Mem}} -> file:write_file("ngs_bin.zip",Mem),
ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs.zip
myzipDrct() ->
Option = [],
case zip:zip("ngs.zip",["zip"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the file
%% in C:\Users\andre\erlwork\auiTest.erl
%% out C:\Users\andre\erlwork\ngs.zip
myzip() ->
Option = [],
case zip:zip("ngs.zip",["auiTest.erl"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory with option [verbose]
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs.zip
myzipVerbose() ->
Option = [verbose],
case zip:zip("ngs.zip",["zip"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory and change current directory
%% in C:\Users\andre\erlwork\zip_work\test
%% out C:\Users\andre\erlwork\ngs_cwd.zip
myzipCwd() ->
Option = [verbose,{cwd,"zip_work"}],
case zip:zip("ngs_cwd.zip",["test"],Option) of
{ok,"ngs_cwd.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory but uncompress the extension "*.erl".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_ucp.zip
%% ucp -> uncompress
myzipUcp() ->
ZipName = "ngs_ucp.zip",
Option = [verbose,{uncompress,{add,[".erl"]}}],
case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory but uncompress the extension "*.erl".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_cmt.zip
%% cmt -> comment
myzipCmt() ->
ZipName = "ngs_cmt.zip",
Option = [verbose,{comment,"This is test."}],
case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
そのまとめみたいなメモをgoogle Docに作ったので、合わせて参照あれ。
https://docs.google.com/document/d/1lQmkEN8UxggewyHtPGLfwhW5_r8qR1e7yeedYkdnR2M/edit?hl=ja
ソース:
-module(zipTest).
-include_lib("wx.hrl").
-export([start/0]).
%% -*- coding: shift-JIS -*-
%% Current Directory -> C:\Users\andre\erlwork
start() ->
%myzipMem().
%myzipVerbose().
%myzipCwd().
%myzipUcp().
myzipCmt().
%% @doc write to file on memory data that compress by zip:zip/3
%% in C:\Users\andre\erlwork\auiTest.erl
%% out C:\Users\andre\erlwork\ngs_bin.zip
myzipMem() ->
Option = [memory],
case zip:zip("ngs.zip",["auiTest.erl"],Option) of
{ok,{"ngs.zip",Mem}} -> file:write_file("ngs_bin.zip",Mem),
ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs.zip
myzipDrct() ->
Option = [],
case zip:zip("ngs.zip",["zip"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the file
%% in C:\Users\andre\erlwork\auiTest.erl
%% out C:\Users\andre\erlwork\ngs.zip
myzip() ->
Option = [],
case zip:zip("ngs.zip",["auiTest.erl"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory with option [verbose]
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs.zip
myzipVerbose() ->
Option = [verbose],
case zip:zip("ngs.zip",["zip"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory and change current directory
%% in C:\Users\andre\erlwork\zip_work\test
%% out C:\Users\andre\erlwork\ngs_cwd.zip
myzipCwd() ->
Option = [verbose,{cwd,"zip_work"}],
case zip:zip("ngs_cwd.zip",["test"],Option) of
{ok,"ngs_cwd.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory but uncompress the extension "*.erl".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_ucp.zip
%% ucp -> uncompress
myzipUcp() ->
ZipName = "ngs_ucp.zip",
Option = [verbose,{uncompress,{add,[".erl"]}}],
case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
%% @doc compress the directory but uncompress the extension "*.erl".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_cmt.zip
%% cmt -> comment
myzipCmt() ->
ZipName = "ngs_cmt.zip",
Option = [verbose,{comment,"This is test."}],
case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
wx.hrlはErlangのインストールディレクトリ内を検索するとあるので、それを本ソースと同一ディレクトリに配置してください。
ディレクトリ構成がちょっと面倒かも。C:\Users\andre\erlwork\に実行モジュール(beam)がある。それと同一ディレクトリにzipディレクトリとかzip_workディレクトリとかある。
毎回のことだけど、解説がつかないブログで申し訳ありません :-<
2011年7月18日月曜日
Erlang zip ドキュメントの制限事項部分をgoogleで翻訳する。
Erlangのzipには制限事項がある。
その部分の翻訳をgoogleでやった。
それをコピペする。
ZIP64アーカイブは現在サポートされていません。
パスワードで保護し、暗号化されたアーカイブは、現在サポートされていません
のみDEFLATE(zlibの圧縮)とSTORE(非圧縮データ)ZIP方式がサポートされています。
アーカイブのサイズは2 Gバイト(32ビット)に制限されています。
zipアーカイブを作成するときに個々のファイルのコメントはサポートされていません。全体のZIPアーカイブのZIPアーカイブのコメントがサポートされています。
既存のzipアーカイブを変更するためのサポートはありません。アーカイブからファイルを追加または削除するには、アーカイブ全体を再作成する必要があります。
その部分の翻訳をgoogleでやった。
それをコピペする。
ZIP64アーカイブは現在サポートされていません。
パスワードで保護し、暗号化されたアーカイブは、現在サポートされていません
のみDEFLATE(zlibの圧縮)とSTORE(非圧縮データ)ZIP方式がサポートされています。
アーカイブのサイズは2 Gバイト(32ビット)に制限されています。
zipアーカイブを作成するときに個々のファイルのコメントはサポートされていません。全体のZIPアーカイブのZIPアーカイブのコメントがサポートされています。
既存のzipアーカイブを変更するためのサポートはありません。アーカイブからファイルを追加または削除するには、アーカイブ全体を再作成する必要があります。
2011年7月17日日曜日
Erlang zip unzip sample サンプル
解凍・圧縮のサンプルを貼っておきます。
カレントディレクトリにある「auiTest.erl」というファイルを「ngs.zip」という名前の圧縮ファイルにし、圧縮に成功した場合、そのファイルを解凍する。
解凍時には、カレントディレクトリの同ファイルに上書き保存される。
ソース:
-module(zipTest).
-include_lib("wx.hrl").
-export([start/0]).
start() ->
myzip().
myzip() ->
case zip:zip(ngs.zip,["auiTest.erl"]) of
{ok,ngs.zip} -> ok,
zip:unzip("ngs.zip");
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
カレントディレクトリにある「auiTest.erl」というファイルを「ngs.zip」という名前の圧縮ファイルにし、圧縮に成功した場合、そのファイルを解凍する。
解凍時には、カレントディレクトリの同ファイルに上書き保存される。
ソース:
-module(zipTest).
-include_lib("wx.hrl").
-export([start/0]).
start() ->
myzip().
myzip() ->
case zip:zip(ngs.zip,["auiTest.erl"]) of
{ok,ngs.zip} -> ok,
zip:unzip("ngs.zip");
{error,Reason} -> io:format("Reason:~p~n",[Reason])
end.
Erlang filename dirname 取得する
ソース内に直書きしたディレクトリ名の配下にあるファイル名およびディレクトリ名を表示するプログラムを書いた。
ファイル名に日本語があると落ちるけど。
ソース:
-module(filelibTest).
-include_lib("wx.hrl").
-export([start/0]).
start() ->
% get file name
Files = filelib:wildcard("C:/Users/andre/erlwork/*"),
% print file name
print(Files).
print([]) ->
io:format("ok~n");
print([File|Files]) ->
Filename = filename:basename(File),
io:format("filename:~ts~n",[Filename]),
print(Files).
ファイル名に日本語があると落ちるけど。
ソース:
-module(filelibTest).
-include_lib("wx.hrl").
-export([start/0]).
start() ->
% get file name
Files = filelib:wildcard("C:/Users/andre/erlwork/*"),
% print file name
print(Files).
print([]) ->
io:format("ok~n");
print([File|Files]) ->
Filename = filename:basename(File),
io:format("filename:~ts~n",[Filename]),
print(Files).
wxErlang wxListCtrl Sample2 サンプル2 1x2に文字列をセットする。
前回の記事で、wxListCtrlの中に、縦にItemおよび文字列をセットするものはできた。
しかし、ほしいものは横にセットするものだった。
それができたので、貼っておく。
画像:
ソース:
-module(listCtrlTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"wxListCtrl and wxListItem Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
% Create wxListCtrl
ListCtrl = wxListCtrl:new(Frame,[{style,?wxLC_REPORT bor ?wxLC_HRULES}]),
%ListCtrl = wxListCtrl:new(Frame,[{style,?wxLC_LIST}]),
% Set Column Name
Option = [{format,?wxLIST_FORMAT_LEFT}],
Col0 = wxListCtrl:insertColumn(ListCtrl,0,"Column0",Option),
Col1 = wxListCtrl:insertColumn(ListCtrl,1,"Column1",Option),
% Create wxListItem
Item1 = wxListItem:new(),
wxListItem:setText(Item1,"Item1"),
%wxListItem:setColumn(Item1,0),
% Create wxListItem
Item2 = wxListItem:new(),
wxListItem:setText(Item2,"Item2"),
%wxListItem:setColumn(Item2,0),
% Insert Item to List
%wxListCtrl:insertItem(ListCtrl,Item1),
Index = wxListCtrl:insertItem(ListCtrl,Col0,"Item1s"),
%wxListCtrl:insertItem(ListCtrl,Item2),
%wxListCtrl:insertItem(ListCtrl,Col1,"Item2s"),
wxListCtrl:setItem(ListCtrl,Index,Col1,"Item2s"),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
しかし、ほしいものは横にセットするものだった。
それができたので、貼っておく。
画像:
ソース:
-module(listCtrlTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"wxListCtrl and wxListItem Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
% Create wxListCtrl
ListCtrl = wxListCtrl:new(Frame,[{style,?wxLC_REPORT bor ?wxLC_HRULES}]),
%ListCtrl = wxListCtrl:new(Frame,[{style,?wxLC_LIST}]),
% Set Column Name
Option = [{format,?wxLIST_FORMAT_LEFT}],
Col0 = wxListCtrl:insertColumn(ListCtrl,0,"Column0",Option),
Col1 = wxListCtrl:insertColumn(ListCtrl,1,"Column1",Option),
% Create wxListItem
Item1 = wxListItem:new(),
wxListItem:setText(Item1,"Item1"),
%wxListItem:setColumn(Item1,0),
% Create wxListItem
Item2 = wxListItem:new(),
wxListItem:setText(Item2,"Item2"),
%wxListItem:setColumn(Item2,0),
% Insert Item to List
%wxListCtrl:insertItem(ListCtrl,Item1),
Index = wxListCtrl:insertItem(ListCtrl,Col0,"Item1s"),
%wxListCtrl:insertItem(ListCtrl,Item2),
%wxListCtrl:insertItem(ListCtrl,Col1,"Item2s"),
wxListCtrl:setItem(ListCtrl,Index,Col1,"Item2s"),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
wx.hrlはErlangのインストールディレクトリにある。検索してください。
それを本ソースと同一ディレクトリに配置してください。
参考:
How to add value to second column using wxListCtrl in wxWidgets (C++ code)?? - Stack Overflow : http://stackoverflow.com/questions/2962057/how-to-add-value-to-second-column-using-wxlistctrl-in-wxwidgets-c-code
参考:
How to add value to second column using wxListCtrl in wxWidgets (C++ code)?? - Stack Overflow : http://stackoverflow.com/questions/2962057/how-to-add-value-to-second-column-using-wxlistctrl-in-wxwidgets-c-code
2011年7月16日土曜日
wxErlang wxGrid Sample サンプル
いつもの通りサンプルを貼っておきます。
画面:
ソース:
-module(gridTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"wxGrid Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
Grid = wxGrid:new(Frame,?wxID_ANY),
Row = 2,
Col = 2,
wxGrid:createGrid(Grid,Row,Col),
wxGrid:appendRows(Grid,[{numRows,2}]),
wxGrid:appendCols(Grid,[{numCols,2}]),
wxGrid:setCellValue(Grid,{2,2},"2x2"),
wxGrid:setCellValue(Grid,{3,3},"3x3"),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
wx.hrlはErlangのインストールディレクトリにあるので、検索してください。
そして、本ソースと同一ディレクトリに配置してください。
画面:
ソース:
-module(gridTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"wxGrid Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
Grid = wxGrid:new(Frame,?wxID_ANY),
Row = 2,
Col = 2,
wxGrid:createGrid(Grid,Row,Col),
wxGrid:appendRows(Grid,[{numRows,2}]),
wxGrid:appendCols(Grid,[{numCols,2}]),
wxGrid:setCellValue(Grid,{2,2},"2x2"),
wxGrid:setCellValue(Grid,{3,3},"3x3"),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
wx.hrlはErlangのインストールディレクトリにあるので、検索してください。
そして、本ソースと同一ディレクトリに配置してください。
wxErlang wxListCtrl Sample サンプル
このサンプルが役に立つとは思えない。
wxErlangの使用例がないし、貼っておく。
動作画面:
ソース:
-module(listCtrlTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"wxListCtrl and wxListItem Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
% Create wxListCtrl
ListCtrl = wxListCtrl:new(Frame,[{style,?wxLC_REPORT}]),
% Set Column Name
Option = [{format,?wxLIST_FORMAT_LEFT}],
wxListCtrl:insertColumn(ListCtrl,0,"Column0",Option),
wxListCtrl:insertColumn(ListCtrl,1,"Column1",Option),
% Create wxListItem
Item1 = wxListItem:new(),
wxListItem:setText(Item1,"Item1"),
wxListItem:setColumn(Item1,0),
% Create wxListItem
Item2 = wxListItem:new(),
wxListItem:setText(Item2,"Item2"),
wxListItem:setColumn(Item2,0),
% Insert Item to List
wxListCtrl:insertItem(ListCtrl,Item1),
%wxListCtrl:setItem(ListCtrl,Item1),
wxListCtrl:insertItem(ListCtrl,Item2),
%wxListCtrl:setItem(ListCtrl,Item2),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
参考:
wxListCtrlで作成した表の値を編集 - 理想のユーザ・インターフェイスを求めて : http://d.hatena.ne.jp/Megumi221/20100225/1267592869
wxErlangの使用例がないし、貼っておく。
動作画面:
ソース:
-module(listCtrlTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"wxListCtrl and wxListItem Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
% Create wxListCtrl
ListCtrl = wxListCtrl:new(Frame,[{style,?wxLC_REPORT}]),
% Set Column Name
Option = [{format,?wxLIST_FORMAT_LEFT}],
wxListCtrl:insertColumn(ListCtrl,0,"Column0",Option),
wxListCtrl:insertColumn(ListCtrl,1,"Column1",Option),
% Create wxListItem
Item1 = wxListItem:new(),
wxListItem:setText(Item1,"Item1"),
wxListItem:setColumn(Item1,0),
% Create wxListItem
Item2 = wxListItem:new(),
wxListItem:setText(Item2,"Item2"),
wxListItem:setColumn(Item2,0),
% Insert Item to List
wxListCtrl:insertItem(ListCtrl,Item1),
%wxListCtrl:setItem(ListCtrl,Item1),
wxListCtrl:insertItem(ListCtrl,Item2),
%wxListCtrl:setItem(ListCtrl,Item2),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
本当は、左から右へItemを並べたかったけど、どうもできないらしい。
Itemは一行に一個で、Column2に何か表示させたければ、SetItemとかするのだと思う。
今度やってみる。
参考:
wxListCtrlで作成した表の値を編集 - 理想のユーザ・インターフェイスを求めて : http://d.hatena.ne.jp/Megumi221/20100225/1267592869
2011年7月10日日曜日
Windows Vistaでファイル名とファイル内文字列検索する方法
くそったれVistaでは初期設定で、インデックスが作成されている場所では、ファイル名とファイル内文字列が検索対象である。インデックスが作成されていない場所では、ファイル名のみ検索対象だ。
まさにダメ。これはWindows 7でも同じ気がする。
解決方法が下記URLでできる。参照あれ。
Windows Vista ファイル内容(文字列)検索 : http://ratan.dyndns.info/vista/kennsaku.html
俺はこれでもできなかったけど。どうすればいいんだ・・・
まさにダメ。これはWindows 7でも同じ気がする。
解決方法が下記URLでできる。参照あれ。
Windows Vista ファイル内容(文字列)検索 : http://ratan.dyndns.info/vista/kennsaku.html
俺はこれでもできなかったけど。どうすればいいんだ・・・
wxErlang wxChoice wxSpinCtrl wxListBox Sample サンプル
当初、wxErlangを勉強していたきっかけは、飛行機本のチャットのGUIをwxErlangで書き換えることだった。しかし、今やwxErlangのサンプルを貼ることが目的になってしまっている。
Erlangで何かツールを作ってみようと思っているので、今度からサンプルも貼りつつ、ツールの作成にも着手していく。
今回のソースはリストボックスとかその周辺のもの。
ソース:
-module(choicesTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Parent = wxFrame:new(Wx,
-1,
"ListBox Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
Panel = wxScrolledWindow:new(Parent, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
ListBoxSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxListBox"}]),
ChoiceSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxChoice"}]),
SpinSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxSpinCtrl"}]),
ComboSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxComboBox"}]),
Sizer = wxBoxSizer:new(?wxHORIZONTAL),
Sizer3 = wxBoxSizer:new(?wxHORIZONTAL),
Choices = ["one","two","three",
"four","five","six",
"seven","eight","nine",
"ten", "eleven", "twelve"],
%% Create a wxListBox that uses multiple selection
ListBox = wxListBox:new(Panel, 1, [{size, {-1,100}},
{choices, ["Multiple selection"|Choices]},
{style, ?wxLB_MULTIPLE}]),
wxListBox:setToolTip(ListBox, "A wxListBox with multiple selection"),
%% Create a wxListBox that uses single selection
ListBox2 = wxListBox:new(Panel, 2, [{size, {-1,100}},
{choices, ["Single selection"|Choices]},
{style, ?wxLB_SINGLE}]),
wxListBox:setToolTip(ListBox2, "A wxListBox with single selection"),
%% Create a wxChoice
Choice = wxChoice:new(Panel, 4, [{choices, Choices}]),
wxChoice:setToolTip(Choice, "A wxChoice"),
%% Create a wxSpinCtrl with range between 0 and 100
SpinCtrl = wxSpinCtrl:new(Panel, []),
wxSpinCtrl:setRange(SpinCtrl, 0, 100),
wxSpinCtrl:setToolTip(SpinCtrl, "A wxSpinCtrl with range from 0 to 100"),
%% Create a wxComboBox and set the value to "Default value"
ComboBox = wxComboBox:new(Panel, 5, [{choices, Choices}]),
wxComboBox:setToolTip(ComboBox, "A wxComboBox"),
wxChoice:connect(Choice,command_choice_selected),
wxSpinCtrl:connect(SpinCtrl,command_spinctrl_updated),
wxComboBox:connect(ComboBox, command_combobox_selected),
%% Add to sizers
Options = [{border,4}, {flag, ?wxALL}],
wxSizer:add(Sizer, ListBox, Options),
wxSizer:add(Sizer, ListBox2, Options),
wxSizer:add(ChoiceSizer, Choice, Options),
wxSizer:add(SpinSizer, SpinCtrl, Options),
wxSizer:add(Sizer3, ChoiceSizer, []),
wxSizer:add(Sizer3, SpinSizer, [{border, 4}, {flag, ?wxLEFT}]),
wxSizer:add(ComboSizer, ComboBox, Options),
wxSizer:add(ListBoxSizer, Sizer, Options),
wxSizer:add(MainSizer, ListBoxSizer, Options),
wxSizer:add(MainSizer, Sizer3, Options),
wxSizer:add(MainSizer, ComboSizer, Options),
wxScrolledWindow:setScrollRate(Panel, 5, 5),
wxPanel:setSizer(Panel, MainSizer),
%% Set Connect Close
wxFrame:connect(Parent, close_window),
Parent.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
Erlangで何かツールを作ってみようと思っているので、今度からサンプルも貼りつつ、ツールの作成にも着手していく。
今回のソースはリストボックスとかその周辺のもの。
ソース:
-module(choicesTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Parent = wxFrame:new(Wx,
-1,
"ListBox Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
Panel = wxScrolledWindow:new(Parent, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
ListBoxSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxListBox"}]),
ChoiceSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxChoice"}]),
SpinSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxSpinCtrl"}]),
ComboSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxComboBox"}]),
Sizer = wxBoxSizer:new(?wxHORIZONTAL),
Sizer3 = wxBoxSizer:new(?wxHORIZONTAL),
Choices = ["one","two","three",
"four","five","six",
"seven","eight","nine",
"ten", "eleven", "twelve"],
%% Create a wxListBox that uses multiple selection
ListBox = wxListBox:new(Panel, 1, [{size, {-1,100}},
{choices, ["Multiple selection"|Choices]},
{style, ?wxLB_MULTIPLE}]),
wxListBox:setToolTip(ListBox, "A wxListBox with multiple selection"),
%% Create a wxListBox that uses single selection
ListBox2 = wxListBox:new(Panel, 2, [{size, {-1,100}},
{choices, ["Single selection"|Choices]},
{style, ?wxLB_SINGLE}]),
wxListBox:setToolTip(ListBox2, "A wxListBox with single selection"),
%% Create a wxChoice
Choice = wxChoice:new(Panel, 4, [{choices, Choices}]),
wxChoice:setToolTip(Choice, "A wxChoice"),
%% Create a wxSpinCtrl with range between 0 and 100
SpinCtrl = wxSpinCtrl:new(Panel, []),
wxSpinCtrl:setRange(SpinCtrl, 0, 100),
wxSpinCtrl:setToolTip(SpinCtrl, "A wxSpinCtrl with range from 0 to 100"),
%% Create a wxComboBox and set the value to "Default value"
ComboBox = wxComboBox:new(Panel, 5, [{choices, Choices}]),
wxComboBox:setToolTip(ComboBox, "A wxComboBox"),
wxChoice:connect(Choice,command_choice_selected),
wxSpinCtrl:connect(SpinCtrl,command_spinctrl_updated),
wxComboBox:connect(ComboBox, command_combobox_selected),
%% Add to sizers
Options = [{border,4}, {flag, ?wxALL}],
wxSizer:add(Sizer, ListBox, Options),
wxSizer:add(Sizer, ListBox2, Options),
wxSizer:add(ChoiceSizer, Choice, Options),
wxSizer:add(SpinSizer, SpinCtrl, Options),
wxSizer:add(Sizer3, ChoiceSizer, []),
wxSizer:add(Sizer3, SpinSizer, [{border, 4}, {flag, ?wxLEFT}]),
wxSizer:add(ComboSizer, ComboBox, Options),
wxSizer:add(ListBoxSizer, Sizer, Options),
wxSizer:add(MainSizer, ListBoxSizer, Options),
wxSizer:add(MainSizer, Sizer3, Options),
wxSizer:add(MainSizer, ComboSizer, Options),
wxScrolledWindow:setScrollRate(Panel, 5, 5),
wxPanel:setSizer(Panel, MainSizer),
%% Set Connect Close
wxFrame:connect(Parent, close_window),
Parent.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
2011年7月8日金曜日
wxErlang wxTreeCtlr Sample サンプル
ツリーのサンプル。
ソース:
-module(wxTreeCtrlTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"TreeCtrl Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
Sizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxTreeCtrl"}]),
%% Setup treeCtrl
TreeCtrl = wxTreeCtrl:new(Panel, []),
RootId = wxTreeCtrl:addRoot(TreeCtrl, "Root"),
%% Name the first items
Items = ["item "++integer_to_list(Int)||
Int <- lists:seq(1,10)],
%% Create the first items in the treeCtrl
SubItems = [{wxTreeCtrl:appendItem(TreeCtrl, RootId, Item), Item}||
Item <- Items],
%% Create sub items
[wxTreeCtrl:appendItem(TreeCtrl, ItemId, Item++" sub item "++integer_to_list(Int))||
{ItemId, Item} <- SubItems, Int <- lists:seq(1,10)],
wxTreeCtrl:expand(TreeCtrl, RootId),
%% Add to sizers
Options = [{flag, ?wxEXPAND}, {proportion, 1}],
wxSizer:add(Sizer, TreeCtrl, Options),
wxSizer:add(MainSizer, Sizer, Options),
wxTreeCtrl:connect(TreeCtrl, command_tree_item_collapsed),
wxTreeCtrl:connect(TreeCtrl, command_tree_item_expanded),
wxTreeCtrl:connect(TreeCtrl, command_tree_sel_changed),
wxPanel:setSizer(Panel, MainSizer),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
ソース:
-module(wxTreeCtrlTest).
-include_lib("wx.hrl").
-export([start/0]).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"TreeCtrl Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
Sizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxTreeCtrl"}]),
%% Setup treeCtrl
TreeCtrl = wxTreeCtrl:new(Panel, []),
RootId = wxTreeCtrl:addRoot(TreeCtrl, "Root"),
%% Name the first items
Items = ["item "++integer_to_list(Int)||
Int <- lists:seq(1,10)],
%% Create the first items in the treeCtrl
SubItems = [{wxTreeCtrl:appendItem(TreeCtrl, RootId, Item), Item}||
Item <- Items],
%% Create sub items
[wxTreeCtrl:appendItem(TreeCtrl, ItemId, Item++" sub item "++integer_to_list(Int))||
{ItemId, Item} <- SubItems, Int <- lists:seq(1,10)],
wxTreeCtrl:expand(TreeCtrl, RootId),
%% Add to sizers
Options = [{flag, ?wxEXPAND}, {proportion, 1}],
wxSizer:add(Sizer, TreeCtrl, Options),
wxSizer:add(MainSizer, Sizer, Options),
wxTreeCtrl:connect(TreeCtrl, command_tree_item_collapsed),
wxTreeCtrl:connect(TreeCtrl, command_tree_item_expanded),
wxTreeCtrl:connect(TreeCtrl, command_tree_sel_changed),
wxPanel:setSizer(Panel, MainSizer),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
2011年7月3日日曜日
wxErlang wxAui と wxNotebook Sample サンプル
Erlangインストールディレクトリ配下にあるdemoディレクトリのex_aui.erlを参考に作ったものを載せる。
wxAuiとwxBoxSizerを混ぜたものである。
ソース:
-module(auiandboxTest).
-include_lib("wx.hrl").
-export([start/0]).
-define(pi, wxAuiPaneInfo).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"Aui and BoxSizer Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
%% Create AuiManager
Manager = wxAuiManager:new([{managed_wnd, Panel}
]),
%% Create wxAuiPaneInfo
Pane = ?pi:new(),
?pi:closeButton(Pane),
?pi:right(Pane),
?pi:dockable(Pane, [{b, true}]),
?pi:floatingSize(Pane, 300,200),
?pi:minSize(Pane, {50,50}),
?pi:paneBorder(Pane),
?pi:floatable(Pane, [{b, true}]),
%% Create Pane Clone?
create_pane(Panel, Manager, Pane),
create_pane(Panel, Manager,
?pi:caption(?pi:top(?pi:new(Pane)), "One")),
create_pane(Panel, Manager,
?pi:caption(?pi:left(?pi:new(Pane)), "two")),
create_pane(Panel, Manager,
?pi:caption(?pi:bottom(?pi:new(Pane)), "Three")),
create_pane(Panel, Manager,
?pi:caption(?pi:centre(?pi:new(Pane)), "Four")),
wxPanel:setSizer(Panel, MainSizer),
wxAuiManager:connect(Manager, aui_pane_button, [{skip,true}]),
wxAuiManager:connect(Manager, aui_pane_maximize, [{skip,true}]),
wxAuiManager:update(Manager),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
create_pane(Parent, Manager, Pane) ->
TextCtrl = wxTextCtrl:new(Parent, ?wxID_ANY, [{size, {300,200}},
{value, "An empty pane"},
{style, 0
bor ?wxDEFAULT
bor ?wxTE_MULTILINE}]),
wxAuiManager:addPane(Manager, TextCtrl, Pane),
TextCtrl.
wx.hrlはErlangのインストールディレクトリ内にあるものを使用している。検索をかけて見つけて。
それを本ソースと同一ディレクトリに配置する。
サンプルが長くなっていく。
wxAuiとwxBoxSizerを混ぜたものである。
ソース:
-module(auiandboxTest).
-include_lib("wx.hrl").
-export([start/0]).
-define(pi, wxAuiPaneInfo).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"Aui and BoxSizer Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
%% Create AuiManager
Manager = wxAuiManager:new([{managed_wnd, Panel}
]),
%% Create wxAuiPaneInfo
Pane = ?pi:new(),
?pi:closeButton(Pane),
?pi:right(Pane),
?pi:dockable(Pane, [{b, true}]),
?pi:floatingSize(Pane, 300,200),
?pi:minSize(Pane, {50,50}),
?pi:paneBorder(Pane),
?pi:floatable(Pane, [{b, true}]),
%% Create Pane Clone?
create_pane(Panel, Manager, Pane),
create_pane(Panel, Manager,
?pi:caption(?pi:top(?pi:new(Pane)), "One")),
create_pane(Panel, Manager,
?pi:caption(?pi:left(?pi:new(Pane)), "two")),
create_pane(Panel, Manager,
?pi:caption(?pi:bottom(?pi:new(Pane)), "Three")),
create_pane(Panel, Manager,
?pi:caption(?pi:centre(?pi:new(Pane)), "Four")),
wxPanel:setSizer(Panel, MainSizer),
wxAuiManager:connect(Manager, aui_pane_button, [{skip,true}]),
wxAuiManager:connect(Manager, aui_pane_maximize, [{skip,true}]),
wxAuiManager:update(Manager),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
create_pane(Parent, Manager, Pane) ->
TextCtrl = wxTextCtrl:new(Parent, ?wxID_ANY, [{size, {300,200}},
{value, "An empty pane"},
{style, 0
bor ?wxDEFAULT
bor ?wxTE_MULTILINE}]),
wxAuiManager:addPane(Manager, TextCtrl, Pane),
TextCtrl.
wx.hrlはErlangのインストールディレクトリ内にあるものを使用している。検索をかけて見つけて。
それを本ソースと同一ディレクトリに配置する。
サンプルが長くなっていく。
wxErlang wxNotebook Sample サンプル
wxNotebookについては、wxWidgetsではこんな感じに記述されている。
「このクラスは、関連するタブで複数のウィンドウを管理するノートブックのコントロールを表します。」
「このクラスは、関連するタブで複数のウィンドウを管理するノートブックのコントロールを表します。」
ソース:
-module(notebookTest).
-include_lib("wx.hrl").
-export([start/0]).
-define(pi, wxAuiPaneInfo).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"NoteBook Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Create AuiManager
Manager = wxAuiManager:new([{managed_wnd, Panel}
]),
%% Create wxAuiPaneInfo
Pane = ?pi:new(),
?pi:closeButton(Pane),
%?pi:right(Pane),
?pi:dockable(Pane, [{b, true}]),
?pi:floatingSize(Pane, 300,200),
?pi:minSize(Pane, {50,50}),
?pi:paneBorder(Pane),
?pi:floatable(Pane, [{b, true}]),
?pi:centrePane(Pane),
%Pane2 = wxAuiPaneInfo:new(Pane),
%?pi:centrePane(Pane2),
%% Create Pane2 Clone?
create_notebook(Panel, Manager, Pane),
wxAuiManager:connect(Manager, aui_pane_button, [{skip,true}]),
wxAuiManager:connect(Manager, aui_pane_maximize, [{skip,true}]),
wxAuiManager:update(Manager),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
create_notebook(Parent, Manager, Pane) ->
Style = (0
bor ?wxAUI_NB_DEFAULT_STYLE
bor ?wxAUI_NB_TOP
bor ?wxAUI_NB_WINDOWLIST_BUTTON
bor ?wxAUI_NB_CLOSE_ON_ACTIVE_TAB
bor ?wxAUI_NB_TAB_MOVE
bor ?wxAUI_NB_SCROLL_BUTTONS
),
Notebook = wxAuiNotebook:new(Parent, [{style, Style}]),
Tab1 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab1, ?wxBLACK),
wxButton:new(Tab1, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab1, "You can", []),
Tab2 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab2, ?wxRED),
wxButton:new(Tab2, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab2, "rearrange", []),
Tab3 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab3, ?wxGREEN),
wxButton:new(Tab3, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab3, "these tabs", []),
wxAuiManager:addPane(Manager, Notebook, Pane),
wxAuiNotebook:connect(Notebook, command_button_clicked),
wxAuiNotebook:connect(Notebook, command_auinotebook_page_close, [{skip, false}]),
wxAuiNotebook:connect(Notebook, command_auinotebook_page_changed),
Notebook.
wx.hrlはErlangのインストールディレクトリ配下を検索すると、みつかる。
本ソースと同一ディレクトリに配置する。
本サンプルはErlangインストールディレクトリ配下にあるdemoディレクトリのex_aui.erlを参考にしている。いや、ほぼ同じである。
「New Tab」ボタンを押下しても何も起きないので注意。
「New Tab」ボタンを押下しても何も起きないので注意。
wxErlang wxAui Sample サンプル
wxAuiを使ったサンプルを作った。Erlangのインストールディレクトリにあるdemoのex_aui.erlから画面部分を抜粋したものだ。
wxAuiは画面?をドッキングする機能みたい。
以下を参照。
にょろぷにらん | wxPythonのwx.aui : http://mag.matrix.jp/mag/queen/log/soft/eid358.html
「One」の部分をクリックしたまま移動させると、画面がポッと出てきて、他の部分に移動させることができる。すげーな。
ソース:
-module(auiTest).
-include_lib("wx.hrl").
-export([start/0]).
-define(pi, wxAuiPaneInfo).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"Aui Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
%% Create AuiManager
Manager = wxAuiManager:new([{managed_wnd, Panel}
]),
%% Create wxAuiPaneInfo
Pane = ?pi:new(),
?pi:closeButton(Pane),
?pi:right(Pane),
?pi:dockable(Pane, [{b, true}]),
?pi:floatingSize(Pane, 300,200),
?pi:minSize(Pane, {50,50}),
?pi:paneBorder(Pane),
?pi:floatable(Pane, [{b, true}]),
%% Create Pane Clone?
create_pane(Panel, Manager, Pane),
create_pane(Panel, Manager,
?pi:caption(?pi:top(?pi:new(Pane)), "One")),
create_pane(Panel, Manager,
?pi:caption(?pi:left(?pi:new(Pane)), "two")),
create_pane(Panel, Manager,
?pi:caption(?pi:bottom(?pi:new(Pane)), "Three")),
Pane2 = wxAuiPaneInfo:new(Pane),
?pi:centrePane(Pane2),
%% Create Pane2 Clone?
create_notebook(Panel, Manager, ?pi:new(Pane2)),
wxPanel:setSizer(Panel, MainSizer),
wxAuiManager:connect(Manager, aui_pane_button, [{skip,true}]),
wxAuiManager:connect(Manager, aui_pane_maximize, [{skip,true}]),
wxAuiManager:update(Manager),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
create_notebook(Parent, Manager, Pane) ->
Style = (0
bor ?wxAUI_NB_DEFAULT_STYLE
bor ?wxAUI_NB_TOP
bor ?wxAUI_NB_WINDOWLIST_BUTTON
bor ?wxAUI_NB_CLOSE_ON_ACTIVE_TAB
bor ?wxAUI_NB_TAB_MOVE
bor ?wxAUI_NB_SCROLL_BUTTONS
),
Notebook = wxAuiNotebook:new(Parent, [{style, Style}]),
Tab1 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab1, ?wxBLACK),
wxButton:new(Tab1, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab1, "You can", []),
Tab2 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab2, ?wxRED),
wxButton:new(Tab2, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab2, "rearrange", []),
Tab3 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab3, ?wxGREEN),
wxButton:new(Tab3, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab3, "these tabs", []),
wxAuiManager:addPane(Manager, Notebook, Pane),
wxAuiNotebook:connect(Notebook, command_button_clicked),
wxAuiNotebook:connect(Notebook, command_auinotebook_page_close, [{skip, false}]),
wxAuiNotebook:connect(Notebook, command_auinotebook_page_changed),
Notebook.
create_pane(Parent, Manager, Pane) ->
TextCtrl = wxTextCtrl:new(Parent, ?wxID_ANY, [{size, {300,200}},
{value, "An empty pane"},
{style, 0
bor ?wxDEFAULT
bor ?wxTE_MULTILINE}]),
wxAuiManager:addPane(Manager, TextCtrl, Pane),
TextCtrl.
wxAuiは画面?をドッキングする機能みたい。
以下を参照。
にょろぷにらん | wxPythonのwx.aui : http://mag.matrix.jp/mag/queen/log/soft/eid358.html
「One」の部分をクリックしたまま移動させると、画面がポッと出てきて、他の部分に移動させることができる。すげーな。
ソース:
-module(auiTest).
-include_lib("wx.hrl").
-export([start/0]).
-define(pi, wxAuiPaneInfo).
start()->
Wx = wx:new(),
Frame = wx:batch(fun() -> create_window(Wx) end),
wxWindow:show(Frame),
loop(Frame),
wx:destroy(),
ok.
create_window(Wx)->
%% Create Frame
Frame = wxFrame:new(Wx,
-1,
"Aui Example",
%%[{size,{300,200}}]),
[{size,{-1,-1}}]),
%% Create Panel
%%Panel1 = wxPanel:new(Frame),
Panel = wxPanel:new(Frame, []),
%% Setup sizers
MainSizer = wxBoxSizer:new(?wxVERTICAL),
%% Create AuiManager
Manager = wxAuiManager:new([{managed_wnd, Panel}
]),
%% Create wxAuiPaneInfo
Pane = ?pi:new(),
?pi:closeButton(Pane),
?pi:right(Pane),
?pi:dockable(Pane, [{b, true}]),
?pi:floatingSize(Pane, 300,200),
?pi:minSize(Pane, {50,50}),
?pi:paneBorder(Pane),
?pi:floatable(Pane, [{b, true}]),
%% Create Pane Clone?
create_pane(Panel, Manager, Pane),
create_pane(Panel, Manager,
?pi:caption(?pi:top(?pi:new(Pane)), "One")),
create_pane(Panel, Manager,
?pi:caption(?pi:left(?pi:new(Pane)), "two")),
create_pane(Panel, Manager,
?pi:caption(?pi:bottom(?pi:new(Pane)), "Three")),
Pane2 = wxAuiPaneInfo:new(Pane),
?pi:centrePane(Pane2),
%% Create Pane2 Clone?
create_notebook(Panel, Manager, ?pi:new(Pane2)),
wxPanel:setSizer(Panel, MainSizer),
wxAuiManager:connect(Manager, aui_pane_button, [{skip,true}]),
wxAuiManager:connect(Manager, aui_pane_maximize, [{skip,true}]),
wxAuiManager:update(Manager),
%% Set Connect Close
wxFrame:connect(Frame, close_window),
Frame.
loop(Frame) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Frame),
ok
end.
create_notebook(Parent, Manager, Pane) ->
Style = (0
bor ?wxAUI_NB_DEFAULT_STYLE
bor ?wxAUI_NB_TOP
bor ?wxAUI_NB_WINDOWLIST_BUTTON
bor ?wxAUI_NB_CLOSE_ON_ACTIVE_TAB
bor ?wxAUI_NB_TAB_MOVE
bor ?wxAUI_NB_SCROLL_BUTTONS
),
Notebook = wxAuiNotebook:new(Parent, [{style, Style}]),
Tab1 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab1, ?wxBLACK),
wxButton:new(Tab1, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab1, "You can", []),
Tab2 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab2, ?wxRED),
wxButton:new(Tab2, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab2, "rearrange", []),
Tab3 = wxPanel:new(Notebook, []),
wxPanel:setBackgroundColour(Tab3, ?wxGREEN),
wxButton:new(Tab3, ?wxID_ANY, [{label,"New tab"}]),
wxAuiNotebook:addPage(Notebook, Tab3, "these tabs", []),
wxAuiManager:addPane(Manager, Notebook, Pane),
wxAuiNotebook:connect(Notebook, command_button_clicked),
wxAuiNotebook:connect(Notebook, command_auinotebook_page_close, [{skip, false}]),
wxAuiNotebook:connect(Notebook, command_auinotebook_page_changed),
Notebook.
create_pane(Parent, Manager, Pane) ->
TextCtrl = wxTextCtrl:new(Parent, ?wxID_ANY, [{size, {300,200}},
{value, "An empty pane"},
{style, 0
bor ?wxDEFAULT
bor ?wxTE_MULTILINE}]),
wxAuiManager:addPane(Manager, TextCtrl, Pane),
TextCtrl.
wx.hrlはErlangのインストールディレクトリ内にあるものを使用。本ソースと同一ディレクトリに配置。
ソースをブログに貼ると長いな。
登録:
投稿 (Atom)