ヘッダをオーナー描画する

文書番号 : 22108     文書種別 : 使用方法     最終更新日 : 2006/06/29
文書を印刷する
対象製品
El Tabelle Sheet 4.0J
詳細
El Tabelle Sheet 4.0J では、列ヘッダや行ヘッダのスタイルを簡単に切り替える Style プロパティを提供していますが、開発者がヘッダ単位で独自の描画を実装することも可能です。

独自の描画(オーナー描画)は、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


[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();
  }
}

キーワード
HowTo

この文書は、以前は次のFAQ IDで公開されていました : 9374