자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey '완료' 버튼의 키 값이 궁금합니다.
2020.01.14 16:25
델파이 10.3.3
갤럭시 J7
안드로이드 8.1.0
이 폰에서 Edit에 입력 시 '완료' 버튼이 있는데 이 버튼의 키 값이 궁금합니다.
이 버튼을 누르면 엔터키 처럼 동작하고 싶은데....
당연히 리턴키인 줄 알고 아래와 같이 체크를 해 보았는데 안드로이드에서는 작동이 안 됩니다.
윈도우에서는 잘 되고...
procedure TForm1.edtFindTextKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
if (Key = 13) or (Key = 10) then
showmessage('KeyDownEvent Key=' + inttostr(Key) + ', KeyChar=' + KeyChar);
// 또는...
if Key = vkReturn then // vkLineFeed
begin
btnSearchClick(nil);
Key := 0;
end;
end;
이 전 버전에서는 위와 같이 코딩해서 사용했었는데 지금은 안 되네요...
이 '완료'의 키 값이 무엇일까요?
댓글 3
-
푸른솔
2020.01.16 15:11
-
푸른솔
2020.01.16 15:30
TEdit의 ReturnKeyType이란게 있네요...
아래와 같이 여섯개가 있는데...
TReturnKeyType = (Default, Done, Go, Next, Search, Send);
이중에서 Go, Search, Send만 Return값이 발생합니다...
Default, Done, Next는 Return 값이 발생하지 않고요....
이 간단한(?) 걸 찾느라 좀 해맸네요..
참고하시라 올려 놓습니다...
-
험프리
2020.01.16 17:43
우선 답변 달아주셔서 대단히 감사합니다.
저도 찾아보니 푸른솔님이 파악한게 맞네요.
ReturnKeyType을 Go 등으로 설정하고 사용하시는 것이 좋을것 같습니다.
내용을 좀더 보탭니다.^^
$(source)\rtl\androiddex\java\fmx\src\com\embarcadero\firemonkey\text\FMXEditText.java 파일의 내용을보면 IME_ACTION_DONE 모드인 경우 키보드를 감추고 아무동작도 하지 않습니다.
(즉, vkReturn이 발생하지 않습니다.)
public void onEditorAction(int actionCode) {
// Disable default processing logic of ReturnKey.
if (actionCode == EditorInfo.IME_ACTION_DONE) {
VirtualKeyboard virtualKeyboard = ((FMXNativeActivity) getContext()).getVirtualKeyboard();
virtualKeyboard.hide(this);
} else {
// Delegate handle Editor action to FMX side.
for (FMXTextListener listener : listeners) {
listener.onEditorAction(actionCode);
}
}
}
또한,
$(source)\fmx\FMX.Platform.UI.Android.pas 파일을 보면 IME_ACTION_NEXT 인경우 vkTab을 발생합니다.
procedure TFMXTextListener.onEditorAction(actionCode: Integer);
var
KeyCode: Word;
KeyChar: Char;
begin
if FTextService.Multiline then
Exit;
if actionCode = TJEditorInfo.JavaClass.IME_ACTION_NEXT then
KeyCode := vkTab
else
KeyCode := vkReturn;
KeyChar := #0;
PlatformAndroid.TextInputManager.KeyDown(KeyCode, KeyChar, []);
PlatformAndroid.TextInputManager.KeyUp(KeyCode, KeyChar, [], (KeyCode = 0) and (KeyChar = #0));
end;
Firemonkey '완료' 버튼의 키 값이 궁금합니다.
2020.01.14 16:25
델파이 10.3.3
갤럭시 J7
안드로이드 8.1.0
이 폰에서 Edit에 입력 시 '완료' 버튼이 있는데 이 버튼의 키 값이 궁금합니다.
이 버튼을 누르면 엔터키 처럼 동작하고 싶은데....
당연히 리턴키인 줄 알고 아래와 같이 체크를 해 보았는데 안드로이드에서는 작동이 안 됩니다.
윈도우에서는 잘 되고...
procedure TForm1.edtFindTextKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
if (Key = 13) or (Key = 10) then
showmessage('KeyDownEvent Key=' + inttostr(Key) + ', KeyChar=' + KeyChar);
// 또는...
if Key = vkReturn then // vkLineFeed
begin
btnSearchClick(nil);
Key := 0;
end;
end;
이 전 버전에서는 위와 같이 코딩해서 사용했었는데 지금은 안 되네요...
이 '완료'의 키 값이 무엇일까요?
댓글 3
-
푸른솔
2020.01.16 15:11
-
푸른솔
2020.01.16 15:30
TEdit의 ReturnKeyType이란게 있네요...
아래와 같이 여섯개가 있는데...
TReturnKeyType = (Default, Done, Go, Next, Search, Send);
이중에서 Go, Search, Send만 Return값이 발생합니다...
Default, Done, Next는 Return 값이 발생하지 않고요....
이 간단한(?) 걸 찾느라 좀 해맸네요..
참고하시라 올려 놓습니다...
-
험프리
2020.01.16 17:43
우선 답변 달아주셔서 대단히 감사합니다.
저도 찾아보니 푸른솔님이 파악한게 맞네요.
ReturnKeyType을 Go 등으로 설정하고 사용하시는 것이 좋을것 같습니다.
내용을 좀더 보탭니다.^^
$(source)\rtl\androiddex\java\fmx\src\com\embarcadero\firemonkey\text\FMXEditText.java 파일의 내용을보면 IME_ACTION_DONE 모드인 경우 키보드를 감추고 아무동작도 하지 않습니다.
(즉, vkReturn이 발생하지 않습니다.)
public void onEditorAction(int actionCode) {
// Disable default processing logic of ReturnKey.
if (actionCode == EditorInfo.IME_ACTION_DONE) {
VirtualKeyboard virtualKeyboard = ((FMXNativeActivity) getContext()).getVirtualKeyboard();
virtualKeyboard.hide(this);
} else {
// Delegate handle Editor action to FMX side.
for (FMXTextListener listener : listeners) {
listener.onEditorAction(actionCode);
}
}
}
또한,
$(source)\fmx\FMX.Platform.UI.Android.pas 파일을 보면 IME_ACTION_NEXT 인경우 vkTab을 발생합니다.
procedure TFMXTextListener.onEditorAction(actionCode: Integer);
var
KeyCode: Word;
KeyChar: Char;
begin
if FTextService.Multiline then
Exit;
if actionCode = TJEditorInfo.JavaClass.IME_ACTION_NEXT then
KeyCode := vkTab
else
KeyCode := vkReturn;
KeyChar := #0;
PlatformAndroid.TextInputManager.KeyDown(KeyCode, KeyChar, []);
PlatformAndroid.TextInputManager.KeyUp(KeyCode, KeyChar, [], (KeyCode = 0) and (KeyChar = #0));
end;
숫자, 영문, 한글을 쳐 봐도 이벤트가 발생하지 않습니다..
그런데 딱 하나 백스페이스는 이벤트가 발생하네요..
ControlType이 Styled, Platform 둘 다 동일합니다...
이것이 정상적인 작동인지 모르겠네요... 이전 버전에선 된 것 같은데...
안드로이드의 상황입니다..
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
ShowMessage('Key Down: ' + Key.ToString);
end;
procedure TForm1.Edit3KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
ShowMessage('Key Up: ' + Key.ToString);
end;