RAD스튜디오 10.4.2는 새로운 VCL 컨트롤들을 선보입니다. 그 중 TControlList는 매우 긴 리스트를 효과적으로 제어할 수 있는 컨트롤입니다. 현대식 룩앤필로, 원한다면 UI를 얼마든지 마음대로 설정할 수 있습니다.
파이어몽키의 ListView Item Designer와 닮은 TControlList는 리스트의 각 항목들을 대체해서(가상으로) 나타나는 리스트뷰 아이템의 레이아웃을 원하는 대로 만들 수 있습니다.
TControlList는 단일 컬럼과 멀티 컬럼 레이아웃이 있는데, 원하는 형태를 선택할 수 있습니다. 완벽하게 가상화되어 있기 때문에 수천 혹은 수백만 개에 달하는 항목들도 얼마든지 제어 가능하며, 굉장히 빠른 스크롤이 가능합니다. 화면에 맞는 항목들만 표시할 수도 있습니다.
그리고 High-DPI 옵션과 VCL 스타일을 지원할 뿐만 아니라 라이브바인딩(LiveBindings)도 완벽 지원합니다.
TControlList는 TDBCtrlGrid 컨트롤과 비슷한데요. 컨트롤을 위한 패널이 있고, 가상의 항목이 런타임 시에 생성됩니다. TDBCtrlGrid와 다른 점은 TGraphicControl만 올릴 수 있고, 모든 항목이 가상화 되어 있다는 것입니다.
procedure TForm2.ClientDataSet1AfterOpen(DataSet: TDataSet);
begin
ControlList1.ItemCount:= ClientDataSet1.RecordCount;
end;
procedure TForm2.ControlList1BeforeDrawItem(AIndex: Integer; ACanvas: TCanvas;
ARect: TRect; AState: TOwnerDrawState);
begin
var ms:= TMemoryStream.Create;
ClientDataSet1.RecNo:= AIndex + 1;
Label1.Caption:= ClientDataSet1Common_Name.AsString;
label2.Caption:= ClientDataSet1Notes.AsString;
ClientDataSet1Graphic.SaveToStream(ms);
ms.Position:= 8;
image1.Picture.LoadFromStream(ms);
ms.Free;
end;