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;
그럼..