질문이 좀 이상한데... OnKeyUp이나 OnKeyDown에서는 에디트나 리치에디트 등에 입력되는 키를 제어할 수 없습니다.
키를 막으려면 OnKeyPress 밖에 안되지요. 두번째 코드에서 키를 #0로 쓰신 걸 봐서는 OnKeyPress를 OnKeyDown로
착각하신 거 같구요.
그리고 한글의 경우 말씀하신 것처럼 OnKeyPress에서도 막을 수 없습니다. 한글을 막으려면 방법이 없는 것은 아니지만
적어도 영문 기준으로 만들어진 TEdit, TMemo, TRichEdit에서는 안됩니다. 일단 한글이 입력될 때 발생하는 메시지도
좀 다르고, 그리고 그런 목적으로라면 메시지를 가로채는 것보다는 TCustomEdit.Change 메소드를 가로채서 새로운
컴포넌트를 만들면 되긴 하겠지요.
하지만 최대 입력 문자수를 제한하기 위해서라면 그냥 단순히 MaxLength 속성에서 10으로 설정해버리면 되는데요.
다른 목적이 있다면 모르지만요.
그럼...
란티아 님이 쓰신 글 :
: 안녕 하세요..
:
:
: RichEdit 의 KeyUp 이벤트에서
:
: Label1.Caption := Format( '%d', [ length( RichEdit1.Text ) ] );
: if length( RichEdit1.Text ) > 10 Then
: Begin
: Key := 0;
: End;
:
: 이런씩으로 해봤습니다.
: 근데.. 10바이트가 넘어도 출력된 글자가 있더군요..
:
: 그런데..
:
: RichEdit의 KeyDown 이벤트에서
:
: Label1.Caption := Format( '%d', [ length( RichEdit1.Text ) ] );
: if length( RichEdit1.Text ) > 10 Then
: Begin
: Key := #0;
: End;
:
: 이렇게 했을 경우..
:
: 영문일 경우는 10바이트가 넘을 경우 찍히지가 않더군요.
:
: 근데.. 여전히. 한글일 경우는 아예 Keydown이벤트로 들어 오지 않습니다.
:
: 한글일경우의 방법은 없는지요. .
:
: KeyUp일 경우는 벌써 Richedit에 글자가 써지고 난 후라서 쓴 글자의 크기를
:
: 구한게 가능했던것 같은데요..
:
: 근데. 문제는 넘었을 경우.. 다시 지운다던가.. 이런 동작을 해야 할것 같은데
:
: 그 부분에 대해서는 잘 모르겠네요..
:
: 읽어 보시구.. 좋은 방법이 있으시면. 답변 부탁드립니다..
:
: 그럼.. 좋은 하루 보내세요..
|