2010-02-25 7 views
1

표준 TListView 구성 요소 (ViewStyle = vsReport)를 사용하여 TImageList를 연결하고 첫 번째 열 (Item.ImageIndex := 0)과 후속 열 (Items[0].SubItemImages[1] := 1)에 이미지를 추가했습니다.CheckBoxes 및 SubItemImages를 사용하는 TListView

그런 다음 CheckBoxes 속성을 True로 설정하면 SubItem의 이미지가 사라집니다. 주 이미지는 그대로 유지되고 (Item.ImageIndex로 설정된 이미지) SubItem은 이미지를 잃게됩니다.

는 또한 CheckBoxes = True

이 사람이 주위에 방법을 알고 있나요 때 OnGetSubItemImage 이벤트가 발생하지 않는 것으로 나타났습니다?

+2

입니다 지금까지 난 당신이 자체가 그 '체크 박스'이미지를 사용하는 Windows 이후 표준 제어로 모두를 가질 수 없습니다 알다시피, 그러므로 소유자에게 각 목록 항목을 그려야합니다 – zz1433

답변

7

CheckBoxes 속성을 활성화하면 TListView 컨트롤에서 LVS_EX_SUBITEMIMAGES 및 LVS_EX_INFOTIP 스타일이 비활성화되는 매우 오래된 버그입니다.

이 버그를 해결하기 위해이 해결 방법을 사용할 수 있습니다.

1)

안 양식이 델파이 7에서 테스트 코드 (그리고 윈도우 7)을 넣어 목록보기

2)에서 체크 박스의 속성입니다.

const 
    LVM_FIRST =$1000; 
    LVS_EX_SUBITEMIMAGES   = $00000002; 
    LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54; 
    LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55; 


function ListView_GetExtendedListViewStyle(LVWnd: HWnd): DWORD; 
begin 
    Result := SendMessage(LVWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0); 
end; 

function ListView_SetExtendedListViewStyle(LVWnd: HWnd; ExStyle: LPARAM): DWORD; 
begin 
    Result := SendMessage(LVWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ExStyle); 
end; 


procedure TForm1.FormCreate(Sender: TObject); 
begin 
ListView1.Checkboxes:=True;//Activate the checkbox in the listview 
ListView_SetExtendedListViewStyle(ListView1.Handle,ListView_GetExtendedListViewStyle(ListView1.Handle) OR LVS_EX_SUBITEMIMAGES); //Activate the LVS_EX_SUBITEMIMAGES style. 
end; 

3) 최종 결과가

alt text http://i50.tinypic.com/20hrfhd.png

+0

환상적인 대답, 고마워요. –

+0

hw 스타일을 적용한 후에 이미지를 추가 했습니까? – Smith

0

TMS TAdvListView 구성 요소는 특히 도움이되지 않지만 해당 SubImages 속성으로 처리합니다. 이것을 True로 설정하면 체크 박스와 하위 항목 이미지를 가질 수 있습니다. 무대 뒤에서 좋은 일이 많이 벌어지고 있다고 확신합니다. 적어도 이것은 나를 앞으로 이동시킵니다.

관련 문제