作成日: 2019/12/12 最終更新日: 2021/02/26
文書種別
不具合
状況
修正済み
詳細
ヘッダにグラデーションの外観を実装するGradientHeaderRendererクラスを適用すると、セルの水平方向が中央揃えおよび右揃えの場合に、複数行テキストが少し右にずれます。

【再現手順】
1.新規作成したプロジェクトにFpSpreadを貼り付けます。
2.下記のサンプルコードを記述します。
3.プロジェクトを実行します。
■サンプルコード(VB.NET)

【再現手順】
1.新規作成したプロジェクトにFpSpreadを貼り付けます。
2.下記のサンプルコードを記述します。
3.プロジェクトを実行します。
■サンプルコード(VB.NET)
Imports FarPoint.Win.Spread.CellType
Imports System.Drawing.Drawing2D
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.ColumnHeader.RowCount = 2
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 0).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 0).Value = "あいうえお" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "かきく"
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(1, 0).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 0).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Right
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(1, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Right
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 1).Value = "あいうえお" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "かきく"
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(1, 1).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 1).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Right
Dim wGrad As New GradientHeaderRenderer(Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
LinearGradientMode.Vertical)
Me.FpSpread1_Sheet1.ColumnHeader.DefaultStyle.Renderer = wGrad
End Sub
End Class
Imports System.Drawing.Drawing2D
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.ColumnHeader.RowCount = 2
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 0).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 0).Value = "あいうえお" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "かきく"
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(1, 0).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 0).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Right
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(1, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Right
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(0, 1).Value = "あいうえお" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "かきく"
Me.FpSpread1_Sheet1.ColumnHeader.Cells.Get(1, 1).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 1).Value = "あいうえお"
Me.FpSpread1_Sheet1.Cells.Get(0, 1).HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Right
Dim wGrad As New GradientHeaderRenderer(Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
LinearGradientMode.Vertical)
Me.FpSpread1_Sheet1.ColumnHeader.DefaultStyle.Renderer = wGrad
End Sub
End Class
回避方法
Service Pack 5(v10.0.4009.2012)で修正済み。
Service Packを適用せずに対処する方法としては、カスタムのレンダラーを作成し適用することで回避可能です。
■サンプルコード(VB.NET)
Service Packを適用せずに対処する方法としては、カスタムのレンダラーを作成し適用することで回避可能です。
■サンプルコード(VB.NET)
Dim myrender As New CustomRender(Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
LinearGradientMode.Vertical)
Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 0).Renderer = myrender
' カスタムレンダラー
Public Class CustomRender
Inherits GradientHeaderRenderer
Public Sub New(ByVal topColor As Color, ByVal bottomColor As Color, ByVal activeTopColor As Color, ByVal activeBottomColor As Color, ByVal mode As LinearGradientMode)
MyBase.New(topColor, bottomColor, activeTopColor, activeBottomColor, mode)
End Sub
Public Overrides Sub PaintCell(g As Graphics, r As Rectangle, appearance As FarPoint.Win.Spread.Appearance, value As Object, isSelected As Boolean, isLocked As Boolean, zoomFactor As Single)
Dim cusomPaint = False
Dim s As String = ""
If Not value Is Nothing Then
s = value.ToString()
If s.IndexOf(vbCrLf) <> -1 Then
cusomPaint = True
End If
End If
If cusomPaint Then
MyBase.PaintCell(g, r, appearance, Nothing, isSelected, isLocked, zoomFactor)
appearance.BackColor = Color.Transparent
Dim drawTextArgs = New FarPoint.Win.Text.DrawTextArgs(g, s, appearance.Font, appearance.ForeColor, r)
drawTextArgs.HorizontalAlignment = ToHorizontalAlignment(appearance.HorizontalAlignment)
drawTextArgs.VerticalAlignment = ToVerticalAlignment(appearance.VerticalAlignment)
drawTextArgs.TextOrientation = TextOrientation
drawTextArgs.WordWrap = WordWrap
drawTextArgs.RotationAngle = TextRotationAngle
drawTextArgs.RightToLeft = appearance.RightToLeft
drawTextArgs.KeepAlignment = True
FarPoint.Win.Text.TextHelper.Draw(drawTextArgs)
Else
MyBase.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor)
End If
End Sub
End Class
Color.FromArgb(&HFF, &HFF, &HFF),
Color.FromArgb(&HA4, &HF5, &HA4),
Color.FromArgb(&HFF, &HFF, &HFF),
LinearGradientMode.Vertical)
Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 0).Renderer = myrender
' カスタムレンダラー
Public Class CustomRender
Inherits GradientHeaderRenderer
Public Sub New(ByVal topColor As Color, ByVal bottomColor As Color, ByVal activeTopColor As Color, ByVal activeBottomColor As Color, ByVal mode As LinearGradientMode)
MyBase.New(topColor, bottomColor, activeTopColor, activeBottomColor, mode)
End Sub
Public Overrides Sub PaintCell(g As Graphics, r As Rectangle, appearance As FarPoint.Win.Spread.Appearance, value As Object, isSelected As Boolean, isLocked As Boolean, zoomFactor As Single)
Dim cusomPaint = False
Dim s As String = ""
If Not value Is Nothing Then
s = value.ToString()
If s.IndexOf(vbCrLf) <> -1 Then
cusomPaint = True
End If
End If
If cusomPaint Then
MyBase.PaintCell(g, r, appearance, Nothing, isSelected, isLocked, zoomFactor)
appearance.BackColor = Color.Transparent
Dim drawTextArgs = New FarPoint.Win.Text.DrawTextArgs(g, s, appearance.Font, appearance.ForeColor, r)
drawTextArgs.HorizontalAlignment = ToHorizontalAlignment(appearance.HorizontalAlignment)
drawTextArgs.VerticalAlignment = ToVerticalAlignment(appearance.VerticalAlignment)
drawTextArgs.TextOrientation = TextOrientation
drawTextArgs.WordWrap = WordWrap
drawTextArgs.RotationAngle = TextRotationAngle
drawTextArgs.RightToLeft = appearance.RightToLeft
drawTextArgs.KeepAlignment = True
FarPoint.Win.Text.TextHelper.Draw(drawTextArgs)
Else
MyBase.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor)
End If
End Sub
End Class
旧文書番号
84726