你好
我嘗試使用條形碼掃描儀檢查數據庫中的條目。
它將輸入數字並在末尾給出一個輸入,從而觸發“文本編輯框”的腳本。
不起作用的方法是將焦點重置回框中以輸入下一個數字。
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-key Strike/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 社區的“願望清單”部分。 檢查是否有人已經提出了類似的需求。 如果沒有,請添加以供考慮。
目前尚不清楚您想從這次討論中得到什麼。
謝謝,我知道,但該功能仍然缺失。
我可以使用 MouseBox 和 SetKey 函數至少將其減少為按 TAB 一次以將焦點放在 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>
看來 << 設置焦點和 << 單擊後恢復焦點消息不是文本編輯框協議的一部分。
您可以通過選擇“幫助”>“腳本索引”自行檢查。 將列表更改為“顯示框”,然後選擇“文本編輯框”項。 您不會在顯示整個協議的第二個列表中找到此消息。
您可以搜索該消息,例如,在過濾框中輸入“搜索”。 您將找不到帶有此消息的其他對象。
您還可以直接向顯示框對象詢問其協議:
Show Properties( Text Edit Box( "test" ) );