' 以下DrawItem関連
Private _brsHighLight As New SolidBrush(Color.FromKnownColor(KnownColor.Highlight))
- Private _brsHighLightText As New SolidBrush(Color.FromKnownColor(KnownColor.HighlightText))
- Private _brsForeColorUnread As SolidBrush
- Private _brsForeColorReaded As SolidBrush
- Private _brsForeColorFav As SolidBrush
- Private _brsForeColorOWL As SolidBrush
- Private _brsForeColorRetweet As SolidBrush
Private _brsBackColorMine As SolidBrush
Private _brsBackColorAt As SolidBrush
Private _brsBackColorYou As SolidBrush
Private _brsBackColorAtTo As SolidBrush
Private _brsBackColorNone As SolidBrush
Private _brsDeactiveSelection As New SolidBrush(Color.FromKnownColor(KnownColor.ButtonFace)) 'Listにフォーカスないときの選択行の背景色
- Private sf As New StringFormat()
Private sfTab As New StringFormat()
'''''''''''''''''''''''''''''''''''''''''''''''''''''
If ReplyIcon IsNot Nothing Then ReplyIcon.Dispose()
If ReplyIconBlink IsNot Nothing Then ReplyIconBlink.Dispose()
_brsHighLight.Dispose()
- _brsHighLightText.Dispose()
- If _brsForeColorUnread IsNot Nothing Then _brsForeColorUnread.Dispose()
- If _brsForeColorReaded IsNot Nothing Then _brsForeColorReaded.Dispose()
- If _brsForeColorFav IsNot Nothing Then _brsForeColorFav.Dispose()
- If _brsForeColorOWL IsNot Nothing Then _brsForeColorOWL.Dispose()
- If _brsForeColorRetweet IsNot Nothing Then _brsForeColorRetweet.Dispose()
If _brsBackColorMine IsNot Nothing Then _brsBackColorMine.Dispose()
If _brsBackColorAt IsNot Nothing Then _brsBackColorAt.Dispose()
If _brsBackColorYou IsNot Nothing Then _brsBackColorYou.Dispose()
If _brsBackColorNone IsNot Nothing Then _brsBackColorNone.Dispose()
If _brsDeactiveSelection IsNot Nothing Then _brsDeactiveSelection.Dispose()
shield.Dispose()
- sf.Dispose()
sfTab.Dispose()
For Each bw As BackgroundWorker In _bw
If bw IsNot Nothing Then
_clInputFont = _cfgLocal.ColorInputFont
_fntInputFont = _cfgLocal.FontInputFont
- _brsForeColorUnread = New SolidBrush(_clUnread)
- _brsForeColorReaded = New SolidBrush(_clReaded)
- _brsForeColorFav = New SolidBrush(_clFav)
- _brsForeColorOWL = New SolidBrush(_clOWL)
- _brsForeColorRetweet = New SolidBrush(_clRetweet)
_brsBackColorMine = New SolidBrush(_clSelf)
_brsBackColorAt = New SolidBrush(_clAtSelf)
_brsBackColorYou = New SolidBrush(_clTarget)
_brsBackColorNone = New SolidBrush(_clListBackcolor)
' StringFormatオブジェクトへの事前設定
- sf.Alignment = StringAlignment.Near
- sf.LineAlignment = StringAlignment.Near
- sf.Trimming = StringTrimming.EllipsisCharacter
sfTab.Alignment = StringAlignment.Center
sfTab.LineAlignment = StringAlignment.Center
_clInputBackcolor = SettingDialog.ColorInputBackcolor
_clInputFont = SettingDialog.ColorInputFont
_fntInputFont = SettingDialog.FontInputFont
- _brsForeColorUnread.Dispose()
- _brsForeColorReaded.Dispose()
- _brsForeColorFav.Dispose()
- _brsForeColorOWL.Dispose()
- _brsForeColorRetweet.Dispose()
- _brsForeColorUnread = New SolidBrush(_clUnread)
- _brsForeColorReaded = New SolidBrush(_clReaded)
- _brsForeColorFav = New SolidBrush(_clFav)
- _brsForeColorOWL = New SolidBrush(_clOWL)
- _brsForeColorRetweet = New SolidBrush(_clRetweet)
_brsBackColorMine.Dispose()
_brsBackColorAt.Dispose()
_brsBackColorYou.Dispose()
MessageBox.Show(ex.Message)
End Try
- _brsForeColorUnread.Dispose()
- _brsForeColorReaded.Dispose()
- _brsForeColorFav.Dispose()
- _brsForeColorOWL.Dispose()
- _brsForeColorRetweet.Dispose()
- _brsForeColorUnread = New SolidBrush(_clUnread)
- _brsForeColorReaded = New SolidBrush(_clReaded)
- _brsForeColorFav = New SolidBrush(_clFav)
- _brsForeColorOWL = New SolidBrush(_clOWL)
- _brsForeColorRetweet = New SolidBrush(_clRetweet)
_brsBackColorMine.Dispose()
_brsBackColorAt.Dispose()
_brsBackColorYou.Dispose()
End Sub
Private Sub MyList_DrawSubItem(ByVal sender As Object, ByVal e As DrawListViewSubItemEventArgs)
- If e.ItemState = 0 Then Exit Sub
- If e.ColumnIndex > 0 Then
- Dim rct As RectangleF = e.Bounds
- Dim rctB As RectangleF = e.Bounds
- rct.Width = e.Header.Width
- rctB.Width = e.Header.Width
- If _iconCol Then rctB.Height = e.Item.Font.Height
-
- Dim heightDiff As Integer = CType(rct.Height Mod CType(e.Item.Font.Height, Single), Integer)
- rct.Inflate(0, CType(heightDiff / -2, Integer))
- 'アイコン以外の列
- If Not e.Item.Selected Then 'e.ItemStateでうまく判定できない???
- '選択されていない行
- '文字色
- Dim brs As SolidBrush = Nothing
- Dim flg As Boolean = False
- Select Case e.Item.ForeColor
- Case _clUnread
- brs = _brsForeColorUnread
- Case _clReaded
- brs = _brsForeColorReaded
- Case _clFav
- brs = _brsForeColorFav
- Case _clOWL
- brs = _brsForeColorOWL
- Case _clRetweet
- brs = _brsForeColorRetweet
- Case Else
- brs = New SolidBrush(e.Item.ForeColor)
- flg = True
- End Select
- If rct.Width > 0 Then
- If _iconCol Then
- Dim fnt As New Font(e.Item.Font, FontStyle.Bold)
- e.Graphics.DrawString(System.Environment.NewLine + e.Item.SubItems(2).Text, e.Item.Font, brs, rct, sf)
- e.Graphics.DrawString(e.Item.SubItems(4).Text + " / " + e.Item.SubItems(1).Text + " (" + e.Item.SubItems(3).Text + ") " + e.Item.SubItems(5).Text + e.Item.SubItems(6).Text + " [" + e.Item.SubItems(7).Text + "]", fnt, brs, rctB, sf)
- fnt.Dispose()
- ElseIf _iconSz = 16 Then
- e.Graphics.DrawString(e.SubItem.Text.Replace(Environment.NewLine, " "), e.Item.Font, brs, rct, sf)
- Else
- e.Graphics.DrawString(e.SubItem.Text, e.Item.Font, brs, rct, sf)
- End If
+ If e.ItemState = 0 OrElse e.Header.Width <= 0 Then Exit Sub
+
+ If e.ColumnIndex <> 0 Then 'アイコンカラム以外(文字列カラム)
+ Dim rect As RectangleF
+ Dim foreColor As Color
+ Dim drawText As String
+ Dim textFormat As TextFormatFlags
+
+ rect = New RectangleF(e.Bounds.X, e.Bounds.Y, e.Header.Width, e.Bounds.Height)
+ rect.Inflate(0, (rect.Height Mod e.Item.Font.Height) / -2)
+
+ If e.Item.Selected Then
+ If DirectCast(sender, Windows.Forms.Control).Focused Then
+ foreColor = Color.FromKnownColor(KnownColor.HighlightText)
+ Else
+ foreColor = _clUnread
End If
- If flg Then brs.Dispose()
Else
- If rct.Width > 0 Then
- '選択中の行
- Dim fnt As New Font(e.Item.Font, FontStyle.Bold)
- If DirectCast(sender, Windows.Forms.Control).Focused Then
- If _iconCol Then
- e.Graphics.DrawString(System.Environment.NewLine + e.Item.SubItems(2).Text, e.Item.Font, _brsHighLightText, rct, sf)
- e.Graphics.DrawString(e.Item.SubItems(4).Text + " / " + e.Item.SubItems(1).Text + " (" + e.Item.SubItems(3).Text + ") " + e.Item.SubItems(5).Text + e.Item.SubItems(6).Text + " [" + e.Item.SubItems(7).Text + "]", fnt, _brsHighLightText, rctB, sf)
- ElseIf _iconSz = 16 Then
- e.Graphics.DrawString(e.SubItem.Text.Replace(Environment.NewLine, " "), e.Item.Font, _brsHighLightText, rct, sf)
- Else
- e.Graphics.DrawString(e.SubItem.Text, e.Item.Font, _brsHighLightText, rct, sf)
- End If
- Else
- If _iconCol Then
- e.Graphics.DrawString(System.Environment.NewLine + e.Item.SubItems(2).Text, e.Item.Font, _brsForeColorUnread, rct, sf)
- e.Graphics.DrawString(e.Item.SubItems(4).Text + " / " + e.Item.SubItems(1).Text + " (" + e.Item.SubItems(3).Text + ") " + e.Item.SubItems(5).Text + e.Item.SubItems(6).Text + " [" + e.Item.SubItems(7).Text + "]", fnt, _brsForeColorUnread, rctB, sf)
- ElseIf _iconSz = 16 Then
- e.Graphics.DrawString(e.SubItem.Text.Replace(Environment.NewLine, " "), e.Item.Font, _brsForeColorUnread, rct, sf)
- Else
- e.Graphics.DrawString(e.SubItem.Text, e.Item.Font, _brsForeColorUnread, rct, sf)
+ foreColor = e.Item.ForeColor
+ End If
+
+ drawText = e.SubItem.Text
+
+ If _iconCol Then '2カラム表示のヘッダー描画
+ drawText = e.Item.SubItems(2).Text
+ rect = New RectangleF(rect.X, rect.Y + e.Item.Font.Height, rect.Width, rect.Height - e.Item.Font.Height)
+
+ Dim headerRect As New Rectangle(e.Bounds.X, e.Bounds.Y, e.Header.Width, e.Item.Font.Height)
+ Dim headerFont As New Font(e.Item.Font, FontStyle.Bold)
+ Dim headerText As String = e.Item.SubItems(4).Text + " / " +
+ e.Item.SubItems(1).Text +
+ " (" + e.Item.SubItems(3).Text + ") " +
+ e.Item.SubItems(5).Text +
+ e.Item.SubItems(6).Text +
+ " [" + e.Item.SubItems(7).Text + "]"
+
+ TextRenderer.DrawText(e.Graphics, headerText, headerFont, headerRect, foreColor, TextFormatFlags.Default)
+ End If
+
+ If Math.Floor(rect.Height / e.Item.Font.Height) <= 1 Then '1行表示
+ textFormat = TextFormatFlags.EndEllipsis Or TextFormatFlags.SingleLine
+ Else '複数行表示
+ textFormat = TextFormatFlags.Default
+
+ '折り返し制御
+ Dim sb As New StringBuilder(drawText.Length + 1)
+ For Each c As Char In drawText
+ sb.Append(c)
+ Dim size As Size = TextRenderer.MeasureText(sb.ToString(), e.Item.Font, rect.Size.ToSize(), textFormat)
+
+ If size.Width > rect.Width Then
+ sb.Insert(sb.Length - 1, Environment.NewLine)
+ If size.Height > rect.Height Then
+ Exit For
End If
End If
- fnt.Dispose()
- End If
+ Next
+ drawText = sb.ToString()
End If
- Else
+
+ TextRenderer.DrawText(e.Graphics, drawText, e.Item.Font, Rectangle.Round(rect), foreColor, textFormat)
+ Else 'アイコンカラム
If _iconSz > 0 Then
If Not String.IsNullOrEmpty(e.Item.ImageKey) Then
'e.Bounds.Leftが常に0を指すから自前で計算
x += columns.Width
End If
Next
+
If tw.DetailIcon.ContainsKey(e.Item.ImageKey) Then
e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.High
e.Graphics.DrawImage(tw.DetailIcon(e.Item.ImageKey), New Rectangle(x, e.Bounds.Top, Math.Min(_iconSz, e.Bounds.Width), _iconSz))