Thread Rating:
  • 196 Vote(s) - 2.62 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RecordGridColumnGroupの背景色
10-06-2015, 09:02 AM,
#1
RecordGridColumnGroupの背景色
RecordGridColumnGroupの背景色はどのように設定すればよいのでしょうか。
RecordGridのHeader-specに下記のようなprocを指定したのですが、カラム毎のヘッダー部分のみに適用されて
グループヘッダー部分はデフォルトのままになってしまいます。

{define-proc public {make-header rgc:RecordGridColumn}:Graphic
def f =
{VBox
height = 15px,
width = {make-elastic},
halign = "center",
{CustomRasterBox
font-size = 9pt,
{splice rgc.field.caption}
},
{Fill}
}
{after 0s do
def h = f.parent
set h.background = "#94cbff"
}
{return f }
}
Reply
10-06-2015, 09:46 AM,
#2
RE: RecordGridColumnGroupの背景色
header-spec とどう連動させるとよいか具体的なコードがぱっと思いつきませんが、
RecordGridColumnGroupの背景色は RecordGrid.header-options で変えられたと思います。

Code:
header-options = {RecordGridRowOptions background = "#94cbff"}
Reply
10-06-2015, 10:01 AM,
#3
RE: RecordGridColumnGroupの背景色
実行できるようなサンプルがついてないので推測ですが、
以下のようにしてRecordGridColumnGroupの方にも背景色を
設定したいということでしょうか。

それならば、RecordGridのheader-optionsオプションに設定すればどうでしょうか。

header-options = {RecordGridRowOptions background = "#94cbff"},

Code:
{define-proc public {make-header rgc:RecordGridColumn}:Graphic
    def f =
        {VBox
            height = 15px,
            width = {make-elastic},
            halign = "center",
            {RasterBox
                font-size = 9pt,
                {splice rgc.field.caption}
            },
            {Fill}
        }
    {after 0s do
        def h = f.parent
        set h.background = "#94cbff"
        
    }
    {return f }
}

{value
    let people:RecordSet =
        {RecordSet
            {RecordFields
                {RecordField
                    "First1", caption = "First Name1", domain = String
                },
                {RecordField
                    "First2", caption = "First Name2", domain = String
                },
                {RecordField
                    "Last", caption = "Last Name", domain = String
                },
                {RecordField "Age1", domain = int},
                {RecordField "Age2", domain = int}
            },
            {RecordData First1 = "John", First2 = "John2", Last = "Smith", Age1 = 25, Age2 = 252},
            {RecordData First1 = "Jane", First2 = "Jane2", Last = "Smith", Age1 = 29, Age2 = 252},
            {RecordData First1 = "Jane", First2 = "Jane2", Last = "Jones", Age1 = 28, Age2 = 252}
        }
    
    let r:RecordGrid =
        {RecordGrid
            header-options = {RecordGridRowOptions background = "#94cbff"},
            record-source = people,
            height = 10cm,
            width = 13cm,
            header-spec = make-header,
            {RecordGridColumnGroup
                "",
                {RecordGridColumn "First1"}
            },
            {RecordGridColumnGroup
                "Name",
                {RecordGridColumn "First2"},
                {RecordGridColumn "Last"},
                {RecordGridColumn "Age1"}
            },
            {RecordGridColumnGroup
                "Ageeee",
                {RecordGridColumn "Age2"}
            }
        }
    
    r
}
Reply
10-06-2015, 11:17 AM,
#4
RE: RecordGridColumnGroupの背景色
回答ありがとうございます。
header-options を指定したところ、RecordGridColumnGroupの背景色を設定することができましたが、
enclose-header-label? = falseとしてグループヘッダと列ヘッダの境界線を無くしている箇所について、
白い線が入っているような状態になります。
こちらもheader-options内で指定できる項目があるのでしょうか。
Reply
10-06-2015, 02:44 PM,
#5
RE: RecordGridColumnGroupの背景色
これはRecordGridColumnGroupにenclose-header-label? = falseを設定した際、
白い罫線が描画されているのではなくて、セル間の微妙な隙間が白く見えているような状況です。
この隙間の色を変えることで回避できるかと思いますが、RecordGridの構造上、
この色を簡単に変えることはできないようです。
(header-options内や、RecordGrid等のオプションで設定する項目もないようです)

これを根本的に回避(色を変える)するにはオープンコントロールでRecordGrid自体のソースコードを修正し
そちらを使うことが考えられます。
が、オープンコントロールを使うとなるとパフォーマンス面などに大きく影響が出てきます。

なので、トリッキーなコードになりますが、この隙間の色を変えるのではなく、隙間自体をなくすように
すれば白い線が出ていないように見えます。
しかし、この隙間はヘッダーだけでなくデータ部の隙間も無くしてしまいますので標準のレコードグリッドと比べると
若干高さが低くなります。(本当に少し)

Code:
{define-proc public {make-header rgc:RecordGridColumn}:Graphic
    def f =
        {VBox
            height = 15px,
            width = {make-elastic},
            halign = "center",
            {RasterBox
                font-size = 9pt,
                {splice rgc.field.caption}
            },
            {Fill}
        }
    {after 0s do
        def h = f.parent
        set h.background = "#94cbff"
        
    }
    {return f }
}


{value
    
    
    let people:RecordSet =
        {RecordSet
            {RecordFields
                {RecordField
                    "First1", caption = "First Name1", domain = String
                },
                {RecordField
                    "First2", caption = "First Name2", domain = String
                },
                {RecordField
                    "Last", caption = "Last Name", domain = String
                },
                {RecordField "Age1", domain = int},
                {RecordField "Age2", domain = int}
            },
            {RecordData First1 = "John", First2 = "John2", Last = "Smith", Age1 = 25, Age2 = 252},
            {RecordData First1 = "Jane", First2 = "Jane2", Last = "Smith", Age1 = 29, Age2 = 252},
            {RecordData First1 = "Jane", First2 = "Jane2", Last = "Jones", Age1 = 28, Age2 = 252}
        }
    
    
    let f:Frame = {Frame "sss",
                      {on e:AttachEvent do
                          
                          let vbox:VBox = f.parent.parent.parent.parent asa VBox
                          set vbox.spacing = 0pt
                          
                      }
                  }
    
    let r:RecordGrid =
        {RecordGrid
            header-options = {RecordGridRowOptions background = "#94cbff"},
            record-source = people,
            height = 10cm,
            width = 13cm,
            header-spec = make-header,
            {RecordGridColumnGroup
                enclose-header-label? = false,
                f,
                {RecordGridColumn
                    "First1"
                }
            },
            {RecordGridColumnGroup
||++            enclose-header-label? = false,
                "Name",
                {RecordGridColumn "First2"},
                {RecordGridColumn "Last"},
                {RecordGridColumn "Age1"}
            },
            {RecordGridColumnGroup
                "Ageeee",
                {RecordGridColumn "Age2"}
            }
        }
    
    r
}
Reply
10-06-2015, 05:23 PM,
#6
RE: RecordGridColumnGroupの背景色
回答ありがとうございます。
確かに言われてみれば微妙に高さが変わっているような、というくらいの違いでした。
このような手法は考えてもいなかったので覚えておこうと思います。
Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1262')