tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
MSFlexGridセルのマージ(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2007/07/15 20:40
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[グリッド関係][][]                                                  *
* キーワード:MSHFlexGrid,フレックスグリッド,セルの連結,セルのMerge,,             *
***********************************************************************************

---------------------------------------------------------------------------------
No.4023 Re:MSFlexGridセルのマージ  投稿者:ゆう(U) [2002/03/07(木)9:46分]
---------------------------------------------------------------------------------

> MSFlexGridセルのマージを下のようにしたいのですが、余計なところまでマージされてしまったり、
> マージされなかったりなってしまいます。
┬─────┐
│     │
├──┬──┤
│  │  │
┼──┼──┤
こんな感じが最後にあるならプロパティの設定で簡単に
実現可能です。

┬─────┬─
│     │
├──┬──┤
│  │  │
┼──┼──┼─
さらに続きがある場合上下のセルのマージには失敗します、
プロパティだけでは回避不可能で、こうしたくとも・・・

┬─────┬─
│     │
├──┬──┼─
│  │  │
┼──┼──┼─
こんな感じになってしまいます。


なので、続きの失敗したマージ部分をピクチャボックスで
覆ってしまい、ピクチャボックスにマージ用の絵を表示
するとOKでしょう。

サンプル)
MSFlexGrid コントロール1個(MSFlexGrid1)
ピクチャボックス コントロール1個(Picture1)
Private Declare Function SetParent Lib "user32" _
                        (ByVal hWndChild As Long, _
                         ByVal hWndNewParent As Long) As Long
Private Const COL_MASK = 10
Private Const COL_CAPTION = "体育"
Private Sub Form_Click()
  Dim lRow As Long, lCol As Long

   With MSFlexGrid1
      .Rows = 20     '行の総数
      .Cols = 11      '列の総数
      .FixedRows = 2  '固定行の数
      .FixedCols = 1  '固定列の数
      .Row = 0
      .ColWidth(-1) = 700   '列幅設定
      .RowHeight(-1) = 285  '行高さ

  '固定行1行目
      .TextMatrix(0, 0) = " "
      .TextMatrix(0, 1) = "国語"
      .TextMatrix(0, 2) = "算数"
      .TextMatrix(0, 3) = "理科"
      .TextMatrix(0, 4) = "理科"
      .TextMatrix(0, 5) = "理科"
      .TextMatrix(0, 6) = "社会"
      .TextMatrix(0, 7) = "英語"
      .TextMatrix(0, 8) = "英語"
      .TextMatrix(0, 9) = "英語"
      .TextMatrix(0, 10) = "体育"
      .Row = 0
      For lCol = 0 To .Cols - 1
        .Col = lCol
        .CellAlignment = flexAlignCenterCenter
      Next
  '固定行2行目
      .TextMatrix(1, 0) = " "
      .TextMatrix(1, 1) = "国語"
      .TextMatrix(1, 2) = "算数"
      .TextMatrix(1, 3) = "a"
      .TextMatrix(1, 4) = "b"
      .TextMatrix(1, 5) = "c"
      .TextMatrix(1, 6) = "社会"
      .TextMatrix(1, 7) = "a"
      .TextMatrix(1, 8) = "b"
      .TextMatrix(1, 9) = "c"
      .TextMatrix(1, 10) = "体育"
      .Row = 1
      For lCol = 0 To .Cols - 1
        .Col = lCol
        .CellAlignment = flexAlignCenterCenter
      Next
      .MergeRow(0) = True
      .MergeCol(0) = True
      .MergeCol(1) = True
      .MergeCol(2) = True
      .MergeCol(6) = True
      .MergeCol(10) = True
      .MergeCells = 2      'マージの指定

  'データ(マージされない事を確認用)
      For lRow = .FixedRows To .Rows - 1
        For lCol = .FixedCols To .Cols - 1
          .TextMatrix(lRow, lCol) = "ZZZ"
        Next
      Next
    .Refresh
  End With
  'ピクチャボックスの初期設定
  Call iniHead
End Sub

'覆ったピクチャボックスの移動
Private Sub MSFlexGrid1_Scroll()
  With MSFlexGrid1
    Picture1.Visible = Not (.LeftCol > COL_MASK)
    Picture1.Move .ColPos(COL_MASK) + Screen.TwipsPerPixelX, _
                  .RowPos(0) + Screen.TwipsPerPixelY
  End With
End Sub

'覆うピクチャボックスの初期設定
Private Sub iniHead()
  Dim sngTpP_X As Single
  Dim sngTpP_Y As Single
  Dim strCaption As String

  sngTpP_X = Screen.TwipsPerPixelX
  sngTpP_Y = Screen.TwipsPerPixelY

  'SetParentを使うと何かと後の操作が簡単なので・・・
  'SetParentを使わない場合かなり厄介な処理をする必要が出てきます
  SetParent Picture1.hWnd, MSFlexGrid1.hWnd
  With Picture1
    .AutoRedraw = True
    .BorderStyle = vbBSNone
    Set .Font = MSFlexGrid1.Font
    .BackColor = MSFlexGrid1.BackColorFixed
    .ForeColor = MSFlexGrid1.ForeColorFixed
    .Enabled = False
    .ScaleMode = vbTwips
    .ZOrder vbBringToFront
    With MSFlexGrid1
      Picture1.Move .ColPos(COL_MASK) + sngTpP_X, _
                    .RowPos(0) + sngTpP_Y, _
                    .ColWidth(COL_MASK) - sngTpP_X * 2, _
                    .RowHeight(0) * 2 - sngTpP_Y * 2
    End With
    .CurrentX = (.ScaleWidth - .TextWidth(COL_CAPTION)) / 2
    .CurrentY = (.ScaleHeight - .TextHeight(COL_CAPTION)) / 2
    Picture1.Print COL_CAPTION
  End With
End Sub

※国語・算数・理科までは問題なくお任せでマージできますが
 社会についてはお任せではマージされません、
 英語部分のマージ後の体育はマージされないのでコードで
 対応策をとることでマージされたように見えます。

 ピクチャボックスはEnabled=Falseで各イベントを直下の
 コントロールへ透過しています(ヘッダクリック等対応)。

 セル幅変更等が必要な場合は自分で組み込んでみて下さい、
 かなり面倒と思いますが・・・



 [スレッド一覧へ] [親スレッドへ]