기술탐구

라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3) 기타기능

appleii 2021. 8. 11. 11:00

 

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 로 붙여넣기 하면 된다.

procedure TMainForm.btnCopyPWClick(Sender: TObject);
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 로 연결한다. 

procedure TMainForm.btnOpenURLClick(Sender: TObject);
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