2011-08-14 3 views
1

파일 다운로더가 있으므로 파일 이름, 속도, 파일 크기, 다운로드 한 크기, 왼쪽/경과 시간, 완료 비율 등의 목록보기가 있습니다. (진행 표시 줄) -> 아이콘, 텍스트, 배경, 진행률 막대 등을 그려야합니다. 모든 데이터를 저장하여 목록보기로 그리는 효율적인 방법은 무엇입니까?델파이 : 목록보기에서 그리기위한 데이터 저장소

예를 들어 텍스트 "오류"를 그리고 나서 배경이 빨간색이어야합니다. 오류를 확인하고이 같은 문자로 그릴 수 있습니다. if SameText(Item.SubItems[5], 'error') then,하지만이 방법으로 모든 항목을 그리는 것이 빠르면 모든 데이터를 목록보기에 저장하는 것이 쉬운가요?

답변

3

ListView는 데이터 항목의 선형 목록을 시각적으로 표현한 것입니다. ListView 자체는 데이터 컨테이너로 사용하면 안됩니다.

올바른 방법은 각각 다운로드 항목 하나에 해당하는 레코드 또는 개체와 별도의 TList를 만드는 것입니다. ListView에 "항목"을 추가하면 연결된 사용자 데이터를 지정할 수 있습니다. 귀하의 케이스에있는 사용자 데이터는 레코드 또는 개체에 대한 참조입니다.

목록보기 항목을 그리려면 관련 레코드 또는 개체에서 데이터를 가져옵니다.

실제로 다운로드 한 항목 목록이있는 경우 이미 수행해야하는 모든 작업을 수행하고 있으며 퍼즐의 누락 된 부분은 목록보기 항목이 사용자 데이터에 대한 참조를 보유 할 수 있다는 것입니다.

+0

그래서 (TList를 기반으로 한) 자체 클래스를 만들고 모든 항목에 대한 클래스 개체를 만든 다음 해당 개체를 데이터 속성에 할당해야합니까? 목록보기 만 사용하여 목표를 처리 할 수 ​​있습니다. 그러나 그것이 효율적인 지 모르겠다. ... – maxfax

+1

@maxfax TList는 데이터 객체를위한 컨테이너이다 (어쨌든 가지고있다). 정말로 필요한 것은 아이템의 상태를 설명하는 데이터 객체입니다. 아니요, 목록보기 만 사용하여 목표를 처리 할 수 ​​없습니다. 지금 당장 목록보기로 트릭을하고 머물 수는 있지만, 이것은 깨진 디자인이며 앞으로는 직접 발견 할 것입니다. –

+2

@daemon_x 가상이 아닌 소유자 그리기 모드에서도 코드는 데이터를 가져올 위치를 알아야하며이 경우 데이터 객체가 소스입니다. –