Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10143] Re:Re:Re:[질문]Richedit에 대해서..
박지훈.임프 [cbuilder] 2194 읽음    2005-07-02 16:36
제가 드렸던 답변을 제대로 읽지 않으신 것인지 혹은 제가 제대로 이해를 못한 건지 모르겠습니다만...
단지 최대 입력 바이트수를 제한하기 위해서라면 리치에디트나 메모에서 MaxLength 속성을 설정하면 됩니다.
이 속성은 영문이든 한글이든 상관없이 실제 바이트수로 제한을 해줍니다.
MaxLength := 10;
이렇게만 하면 10문자 이상은 들어오지 않지요.

그리고 추가적으로, 키가 입력되면 발생되는 이벤트는 OnKeyPress, OnKeyDown, OnKeyUp 이벤트 외에도
OnChange가 있습니다. 단 이 이벤트에서는 마지막에 입력된 키를 알 수 없다는 차이점이 있습니다만, 단지 전체
문자열의 길이를 알고 싶다면 이 이벤트가 목적하시는 용도에 가장 잘 맞습니다.

그러니까 OnChange 핸들러에서,
procedure TForm1.Memo1Change(Sender: TObject);
begin
  Label1.Caption := Format('%d/%d', [Length(Memo1.Text), Memo1.MaxLength]);
end;
이렇게 코딩해버리면 그만입니다.


란티아 님이 쓰신 글 :
: 답변 감사합니다.
:
: 그럼 한글처럼 ASCII로 나타낼 수 없는 경우에는 TMemo , TRichedit로는 막을 수 없다는 말이군요..
:
: 그럼. 혹시. 유니코드계열의 문자를 TRichedit 처럼 글자수를 제한 하게 하는 콤포넌트가 있는지요..
:
: 제가 하고픈건 첨부파일로 첨부 하였습니다..
:
: Richedit에 제가 글자를 입력하면 입력한 바이트수가 Label에 표시되며 제한 글자수를 초과 했을 경우..
:
: 더이상 입력이 되지 않게 하고 싶습니다..
:
: 보시고... 답변 부탁드립니다..
:
: 그럼.. 좋은 주말 보내세요..
:
:
: 박지훈.임프 님이 쓰신 글 :
: : 질문이 좀 이상한데... 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에 글자가 써지고 난 후라서 쓴 글자의 크기를
: : :
: : : 구한게 가능했던것 같은데요..
: : :
: : : 근데. 문제는 넘었을 경우.. 다시 지운다던가.. 이런 동작을 해야 할것 같은데
: : :
: : : 그 부분에 대해서는 잘 모르겠네요..
: : :
: : : 읽어 보시구.. 좋은 방법이 있으시면. 답변 부탁드립니다..
: : :
: : : 그럼.. 좋은 하루 보내세요..

+ -

관련 글 리스트
10129 [질문]Richedit에 대해서.. 란티아 967 2005/06/27
10140     Re:[질문]Richedit에 대해서.. 박지훈.임프 1164 2005/07/01
10142         Re:Re:[질문]Richedit에 대해서.. 란티아 1313 2005/07/02
10143             Re:Re:Re:[질문]Richedit에 대해서.. 박지훈.임프 2194 2005/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.