라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3) 기타기능
라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스
라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3) 기타기능
라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I
라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II
5. 한글, 영문 입력 모드 바꾸기
웹사이트 이름을 한글로 입력하게 되어 있는 Edit 컨트롤이면 별도의 한/영 키 전환 없이 자동으로 한글입력모드가 되면 편하다. 영문 입력만 해야 한다면 자동으로 영문 입력모드로 전환되면 된다.
하지만 라자루스는 델파이와 다르게 입력기를 제어하기가 어렵다. 입력기가 운영체제와 밀접하게 연관되어 있어서 , 크로스 플랫폼을 지향하는 라자루스와는 방향이 맞지 않기 때문이다.
그래서 입력 컨트롤의 입력기 모드를 제어하는 ImeMode Property 가 구현되어 있지 않다. 소스를 보면 해당 부분은 주석 처리가 되어 있다. 하지만 다행스럽게도 입력기를 제어하기 위한 인터페이스는 파스칼로 구현되어 있다. imm.pas 에 인터페이스가 있기 때문에 기능을 사용하고 싶으면 uses 에 imm 을 추가하면 된다. 그렇다면 라자루스에서 어떻게 구현할 것인가가 문제인데, 그냥 단순하게 입력 컨트롤이 포커스를 받으면 입력모드를 바꾸는 것으로 구현했다. 입력 컨트롤이 포커스를 잃으면 다시 원래대로 돌아가면 된다.
Edit1 컨트롤은 한글을 우선 입력받는 컨트롤이고 Edit2 는 영문을 우선 입력받는 컨트롤이라고 가정한다. Edit1 이 포커스를 받으면 OnEnter 이벤트 핸들러가 동작한다. 이때 입력기를 한글 입력모드로 바꾸고 , 포커스를 잃어버리는 OnExit 에서 원래의 입력모드로 전환하면 된다.
procedure TForm1.Edit1Enter(Sender: TObject);
begin
ImmSetConversionStatus(ImmGetContext(Edit1.Handle), IME_CMODE_HANGEUL, IME_SMODE_NONE);
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
ImmSetConversionStatus(ImmGetContext(Edit1.Handle), IME_CMODE_ALPHANUMERIC, IME_SMODE_NONE);
end;
6. 클립보드
uses 에 Clipbrd 를 추가한다. Clipboard.AsText 로 클립보드에 복사한다. [복사] 버튼을 누르면 클립보드에 복사하게 되므로 아이디 나 비밀번호 입력시에 Ctrl+V 로 붙여넣기 하면 된다.
begin
Clipboard.AsText := EditPW.Text;
end;
procedure TMainForm.btnCopyIDClick(Sender: TObject);
begin
Clipboard.AsText := EditID.Text;
end;
7. 인터넷 주소 연결
OpenURL 을 사용한다. uses 에 LCLIntf 를 추가한다. 웹사이트 입력란에 아무것도 없으면 한글 이름으로 구글 검색을 하도록 만든다. 웹사이트 주소를 제대로 입력했다면 OpenURL 에서 True 반환하여 Exit 한다. 아니라면 다음 문장을 실행하는데 'http://' 를 이름 앞에 붙이는 것이다. 실행해 본 결과 https 가 가능하도록 처리한 웹사이트들은 http 로 연결을 시도하면 대부분 자동으로 https 로 연결한다.
begin
if EditWebSite.Text = '' then
begin
OpenURL('www.google.com/search?q=' + EditNameKorean.Text);
Exit;
end;
if OpenURL(EditWebSite.Text) then Exit;
if OpenURL('http://' + EditWebSite.Text) then Exit;
end;
4편에서는 엑셀파일로 출력하는 것을 구현해 본다.
4편에서 계속
https://appleii.tistory.com/177