문제

나는 잠시 동안 변경되지 않은 오래된 VB6 프로그램을 가지고 있지만 이제는 새로운 행동이 있습니다. 나는 공통 구성 요소가 그 아래에서 업그레이드 된 것을 생각하고 있습니다. 여기에 세부 사항이 있습니다.

SallIcon 모드에서 표준 ListView 컨트롤이 있습니다. 코드 스 니펫 :

'setup the listview
With lvwMap
   .Appearance = ccFlat
   .BackColor = vbBlack
   .BorderStyle = ccNone
   .Font.Name = "Arial" 
   .Font.Bold = True
   .Font.Size = 9
   .ForeColor = vbYellow
   .LabelEdit = lvwManual
   .LabelWrap = True
   .OLEDropMode = ccOLEDropManual
   .PictureAlignment = lvwTopLeft
   .TextBackground = lvwOpaque
   .View = lvwSmallIcon
End With
.

대부분의 ListItem은 SmallIcon과 캡션 (텍스트)이 모두 있습니다. TextBackground는 불투명으로 설정되어 있으므로 텍스트가 묶는 색상의 사각형으로 렌더링됩니다.

일부 항목은 캡션이 제공되지 않거나 사용자가 캡션이 없도록 변경할 수 있습니다. 이것은 괜찮아요. 그러나 이제는 빈 텍스트 속성이있는 ListItem은 텍스트가없는 텍스트가없는 꽤 넓은 넓은 직사각형을 렌더링합니다 (마치 사용자가 공백을 무리에 입력 한 것처럼).

LISTITEM을 추가하는 코드는 똑바로 전달됩니다 :

 Set oLI = lvwMap.ListItems.Add(lvwMap.ListItems.Count + 1, Key:=sKey)
 oLI.SmallIcon = sIcon
 oLI.Text = sCaption
.

여기에서 디버거를 중지하고 즉각적인 창에서 다음을 번영했습니다.

oLI.Text= "AAAAAAA"
?oLI.Width
 100.0063 

oLI.Text= "AAAAAA"
?oLI.Width
 91.99371 

oLI.Text= "AAAAA"
?oLI.Width
 84.0189 

oLI.Text= "AAAA"
?oLI.Width
 76.0063 

oLI.Text= "AA"
?oLI.Width
 60.0189 

oLI.Text= "A"
?oLI.Width
 52.0063 

oLI.Text= ""
?oLI.Width
 96.00001 
.

ListItem.Width가 텍스트가 비어있을 때까지 올바르게 다시 계산 한 다음 96 픽셀로 점프합니다.

이 동작을 보상 할 수있는 방법을 알고 있습니까? 기본 빈 WDITH를 구성하는 데 사용할 수있는 일부 Windows 메시지는 무엇입니까? ListView 동작 변경에 대한 정보도 도움이 될 수 있습니다.

도움이 되었습니까?

해결책

mscomctl.ocx는 4 월에서 업데이트되었습니다 IE의 보안 취약점 - 그리고이 방법은이 방법으로 작동하지 않는 파일의 이전 버전의 파일 (2004 년부터)으로 VM 시스템이있는 것처럼 변경되었을 때의 것으로 추측하고 있습니다. href="http:///support.microsoft.com/kb/896559"rel="nofollow"> 최근의 릴리스

그것에 대해 무엇을 해야하는지에 대해서 : 글쎄, 나는 그것이 당신에게 문제를 일으키는 것에 대한 그것이 무엇인지에 달려 있다고 생각합니다. 항목의 너비 속성을 사용하고 있기 때문에 다음과 같이 부울 평가와 쉽게 곱할 수 있습니다. iWidth = oLi.Width * Abs(oLi.Text <> ""). 그러나 그것이 당신이 좋아하지 않는 모습이라면, 내가 생각할 수있는 유일한 것은 사용자가 비어있게 설정하는 경우에 단일 공간을 추가하여 효과를 완화하는 것입니다. 사용 지점에서 볼 수있는 관점에서 넓은 영역을 제공 할 때 라벨 편집이 활성화 된 경우 새 동작이 더 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top