こんにちは
バーコード スキャナーを使用してデータベース内のエントリをチェックしようとします。
数値を入力し、最後に Enter キーを押すと、「テキスト編集ボックス」のスクリプトがトリガーされます。
次の番号を入力するためにボックスにフォーカスをリセットしてもうまくいきません。
Names Default To Here( 1 );
dt = current data table();
try(win1<<CLOSE window=""></CLOSE>
の助けを借りた私の現在の回避策https://community.jmp.com/t5/Discussions/JSL-to-input-an-Enter-keystrom/td-p/5872
基本的には次のとおりです。テキスト編集ボックスの周囲にマウス ボックスを置きます。 マウス ボックスにフォーカスを設定し、Tab キーを押すと、テキスト編集ボックスにフォーカスが設定されます。
Names Default To Here( 1 );
clear log();
if(1==1,
VK_TAB = Hex to Number( "00000009" ); //&H9
KEYEVENTF_EXTENDEDKEY = Hex to Number( "00000001" ); //&H1
KEYEVENTTF_KEYDOWN = 0;
KEYEVENTF_KEYUP = Hex to Number( "00000002" ); //&H2
kernel32 = Load Dll( "kernel32" );
kernel32 << DeclareFunction( "Sleep", Convention( STDCALL ), Alias( "Sleep" ),
Arg( Int32, "dwMilliseconds" ),Returns( Void ) );
user32 = Load Dll( "User32" );
user32 << DeclareFunction( "FindWindowA", Convention( STDCALL ), Alias( "FindWindow2" ),
Arg( UInt32, input, "lpClassName" ),Arg( AnsiString( 200 ), input, "lpCaption" ),Returns( UIntPtr ) );
user32 << DeclareFunction( "SetForegroundWindow", Convention( STDCALL ), Alias( "SetForegroundWindow" ),
Arg( UIntPtr, "hWnd" ),Returns( UInt32 ));
user32 << DeclareFunction( "keybd_event", Convention( STDCALL ), Alias( "keybd_event" ),
Arg( UInt8, "bVk" ),Arg( UInt8, "bScan" ),Arg( UInt32, "dwFlags" ),Arg( UIntPtr, "dwExtraInfo" ),Returns( Void ));
user32 << DeclareFunction( "GetKeyState", Convention( STDCALL ), Alias( "GetKeyState" ),
Arg( Int32, "nVirtKey" ),Returns( Int32 ) );
shell32 = Load Dll( "shell32" );
shell32 << DeclareFunction( "ShellExecuteA", Convention( STDCALL ), Alias( "ShellExecute" ),
Arg( UIntPtr, input, "hWnd" ),Arg( AnsiString( 20 ), "lpOperation" ),Arg( AnsiString( 256 ), "lpFile" ),
Arg( AnsiString( 256 ), "lpParameters" ), /* Arg( UInt32, "lpParameters" ), */Arg( UInt32, "lpDirectory" ),
Arg( UInt32, "nShowCmd" ),Returns( UInt32 ));
key = function( { l_key },
user32 << keybd_event( l_key, 0, 0, 0 ); // press key
user32 << keybd_event( l_key, 0, KEYEVENTF_KEYUP, 0 ); // release key
);
); // Setup the win key command code from the JMP community: https://community.jmp.com/t5/Discussions/JSL-to-input-an-Enter-keystroke/td-p/5872
reset_focus = expr(
wait(0.1);
mb<<SETFOCUS></SETFOCUS>
編集: bb1 =ボタンボックス( "チェック" 、リセットフォーカス; )はフォーカスを混乱させているようです(フォーカスを自分自身に戻してから次の項目に戻します)。
省略について知っているなら、何を言いたいのですか?
回避策が必要ですか? もしそうなら、誰かがこの議論であなたを助けてくれるかもしれません。
新しい機能が必要ですか? その場合は、JMP コミュニティのウィッシュリスト部分にアクセスしてください。 誰かがすでにこのようなニーズをリクエストしていないかどうかを確認してください。 そうでない場合は、検討のために追加してください。
この議論からあなたが何を望んでいるのかは明らかではありません。
THX のことは知っていますが、その機能はまだありません。
MouseBox と SetKey 関数を使用して、少なくとも Tab キーを 1 回押して TextEditBox にフォーカスするように減らすことができます。
Names Default To Here( 1 );
dt = current data table();
try(win1<<CLOSE window=""></CLOSE>
TextEditBoxのパラメータ(...,...,...,TABキーまたはENTERキーを押したときの次のオブジェクト)に設定すると良いでしょう。
私の場合:
pnr = text edit box("example",set width(160),set nlines(1),<<SETSCRIPT></SETSCRIPT>
<< Set Focus および << Restore Focus After Click メッセージは、テキスト編集ボックスのプロトコルの一部ではないようです。
[ヘルプ] > [スクリプト インデックス] を選択すると、自分で確認できます。 リストを表示ボックスに変更し、TextEditBox 項目を選択します。 このメッセージは、プロトコル全体を示す 2 番目のリストには見つかりません。
たとえば、フィルター ボックスに「検索」と入力して、このメッセージを検索できます。 このメッセージを持つ他のオブジェクトは見つかりません。
表示ボックス オブジェクトにそのプロトコルを直接問い合わせることもできます。
Show Properties( Text Edit Box( "test" ) );