しばらく変更されていない古い VB6 プログラムがありますが、現在は新しい動作をしています。共通コンポーネントがその下からアップグレードされたと思います。詳細はこちら。
SmallIcon モードの標準の 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
追加されるほとんどの ListItems には、SmallIcon と Caption (Text) の両方があります。TextBackground は Opaque として設定されます。つまり、テキストは色付きの四角形で囲まれてレンダリングされます。
ただし、キャプションが提供されていないアイテムや、キャプションがないようにユーザーが変更できるアイテムもあります。SmallIcon だけが表示されていれば、これは以前は問題ありませんでした。しかし、空の Text プロパティを持つ 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
ご覧のとおり、Text が空になるまで ListItem.Width が正しく再計算され、その後 96 ピクセルにジャンプします。
この動作を補う方法を知っている人はいますか? デフォルトの空の wdith を構成するために使用できる Windows メッセージがありますか? ListView の動作の変更に関する情報も役立つ場合があります。