Kori 3월 9일에 포스트됨 공유하기 3월 9일에 포스트됨 마르코 칸투 (Marco Cantu)의 "The New VCL ControlList Multiple Selection in Delphi 11.3" 을 번역했습니다. (원문 작성: 2022년 3월, 최종 번역: 2023년 3월) TControlList는 몇년 전에 새로 도입된 컨트롤이다. 그리고 이번 11.3 버전에서 더 향샹되어, 이제는 여러 개 항목 동시 선택 설정 옵션이 추가되었다. ControlList란 무엇인가? ControlList는 완전히 가상 방식을 사용하기 때문에 리스트 항목이 매우 많아도 잘 다룰 수 있다. 리스트에는 데이터와 함께 컨트롤들을 담을 수 있는데, 실제로는 메모리 안에 패널(panel) 하나가 단일 인스턴스로 들어 있으며, 그 패널 안에서 리스트에 있는 각 항목이 그려진다. 따라서 항목이 수천 심지어 수백만 개 인 경우에도 문제없이 처리한다. 이 단일 패널(panel)은 그 안에서 리스트의 항목이 표현되는 시점에, 표현할 컨트롤들을 업데이트하도록 프로그램에게 요청한다. 이런 요청을 하게 만드는 항목은 오직 패널을 통해 보여지는 범위 안에 있는 (몇개 정도의) 항목 (몇 개 정도) 밖에 없다는 점을 고려하면, 이 TControlList는 최소한의 처리 작업만으로도, 항목이 매우 많은 리스트를 사용자가 스크롤 할 때 자연스럽게 처리한다. 아래 그림은 이 컨트롤리스트에 레이블(label) 하나만 넣은 간단한 구성을 하는 개발 화면이다. 이 레이블에 항목의 순번을 표현하려면, 아래와 같이 코드를 작성하면 된다. procedure TForm19.ControlList1BeforeDrawItem(AIndex: Integer; ACanvas: TCanvas; ARect: TRect; AState: TOwnerDrawState); begin Label1.Caption := 'Item ' + (AIndex + 1).ToString; end; 컨트롤 리스트 안의 항목이 별도로 존재하지 않으며 항목 상태라는 개변도 없다는 점을 위 코드에서 눈여겨 보라. 이 리스트의 요소를 처리하기 위한 위 이벤트 핸들러가 아닌 그 바깥에서 Label1의 Caption을 접근하는 것은 아예 말이 되지 않는다. 이 컨트롤 리스트의 ItemCount 프로퍼티를 100으로 지정하며 항목 갯수를 지정하면 실행 시 보이는 UI 화면은 다음 그림과 같다. 사용자가 목록에서 항목 하나를 선택했을 때, 그 항목 무엇인지를 알아내는 코드는 다음과 같다. Memo1.Lines.Text := 'Single selection: ' + (ControlList1.ItemIndex + 1).ToString; ControlList에서 여러 항목 선택 허용하기 11.3 버전에서 TControlList에 MultiSelect 프로퍼티가 새로 들어갔다. 복수 항목을 선택할 수 있게 개발자가 지정하면, 최종 사용자는 Ctrl+클릭, Shift+클릭을 사용하여 여러 항목을 선택할 수 있다. Ctrl 키를 사용하여 원하는 항목을 하나하나 선택할 수 있고, Shift 키를 사용하여 특정 범위 안에 있는 모든 항목을 선택할 수 있다. 윈도우의 일반적인 리스트박스와 같은 방식이다. 선택된 항목을 해제할 때에도 마찬가지 키를 사용한다. 즉 "토글 선택" 방식이다. 여러 항목을 선택한 예시 화면은 다음과 같다. 선택된 항목을 프로그램에서 알 수 있도록 하려면, TControlList의 Selected 프로퍼티 (배열이다)를 사용한다. 예를 들면 아래 코드와 같다. for var I := 0 to ControlList1.ItemCount - 1 do if ControlList1.Selected[I] then Memo1.Lines.Add((I + 1).ToString); 11.3 버전의 변경을 요약한 글 보기 RAD 스튜디오 11.3 알렉산드리아 출시 안내 DocWiki 번역] 11.3 새기능 도움말 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.