애들센스


사용자를 배려한 한/영 입력 오피스/VBA/Office.JS

옛날 얘기인데, 각종 업무용 프로그램을 액세스로 개발하여 밥먹고 사는 사람이 있었는 데, 개발해놓은 걸 보니 날짜입력을 그냥 텍스트박스로 처리해두고 있었다. Calendar컨트롤을 사용하면 입력도 편리하고 제대로 일자 포맷에 맞게 입력되었는 지 체크하는 수고도 덜 수 있을 텐데 그리 하지 않았다.

이유를 물어보니 , 본인도 그런 점을 알지만 다년 간의 경험상 그런 컨트롤을 사용하다보면 프로그램도 무거워지고(액세스는 디비를 같이 담고 있으니 더욱 그럴 만하다) 결정적으로 불안정해져 실행중 프로그램이 죽는 경우가 있다고 한다. 잔뜩 입력하다가 프로그램이 죽는 것보단 불편한게 나을 것이다. 게다가 달력컨트롤이 기본이 아니어서 PC마다 없는 경우가 생길 수 있다. '가지 많은 나무에 바람 잘 날 없다'는 속담이 통하는 대목이다.

입력중 불편한 사항중 하나는 화면을 안보고 입력하다보니, IME가 한글이 아니라 영문상태 또는 그 반대의 경우이다. 한글입력이 필요하거나 영문입력이 필요한 시점에서 IME가 자동으로 입력모드를 변경해주는 배려를 해줄 수 있다. 다음은 API를 사용하여 입력모드를 바꾸는 예이다.
Private Declare Function ImmGetContext _
Lib "imm32.dll" (ByVal hwnd As Long) As Long
Private Declare Function ImmSetConversionStatus _
Lib "imm32.dll" (ByVal himc As Long, _
ByVal dw1 As Long, ByVal dw2 As Long) As Long
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Const IME_CMODE_NATIVE = &H1
Private Const IME_CMODE_HANGEUL = IME_CMODE_NATIVE
Private Const IME_CMODE_ALPHANUMERIC = &H0
Private Const IME_SMODE_NONE = &H0

Private Function GetAppHandle() As Long
Dim dVersion As Double

dVersion = Application.Version

If dVersion < 10 Then
GetAppHandle = FindWindow("XLMAIN", _
Application.Caption)
Else
GetAppHandle = Application.hwnd
End If
End Function

Private Sub demoChangeIME()
Dim hWndIME As Long
Dim hWndApp As Long

'// 엑셀의 핸들을 구함
hWndApp = GetAppHandle

'// 입력모드의 핸들을 구한다
hWndIME = ImmGetContext(hWndApp)

'// 영어 모드로 변환
Call ImmSetConversionStatus(hWndIME, _
IME_CMODE_ALPHANUMERIC, IME_SMODE_NONE)
InputBox "English 입력모드"

'// 한글 모드로 변환
Call ImmSetConversionStatus(hWndIME, _
IME_CMODE_HANGEUL, IME_SMODE_NONE)
InputBox "한국어 입력모드"

End Sub

덧글

  • 나인테일 2020/01/22 16:38 # 답글

    달력 컨트롤은 웹에서도 계륵이죠. 오늘내일 하는 날짜 입력할 때는 편리한데 연 단위로 점프해야 하는 날짜 입력에선 구글 스프레드시트같이 텍스트 입력이 다른 선택지로 제공되지 않으면 사람 환장하죠. 웹페이지 수주 받을때도 그래서 손님들이 예약 날짜 잡는 것 같은 인터페이스 같은게 아니면, 이를테면 회사 측에서 문서나 재고 관리 같은걸 해야 하고 날짜 입력이 다량으로 이루어져야 하는 상황에선 캘린더가 좀 꺼려지더군요.

    notion 같은 서비스가 그런 식으로 되어있어서 불편해요.
  • 타임버드 2020/01/22 23:38 # 답글

    실무에서 그런 애로점이 있군요. 특히 날짜를 대량으로 입력하는 상황은 생각해보질 않았어요. 좋은 경험담을 알려주셔서 감사합니다.
댓글 입력 영역