ヘッダをオーナー描画する
対象製品
El Tabelle Sheet 4.0J
詳細
El Tabelle Sheet 4.0J では、列ヘッダや行ヘッダのスタイルを簡単に切り替える Style プロパティを提供していますが、開発者がヘッダ単位で独自の描画を実装することも可能です。
独自の描画(オーナー描画)は、Sheet.DrawElement イベントでコーディングします。このイベントは、ヘッダの OwnerDraw プロパティが true のとき、ヘッダ単位(セル単位)で発生します。
[Visual Basic]
[C#]
独自の描画(オーナー描画)は、Sheet.DrawElement イベントでコーディングします。このイベントは、ヘッダの OwnerDraw プロパティが true のとき、ヘッダ単位(セル単位)で発生します。
[Visual Basic]
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Sheet1.ColumnHeaders.MaxRows = 2
'列ヘッダのキャプションを設定する
Sheet1.ColumnHeaders(0, 0).Caption = "Hello"
Sheet1.ColumnHeaders(0, 1).Caption = "出荷"
'列ヘッダをマージする
Sheet1.ColumnHeaders.Merge(New GrapeCity.Win.ElTabelle.Range(0, 1, 1, 1))
'オーナー描画を有効にする
Sheet1.ColumnHeaders(0, 0).OwnerDraw = True
Sheet1.ColumnHeaders(0, 1).OwnerDraw = True
End Sub
Private Sub Sheet1_DrawElement(ByVal sender As System.Object, ByVal e As GrapeCity.Win.ElTabelle.DrawElementEventArgs) Handles Sheet1.DrawElement
'列ヘッダの場合
If e.Region = GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders Then
Dim borderMargin As Integer = 1
Dim captionMargin As Integer = 2
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds)
'3D効果の明るい線を描画する
Dim whitePen As Pen = New Pen(Brushes.White, 2)
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top))
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height))
'3D効果の暗い線を描画する
Dim blackPen As Pen = New Pen(Brushes.Black, 2)
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin))
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height))
'キャプションを描画する
Dim caption As String = CType(sender, GrapeCity.Win.ElTabelle.Sheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Caption
Dim font As Font = CType(sender, GrapeCity.Win.ElTabelle.Sheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Font
e.Graphics.DrawString(caption, font, Brushes.White, New PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin))
whitePen.Dispose()
blackPen.Dispose()
End If
End Sub
ByVal e As System.EventArgs) Handles MyBase.Load
Sheet1.ColumnHeaders.MaxRows = 2
'列ヘッダのキャプションを設定する
Sheet1.ColumnHeaders(0, 0).Caption = "Hello"
Sheet1.ColumnHeaders(0, 1).Caption = "出荷"
'列ヘッダをマージする
Sheet1.ColumnHeaders.Merge(New GrapeCity.Win.ElTabelle.Range(0, 1, 1, 1))
'オーナー描画を有効にする
Sheet1.ColumnHeaders(0, 0).OwnerDraw = True
Sheet1.ColumnHeaders(0, 1).OwnerDraw = True
End Sub
Private Sub Sheet1_DrawElement(ByVal sender As System.Object, ByVal e As GrapeCity.Win.ElTabelle.DrawElementEventArgs) Handles Sheet1.DrawElement
'列ヘッダの場合
If e.Region = GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders Then
Dim borderMargin As Integer = 1
Dim captionMargin As Integer = 2
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds)
'3D効果の明るい線を描画する
Dim whitePen As Pen = New Pen(Brushes.White, 2)
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top))
e.Graphics.DrawLine(whitePen, New Point(e.Bounds.Left, e.Bounds.Top), _
New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height))
'3D効果の暗い線を描画する
Dim blackPen As Pen = New Pen(Brushes.Black, 2)
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin), _
New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin))
e.Graphics.DrawLine(blackPen, New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top), _
New Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height))
'キャプションを描画する
Dim caption As String = CType(sender, GrapeCity.Win.ElTabelle.Sheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Caption
Dim font As Font = CType(sender, GrapeCity.Win.ElTabelle.Sheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Font
e.Graphics.DrawString(caption, font, Brushes.White, New PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin))
whitePen.Dispose()
blackPen.Dispose()
End If
End Sub
[C#]
private void Form1_Load(object sender, EventArgs e)
{
sheet1.ColumnHeaders.MaxRows = 2;
//列ヘッダのキャプションを設定する
sheet1.ColumnHeaders[0, 0].Caption = "Hello";
sheet1.ColumnHeaders[0, 1].Caption = "出荷";
//列ヘッダをマージする
sheet1.ColumnHeaders.Merge(new GrapeCity.Win.ElTabelle.Range(0, 1, 1, 1));
//オーナー描画を有効にする
sheet1.ColumnHeaders[0, 0].OwnerDraw = true;
sheet1.ColumnHeaders[0, 1].OwnerDraw = true;
}
private void sheet1_DrawElement(object sender, GrapeCity.Win.ElTabelle.DrawElementEventArgs e)
{
//列ヘッダの場合
if (e.Region == GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders)
{
int borderMargin = 1;
int captionMargin = 2;
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds);
//3D効果の明るい線を描画する
Pen whitePen = new Pen(Brushes.White, 2);
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top));
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height));
//3D効果の暗い線を描画する
Pen blackPen = new Pen(Brushes.Black, 2);
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin));
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height));
//キャプションを描画する
string caption = ((GrapeCity.Win.ElTabelle.Sheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Caption;
Font font = ((GrapeCity.Win.ElTabelle.Sheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Font;
e.Graphics.DrawString(caption, font, Brushes.White, new PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin));
whitePen.Dispose();
blackPen.Dispose();
}
}
{
sheet1.ColumnHeaders.MaxRows = 2;
//列ヘッダのキャプションを設定する
sheet1.ColumnHeaders[0, 0].Caption = "Hello";
sheet1.ColumnHeaders[0, 1].Caption = "出荷";
//列ヘッダをマージする
sheet1.ColumnHeaders.Merge(new GrapeCity.Win.ElTabelle.Range(0, 1, 1, 1));
//オーナー描画を有効にする
sheet1.ColumnHeaders[0, 0].OwnerDraw = true;
sheet1.ColumnHeaders[0, 1].OwnerDraw = true;
}
private void sheet1_DrawElement(object sender, GrapeCity.Win.ElTabelle.DrawElementEventArgs e)
{
//列ヘッダの場合
if (e.Region == GrapeCity.Win.ElTabelle.SheetRegion.ColumnHeaders)
{
int borderMargin = 1;
int captionMargin = 2;
e.Graphics.FillRectangle(Brushes.Gray, e.Bounds);
//3D効果の明るい線を描画する
Pen whitePen = new Pen(Brushes.White, 2);
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top));
e.Graphics.DrawLine(whitePen, new Point(e.Bounds.Left, e.Bounds.Top),
new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height));
//3D効果の暗い線を描画する
Pen blackPen = new Pen(Brushes.Black, 2);
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - borderMargin),
new Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height - borderMargin));
e.Graphics.DrawLine(blackPen, new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top),
new Point(e.Bounds.Left + e.Bounds.Width - borderMargin, e.Bounds.Top + e.Bounds.Height));
//キャプションを描画する
string caption = ((GrapeCity.Win.ElTabelle.Sheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Caption;
Font font = ((GrapeCity.Win.ElTabelle.Sheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Font;
e.Graphics.DrawString(caption, font, Brushes.White, new PointF(e.Bounds.Left + captionMargin, e.Bounds.Top + captionMargin));
whitePen.Dispose();
blackPen.Dispose();
}
}
キーワード
HowTo
この文書は、以前は次のFAQ IDで公開されていました : 9374