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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[721] [Controls] TListView TTreeView의 Item Caption 수정시 입력 길이 제한
장성호 [nasilso] 7466 읽음    2007-11-28 01:46
TListView나 TTreeView의 아이템의 Caption을 수정할수 있는데
이때 나타나는 입력창의 길이를 제한하고자 한다면 어떻게 해야할까요?

C++Builder를 사용하면서 한번도 적용해보지 않은 기능이지만
혹 누군가에게 필요할수도 있을것 같아 올려봅니다.

Q&A 게시판에 답변으로 이미 올린적이 있는데 참조하시구요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=51378

TListView나 TTreeView등이 Editing을 할때는
윈도우 기본 컨트롤인 EDIT를 사용합니다.
(TEdit나 TMemo는 EDIT를 랩핑해놓은 컨트롤이죠)

EDIT의 MaxLength를 설정하는 방법은 SendMessage로 EM_SETLIMITTEXT를 날려주면 되죠

int iMaxLength=10;
SendMessage(hWnd,EM_SETLIMITTEXT,iMaxLength,0);
이렇게..

그런데 TComboBox같은경우 EDIT를 ComboBox생성될때 하나 만들어서 그것을 계속사용하는데..
TListView 나 TTreeView같은 경우에는 Editing할때 만들어서 Edit끝나면 delete시키는것 같더군요
그래서 Edit할때 FindWindowEx로 EDIT를 찾아야 합니다.
FindWindow가 아니라 FindWindowEx 하는 이유는 EDIT가 TListView나 TTreeView 위에 있기 때문이죠

Editing시작은 TListView나 TTreeView모두 OnEditing이벤트가 있더군요
그곳에서 FindWindowEx로 찾아서 처리하면 될것입니다.
아래와 같이

//TListView 경우
void __fastcall TForm1::ListView1Editing(TObject *Sender, TListItem *Item,  bool &AllowEdit)
{
    SendMessage(FindWindowExA(ListView1->Handle,0,"EDIT",NULL),EM_SETLIMITTEXT,10,0);
}
//TTreeView 경우
void __fastcall TForm1::TreeView1Editing(TObject *Sender, TTreeNode *Node,    bool &AllowEdit)
{
    SendMessage(FindWindowExA(TreeView1->Handle,0,"EDIT",NULL),EM_SETLIMITTEXT,10,0);
}


[Delphi]
procedure TForm1.TreeView1Editing(Sender: TObject; Node: TTreeNode;
  var AllowEdit: Boolean);
begin
    SendMessage(FindWindowExA(TreeView1.Handle,0,'EDIT',nil),EM_SETLIMITTEXT,10,0);
end;
//------------------------------------------------------------------
procedure TForm1.ListView1Editing(Sender: TObject; Item: TListItem;
  var AllowEdit: Boolean);
begin
    SendMessage(FindWindowExA(ListView1.Handle,0,'EDIT',nil),EM_SETLIMITTEXT,10,0);
end;

그럼..

+ -

관련 글 리스트
721 [Controls] TListView TTreeView의 Item Caption 수정시 입력 길이 제한 장성호 7466 2007/11/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.