2011年6月5日日曜日

wxErlang wxTextCtrl Enterキーのイベントを拾う

これだけのために何時間費やしただろうか。
Enterキーのイベントを拾うだけで。

キーポイントとなるところを赤字にしておくので、参照してほしい。
解説する(いつもしていないが)力がない。疲れた:-P

ソース:

-module(irc2).
-export([start/0]).
-include_lib("wx.hrl").

-define(wxID_txtEdit,1000).
-define(wxID_txtUnEdit,1001).

start() ->
    Wx = wx:new(),
    {Dialog,TxtEdit,TxtUnEdit} = wx:batch(fun() -> create_window(Wx) end),
    wxWindow:show(Dialog),
    loop(Dialog,TxtEdit,TxtUnEdit),
    wx:destroy(),
    ok.

create_window(Wx)->
    Dialog = wxDialog:new(Wx,
-1,
"Dialog IRC",
[{size,{300,200}}]),
%[{size,?wxDefaultSize}]),
    OptnTE = [{pos,{1,150}},{size,{290,20}},{style,?wxTE_PROCESS_ENTER}],
    TxtEdit = wxTextCtrl:new(Dialog,
    ?wxID_txtEdit,
    OptnTE),

    % set multiline({style,?wxTE_MULTILINE})
    OptnTUE = [{pos,{1,0}},{size,{290,150}},{style,?wxTE_MULTILINE}],
    TxtUnEdit = wxTextCtrl:new(Dialog,
      ?wxID_txtUnEdit,
      OptnTUE),
 
    % set unable edit
    wxTextCtrl:setEditable(TxtUnEdit,false),
    % add text
    %wxTextCtrl:appendText(TxtUnEdit,"Test\rTest\r"),
    %wxTextCtrl:appendText(TxtUnEdit,"Append"),
 
    % connect
    wxDialog:connect(Dialog, close_window),
    wxTextCtrl:connect(TxtEdit,command_text_enter),
    %wxEvtHandler:connect(TxtEdit,key_down),
    %wxTextCtrl:connect(TxtEdit,key_down),
    %wxKeyEvent:connect(TxtEdit,key_down),

    {Dialog,TxtEdit,TxtUnEdit}.

loop(Dialog,TxtEdit,TxtUnEdit) ->
    receive
% Window Close Event
#wx{event=#wxClose{}} ->
   io:format("~p Closing window ~n",[self()]),
   wxWindow:destroy(Dialog),
   ok;
#wx{event=#wxCommand{type = command_text_enter}} ->
% #wx{event=#wxKey{keyCode = ?WXK_RETURN}} ->
   Msg = wxTextCtrl:getValue(TxtEdit),
   io:format("String: ~p~n",[Msg]),
   wxTextCtrl:appendText(TxtUnEdit,Msg),
   loop(Dialog,TxtEdit,TxtUnEdit)
    end.


最終的な解決ができたのは、ここを見たから。
Paste number 88370: chat.erl :
http://paste.lisp.org/display/88370

0 件のコメント:

コメントを投稿