자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi 스피드버튼으로 한글 입력 되도록 할 때 Delphi7 은 이상이 없는데 XE10 은 한글이 쪼개집니다.
2018.05.09 16:54
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요,
동일한 소스로 테스트를 해봤습니다. 아주 간단한 소스인데..첨에 XE10 에서 안되길래
다른 방법(후킹이다 뭐다) 으로 해도 잘 안돼서.. Delphi7 으로 컴파일 해보니..잘 됩니다. ㅠㅠ
후킹으로 하는 거든, 단순한 키보드 이벤트로 하든 Delphi7 은 잘됩니다.
즉, [김] 을 스피드버튼으로 입력 시키면 XE10 에서는 ㄱ ㅣㅁ 이라고 나오고, Delphi7 에서는 [김] 제대로 나옵니다.
이거 때문에 며칠을 삽질하다가....도움 요청합니다.
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure SimulateKeystroke(VirtualKey: byte; ScanCode: DWORD);
begin
// keybd_event 함수를 사용한 키 조합(down, up) 발생
keybd_event(VirtualKey, // 키의 down
ScanCode, 0, 0);
keybd_event(VirtualKey, // 키의 up
ScanCode, KEYEVENTF_KEYUP, 0);
end;
procedure SimulateKeyDown(Key : byte);
begin
// keybd_event 함수를 사용한 키 down 발생
//keybd_event(Key, 0, 0, 0);
keybd_event(Key,MapVirtualkey(key, 0),0, 0);
end;
procedure SimulateKeyUp(Key : byte);
begin
// keybd_event 함수를 사용한 키 up 발생
//keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
keybd_event(Key,MapVirtualkey(Key, 0),KEYEVENTF_KEYUP,0);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
SimulateKeyDown(Ord('R'));
SimulateKeyUp(Ord('R'));
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
SimulateKeyDown(Ord('L'));
SimulateKeyUp(Ord('L'));
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
SimulateKeyDown(Ord('A'));
SimulateKeyUp(Ord('A'));
end;
end.
댓글 2
Delphi 스피드버튼으로 한글 입력 되도록 할 때 Delphi7 은 이상이 없는데 XE10 은 한글이 쪼개집니다.
2018.05.09 16:54
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요,
동일한 소스로 테스트를 해봤습니다. 아주 간단한 소스인데..첨에 XE10 에서 안되길래
다른 방법(후킹이다 뭐다) 으로 해도 잘 안돼서.. Delphi7 으로 컴파일 해보니..잘 됩니다. ㅠㅠ
후킹으로 하는 거든, 단순한 키보드 이벤트로 하든 Delphi7 은 잘됩니다.
즉, [김] 을 스피드버튼으로 입력 시키면 XE10 에서는 ㄱ ㅣㅁ 이라고 나오고, Delphi7 에서는 [김] 제대로 나옵니다.
이거 때문에 며칠을 삽질하다가....도움 요청합니다.
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure SimulateKeystroke(VirtualKey: byte; ScanCode: DWORD);
begin
// keybd_event 함수를 사용한 키 조합(down, up) 발생
keybd_event(VirtualKey, // 키의 down
ScanCode, 0, 0);
keybd_event(VirtualKey, // 키의 up
ScanCode, KEYEVENTF_KEYUP, 0);
end;
procedure SimulateKeyDown(Key : byte);
begin
// keybd_event 함수를 사용한 키 down 발생
//keybd_event(Key, 0, 0, 0);
keybd_event(Key,MapVirtualkey(key, 0),0, 0);
end;
procedure SimulateKeyUp(Key : byte);
begin
// keybd_event 함수를 사용한 키 up 발생
//keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
keybd_event(Key,MapVirtualkey(Key, 0),KEYEVENTF_KEYUP,0);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
SimulateKeyDown(Ord('R'));
SimulateKeyUp(Ord('R'));
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
SimulateKeyDown(Ord('L'));
SimulateKeyUp(Ord('L'));
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
SimulateKeyDown(Ord('A'));
SimulateKeyUp(Ord('A'));
end;
end.
저도 간단히 테스트 해봤습니다.해결방법은 찾지 못했는데 원인은 찾은 것 같아 공유합니다.
키 이벤트를 버튼마다 r > l > a 입력 시 ㄱㅣㅁ 이 표시됩니다.
키 이벤트 3개를 버튼하나에서 수행 시 정상적으로 표시됩니다.
위 증상으로 보아 스피드 버턴의 클릭(또는 MouseDown, MouseUp) 이벤트 등에서 한글조합을 방해하는 요소가 있을 것이로 추측됩니다.
아시다시피 델파이에서 VCL 관련된 소스코드를 제공하고 있으니 스피드버튼의 해당 이벤트 부분을 잘 살펴보시면 힌트를 얻을 수도 있을 것 같습니다.
참고로, 델파이 가상키보드 컴포넌트(TVirtualKeyboard)에서도 한글조합이 되지 않네요.ㅠㅜ
자세한 원인과 해결방법은 직접 찾아보시기 바랍니다. 저도 시간이 된다면 다시한번 살펴보도록 하겠습니다.