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

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

独自の描画(オーナー描画)は、MultiRowSheet.DrawElement イベントでコーディングします。このイベントは、ヘッダの OwnerDraw プロパティが true のとき、ヘッダ単位(セル単位)で発生します。

[Visual Basic]
Private Sub Form1_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
  Dim objTemplate As GrapeCity.Win.ElTabelle.Template _
    = New GrapeCity.Win.ElTabelle.Template()
  '列ヘッダのキャプションを設定する
  objTemplate.ColumnHeaders(0, 0).Caption = "Hello"
  objTemplate.ColumnHeaders(0, 1).Caption = "出荷"
  '列ヘッダをマージする
  objTemplate.ColumnHeaders.Merge(New GrapeCity.Win.ElTabelle.TRange(0, 1, 1, 1))
  MultiRowSheet1.Template = objTemplate

  'オーナー描画を有効にする
  MultiRowSheet1.ColumnHeaders(0, 0).OwnerDraw = True
  MultiRowSheet1.ColumnHeaders(0, 1).OwnerDraw = True
End Sub

Private Sub MultiRowSheet1_DrawElement(ByVal sender As System.Object, _
  ByVal e As GrapeCity.Win.ElTabelle.MDrawElementEventArgs) _
  Handles MultiRowSheet1.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.MultiRowSheet).ColumnHeaders(e.Range.LeftColumn, e.Range.TopRow).Caption
    Dim font As Font = CType(sender, GrapeCity.Win.ElTabelle.MultiRowSheet).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 Form_Load(object sender, EventArgs e)
{
  GrapeCity.Win.ElTabelle.Template objTemplate = new GrapeCity.Win.ElTabelle.Template();
  //列ヘッダのキャプションを設定する
  objTemplate.ColumnHeaders[0, 0].Caption = "Hello";
  objTemplate.ColumnHeaders[0, 1].Caption = "出荷";
  //列ヘッダをマージする
  objTemplate.ColumnHeaders.Merge(new GrapeCity.Win.ElTabelle.TRange(0, 1, 1, 1));
  multiRowSheet1.Template = objTemplate;

  //オーナー描画を有効にする
  multiRowSheet1.ColumnHeaders[0, 0].OwnerDraw = true;
  multiRowSheet1.ColumnHeaders[0, 1].OwnerDraw = true;
}

private void multiRowSheet1_DrawElement(object sender, GrapeCity.Win.ElTabelle.MDrawElementEventArgs 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.MultiRowSheet)sender).ColumnHeaders[e.Range.LeftColumn, e.Range.TopRow].Caption;
    Font font = ((GrapeCity.Win.ElTabelle.MultiRowSheet)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で公開されていました : 9372