Q&A

  • 한글입력시 처음 자모를 따오는 처방을 내려주세여^^
한글입력시 만약

exe) '한메일'이라고 입력시 'ㅎ'을 가져오고 싶습니다 그리고 'ㅎ'을 가져와서 '하'로 치환할려고 합니다

'까마귀' 라고 입력해도 '가'로 치환하는 것이죠

'빵구' 라고 입력해도 '바'로 치환, 즉 처음 입력되는 한글키를 잡아서 가,나,다,라,마,바,사......로 만들려는 것이죠



어떤방법이 있을까여 꼭 좀 부탁합니다

나의 머리에 한계는 이렇게도 빨리 오는군여...흑흑 3일밤을 지샌 후 올립니다....



꼭좀 처방을 내려주세염...

1  COMMENTS
  • Profile
    조규춘 2000.03.30 05:33
    얀 wrote:

    > 한글입력시 만약

    > exe) '한메일'이라고 입력시 'ㅎ'을 가져오고 싶습니다 그리고 'ㅎ'을 가져와서 '하'로 치환할려고 합니다

    > '까마귀' 라고 입력해도 '가'로 치환하는 것이죠

    > '빵구' 라고 입력해도 '바'로 치환, 즉 처음 입력되는 한글키를 잡아서 가,나,다,라,마,바,사......로 만들려는 것이죠

    >

    > 어떤방법이 있을까여 꼭 좀 부탁합니다

    > 나의 머리에 한계는 이렇게도 빨리 오는군여...흑흑 3일밤을 지샌 후 올립니다....

    >

    > 꼭좀 처방을 내려주세염...



    제가 도움이 될만한 것을 찾아서 올립니다. 이것을 참조하시면 나을거여요!

    그럼 얀님 파이팅!





    코드에 앞서 잠깐 설명하자면 다음 코드에는 두가지 함수가 있습니다.



    1. HanDiv

    2. HanCom



    HanDiv는 '강'을 'ㄱㅏㅇ'으로 변환하는 함수이며 HanCom은 그 반대입니다.

    각 함수의 파라메터인 Han, Han3는 각각 한글의 한 글자, 그리고 초,중,종성

    으로 나누

    어진 글자들입니다. Han은 최소

    2바이트, Han3은 6바이트의 메모리가 할당되어 있어야 합니다.

    (함수내에서는 null-terminated처리를 하지 않습니다.)



    -------코드--------



    // Programmed by Jounlai Cho (khouse@nuri.net)

    // April 17, 1998



    const

    ChoSungTbl: PChar = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ';

    JungSungTbl: PChar = 'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ';

    JongSungTbl: PChar = ' ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ



    ';

    // ^^요기는 꼭 2칸을 띄어야 합니다.





    UniCodeHangeulBase = $AC00;

    UniCodeHangeulLast = $D79F;



    function HanDiv(const Han: PChar; Han3: PChar): Boolean;

    var

    UniCode: Integer;

    ChoSung, JungSung, JongSung: Integer;

    begin

    Result := False;

    // if StrLen(Han) < 2 then Exit;



    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Han, 2, @UniCode, 1);



    if (UniCode < UniCodeHangeulBase) or

    (UniCode > UniCodeHangeulLast) then Exit;



    UniCode := UniCode - UniCodeHangeulBase;

    ChoSung := UniCode div (21 * 28);

    UniCode := UniCode mod (21 * 28);

    JungSung := UniCode div 28;

    UniCode := UniCode mod 28;

    JongSung := UniCode;



    StrLCopy(Han3, ChoSungTbl + ChoSung * 2, 2);

    StrLCopy(Han3 + 2, JungSungTbl + JungSung * 2, 2);

    StrLCopy(Han3 + 4, JongSungTbl + JongSung * 2, 2);



    Result := True;

    end;



    function HanCom(const Han3: PChar; Han: PChar): Boolean;

    var

    UniCode: Integer;

    ChoSung, JungSung, JongSung: Integer;

    ChoSungPos, JungSungPos, JongSungPos: Integer;

    begin

    Result := False;

    // if StrLen(Han3) < 6 then Exit;



    ChoSungPos := Pos(Copy(String(Han3), 1, 2), ChoSungTbl);

    JungSungPos := Pos(Copy(String(Han3), 3, 2), JungSungTbl);

    JongSungPos := Pos(Copy(String(Han3), 5, 2), JongSungTbl);



    if (ChoSungPos and JungSungPos and JongSungPos) = 0 then Exit;



    ChoSung := (ChoSungPos - 1) div 2;

    JungSung := (JungSungPos - 1) div 2;

    JongSung := (JongSungPos - 1) div 2;



    UniCode := UniCodeHangeulBase +

    (ChoSung * 21 + JungSung) * 28 + JongSung;



    WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK,

    @UniCode, 1, Han, 2, nil, nil);



    Result := True;

    end;



    -------코드 끝---------



    참고로 이 함수를 불러 쓰는 예제를 보내드립니다.



    -------코드----------



    procedure TForm1.Button1Click(Sender: TObject);

    var

    Dest: array[0..6] of Char;

    begin

    if HanDiv(PChar(Edit1.Text), @Dest) then begin

    Dest[6] := Char(0);

    Edit2.Text := String(Dest);

    end else

    Edit2.Text := '?';



    end;



    procedure TForm1.Button2Click(Sender: TObject);

    var

    Dest: array[0..2] of Char;

    begin

    if HanCom(PChar(Edit1.Text), @Dest) then begin

    Dest[2] := Char(0);

    Edit2.Text := String(Dest);

    end else

    Edit2.Text := '?';

    end;



    -------코드 끝--------



    bye~



    --------------------------------------------------------------------------



    • 꼭! 꼭!
    • 2000.03.30 19:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.30 23:06
      WM_NCHITTEST 메세지에 반응하는 메소드를 서브클래싱해서 사용하시면 됩니다. 즉, 마우스포인터의 위치...
    • 이상학
    • 2000.03.30 17:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2000.03.30 19:30
      이상학 wrote: > ini 파일을 읽어서 트링 넣고 트리를 클릭하면 리스트 박스에 내용이 표시 되도록하는 >...
    • 박동기
    • 2000.03.30 16:28
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 신기종
      2000.03.30 19:43
      박동기 wrote: > NT나 Win2000에 델파이4나 5를 설치하려면은 어떻게 하나요? > 그냥 설치하면 되나요? ...
    • 어린왕자
      2000.03.31 00:41
      신기종 wrote: > 박동기 wrote: > > NT나 Win2000에 델파이4나 5를 설치하려면은 어떻게 하나요? > > 그...
    • 차카게살자
      2000.04.04 02:22
      어린왕자 wrote: > 신기종 wrote: > > 박동기 wrote: > > > NT나 Win2000에 델파이4나 5를 설치하려면은...
    • 어린왕자
      2000.03.31 01:27
      어린왕자 wrote: > 신기종 wrote: > > 박동기 wrote: > > > NT나 Win2000에 델파이4나 5를 설치하려면은...
    • 어린왕자
      2000.03.31 00:44
      어린왕자 wrote: > 델초보 어린왕자인데요.. > mdb파일은 엑세스에서 저장된 파일 아닌가요? 맞줘? > 근...
    • 최용일
      2000.03.30 18:33
      TRichEdit.SelAttributes속성을 이용하세요. 현재 커서의 위치나 선택된 문장의 여러가지 속성을 알수 ...
    • 니케
    • 2000.03.30 10:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.30 17:12
      Select * From TableName Where FiledName Like '%sql%' 과 같이 하시면 됩니다.. Like문에 대해서 SQL ...
    • 이영수
      2000.03.30 10:16
      여전히 초보 wrote: > 회원을 검색한 후에 그 회원들의 우편수령지에 따라 봉투를 프린트 할건데요 > 도...
    • 델파이
    • 2000.03.30 09:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안경옥
      2000.03.30 17:33
      델파이 wrote: > try... family 질문입니다 > > 설명좀 해주세요 > > 이게 이해가 안가거든요? >...
    • 이용현
    • 2000.03.30 08:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 화랑
      2000.03.30 18:54
      리턴값을 설정할때 어디서 하셨나요? Type Library에서 설정을 하신건가요? COM 제작은 형식을 많이 ...
    • 남경진
      2000.03.31 01:52
      이수정 wrote: > 안녕하세요.. 입력하는데 에러가 자꾸 나서요.. > 원인을 잘 모르겠어서... 한번 봐주세...
    • 이기현
      2000.04.24 10:26
      남경진 wrote: > 이수정 wrote: > > 안녕하세요.. 입력하는데 에러가 자꾸 나서요.. > > 원인을 잘 모르...
    • 이기현
      2000.04.24 10:25
      남경진 wrote: > 이수정 wrote: > > 안녕하세요.. 입력하는데 에러가 자꾸 나서요.. > > 원인을 잘 모르...
    • 사노테
    • 2000.03.30 06:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.30 06:58
      안녕하세요 하얀까마귀 입니다. 델파이에 보시면 function IncMonth(const Date: TDateTime; Number...
    • bhkmm
    • 2000.03.30 05:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.30 07:07
      안녕하세요 하얀까마귀 입니다. 잘보니까 더블퀘스쳔 마크 를 쓰셧네요... Access는 안써봐서 잘 모...
    • bhkmm
      2000.03.30 08:07
      하얀 까마귀님 감사합니다. 첫번째 방법은 알고 있었으나 안돼더군요.. 델파이에서는 안걸리는데. db에...
    • 초보자
    • 2000.03.30 05:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2000.03.30 19:49
      초보자 wrote: > MessageDlg에서 Default버튼을 설정하고 싶습니다. > 기본적으로 > MessageDlg('messa...
    • 백록화
    • 2000.03.30 05:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 화랑
      2000.03.31 04:15
      글쎄요.. 일단 에러 메세지가 나왔으니깐.. 그쪽으로 한번 찾아 보세요.. > 그런데, 정작 cgi를 서버...
    • 갱수
      2000.03.31 11:00
      김봉준 wrote: > 하하.. 안녕하세요 또 이상한 질문을 하게 되는것 같군요 > > 리눅스에 설치된 MySQL...
    • 2000.03.30 05:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.03.30 05:33
      얀 wrote: > 한글입력시 만약 > exe) '한메일'이라고 입력시 'ㅎ'을 가져오고 싶습니다 그리고 'ㅎ'을 가...
    • 공성환
    • 2000.03.30 03:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2000.03.30 03:57
      공성환 wrote: > 먼저 질문에 답하여 주신것에 감사합니다(하얀까마귀님,홍세비님)... > 아직 내공의 힘...