目次

IMEオンでもTAB移動

swf8用

WindowsでIMEオンにしたが最後、TAB移動が一切できなくなる(ありえねー!)場合があります。バグですね。わかってるのはWindowsでswf8のとき。swf7とかMacの場合は大丈夫らしいです。

Actionscriptを裏技的に使ってるので下記のはswf8のみ対応。

この内容を表示するためには Adobe Flash Plugin が必要です。 [OpenLaszlo4.3.0(swf8)]

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
 
  <class name="wd_tab">
    <attribute name="_isShiftPressed" type="boolean" value="false"/>
    <attribute name="_isTabPressed" type="boolean" value="false"/>
    <attribute name="_isOpenLaszloKeydownAlive" type="boolean"/>
    <handler name="oninit">
      mc = canvas.getMCRef();
      mc.onKeyDown=function(){
        if(!_isOpenLaszloKeydownAlive){
          if(!_isTabPressed){
            if(Key.getCode()=="9"){
              if(_isShiftPressed){
                lz.Focus.prev();
              }else{
                lz.Focus.next();
              }
              setAttribute('_isTabPressed',true);
            }
            if(Key.getCode()=="16")setAttribute('_isShiftPressed',true);
          }
        }
      }
      mc.onKeyUp=function(){
        setAttribute('_isTabPressed',false);
        if(Key.getCode()=="16")setAttribute('_isShiftPressed',false);
      }
      Key.addListener(mc);
    </handler>
    <handler name="onkeyup" args="k" reference="lz.Keys">
      if(k=="9")setAttribute('_isOpenLaszloKeydownAlive',false);
    </handler>
    <handler name="onkeydown" args="k" reference="lz.Keys">
      if(k=="9")setAttribute('_isOpenLaszloKeydownAlive',true);
    </handler>
  </class>
 
  <wd_tab/>
 
  <hbox spacing="3">
    <vbox>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
    </vbox>
    <vbox>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
    </vbox>
    <vbox>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
    </vbox>
  </hbox>
</canvas>

swf9以上用

WindowsでIMEオンにしたが最後、TAB移動が一切できなくなる問題の回避方法。swf9以上専用です。

WindowsXPのFF3とIE6で確認しましたが、swf9だと正常に動きます。 でも。。。swf10だとTAB移動は正常なのにインライン変換ができません!! orz (惜しい!誰か直してください TT)。原因不明。OpenLaszloがバージョンアップしたら直るのかも?。あるいはFlashプラグインのバージョンアップで? ・・・というのはOpenLaszlo4.3.0のときの話で、OpenLaszlo4.6.1ではswf9/swf10の両方で正常でした。

この内容を表示するためには Adobe Flash Plugin が必要です。 (OpenLaszlo4.6.1/swf10)

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
 
  <!--swf9以上でコンパイル専用。swf8以下では動作しない。-->
 
  <class name="wd_tab_as3">
    <switch>
      <when runtime="swf9">
        <passthrough>
          import flash.events.KeyboardEvent;
        </passthrough>
      </when>
      <when runtime="swf10">
        <passthrough>
          import flash.events.KeyboardEvent;
        </passthrough>
      </when>
    </switch>
    <attribute name="_isShiftPressed" type="boolean" value="false"/>
    <attribute name="_isTabPressed" type="boolean" value="false"/>
    <attribute name="_isOpenLaszloKeydownAlive" type="boolean"/>
    <handler name="oninit">
      LFCApplication.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
      LFCApplication.stage.addEventListener(KeyboardEvent.KEY_UP,  onKeyUp);    
    </handler>
    <method name="onKeyDown" args="Key">
        if(!_isOpenLaszloKeydownAlive){
          if(!_isTabPressed){
            if(Key.keyCode=="9"){
              if(_isShiftPressed){
                lz.Focus.prev();
              }else{
                lz.Focus.next();
              }
              setAttribute('_isTabPressed',true);
            }
            if(Key.keyCode=="16")setAttribute('_isShiftPressed',true);
          }
        }
    </method>        
    <method name="onKeyUp" args="Key">
        setAttribute('_isTabPressed',false);
        if(Key.keyCode=="16")setAttribute('_isShiftPressed',false);
    </method>        
    <handler name="onkeyup" args="k" reference="lz.Keys">
      if(k=="9")setAttribute('_isOpenLaszloKeydownAlive',false);
    </handler>
    <handler name="onkeydown" args="k" reference="lz.Keys">
      if(k=="9")setAttribute('_isOpenLaszloKeydownAlive',true);
    </handler>
  </class>
 
  <wd_tab_as3/>
 
  <hbox spacing="3">
    <vbox>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
    </vbox>
    <vbox>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
    </vbox>
    <vbox>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
      <edittext/>
    </vbox>
  </hbox>
</canvas>