你好
我尝试使用条形码扫描仪检查数据库中的条目。
它将输入数字并在末尾给出一个输入,触发“文本编辑框”的脚本。
不起作用的是将焦点重置回框以输入下一个数字。
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-keystroke/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 键以专注于 TextEditBox。
Names Default To Here( 1 );
dt = current data table();
try(win1<<CLOSE window=""></CLOSE>
最好在 TextEditBox(...,...,...,next object when press TAB or ENTER) 的参数中设置。
就我而言:
pnr = text edit box("example",set width(160),set nlines(1),<<SETSCRIPT></SETSCRIPT>
<< Set Focus 和 << Restore Focus After Click 消息似乎不是文本编辑框协议的一部分。
您可以通过选择“帮助”>“脚本索引”来自行检查。 将列表更改为显示框,然后选择 TextEditBox 项。 您不会在显示整个协议的第二个列表中找到此消息。
您可以搜索此消息,例如,在筛选框中输入“搜索”。 您不会找到带有此消息的其他对象。
您还可以直接向显示框对象询问其协议:
Show Properties( Text Edit Box( "test" ) );