Curl Global Community
グリッドのカラムを自動的に伸張させたい - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: グリッドのカラムを自動的に伸張させたい (/showthread.php?tid=1021)



グリッドのカラムを自動的に伸張させたい - umemura - 12-20-2013

グリッド内で、金額を入力するカラムがあるのですが、
通常は数十万円程度の入力のため、
カラムのデフォルトの幅、は6桁+カンマの7桁を前提に設定していますが、
明細によっては(つまり、あるレコードだけ)、数千万程度の金額を入れることがあり、
その場合に、自動的にカラムの幅を大きくして、
入力金額すべてが表示枠内に収まるようにしたいです。

どのような方法が良いでしょうか。



RE: グリッドのカラムを自動的に伸張させたい - umemura - 12-20-2013

とりあえず、ユーザの入力時だけ自動伸張することを前提にして、
update-data メソッドで実装してみました。


Code:
{let people:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField "First", domain = String},
            {RecordField "Last", domain = String},
            {RecordField "Age", domain = int}
        },
        {RecordData First = "John", Last = "Smith", Age = 25},
        {RecordData First = "Jane", Last = "Smith", Age = 29},
        {RecordData First = "Jane", Last = "Jones", Age = 28}
    }
}
||自動伸張可能なカラム
{define-class public open ElasticCell
  {inherits StandardStringCell }

  {constructor public {default}
    {construct-super}
  }

  {method public open {update-data val:any}:#DataException
    let str-val:String = {self.format val}
    def current-col-width =
        {if-non-null self.column.width then
            {any-to-Distance self.column.width}
         else
            0pt
        }

    ||文字数×フォントサイズ ÷ 2 + 余白
    ||※実際は、文字のバイト数を取得したほうがよい
    def demanded-cell-width =
        {any-to-Distance  self.font-size} * str-val.size / 2 + 10pt

    set self.column.width = {max current-col-width, demanded-cell-width }

    {return {super.update-data val}}
  }
}

{value
    {RecordGrid
        record-source = people,
        {RecordGridColumn  "Last", cell-spec = ElasticCell}
    }
}



RE: グリッドのカラムを自動的に伸張させたい - umemura - 01-10-2014

Curlの拡張ライブラリには、縦に伸張する(改行分の複数行を表示できる)セルがありますね。
ステキ。
http://developers.curlap.com/re-reference/44-clib05.html

Code:
{import * from COM.CURL.EXT.DATA-ACCESS}
{let rs:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField "multi", domain = String}
        },
        {RecordData multi = "あいうえおかきくけこさしすせそ"}
    }
}
{value
    {RecordGrid
        record-source = rs,
        height = 5in,
        {RecordGridColumn
            "multi",
            cell-spec = MultilineStringCell
        }
    }
}




RE: グリッドのカラムを自動的に伸張させたい - alchimiste - 01-24-2014

テキストの正確な長さを取得するためには、font-sizeよりDisplayContextのget-string-advance-widthメッソドを使用することがいいと思います。

画面のDisplayContextを求める簡単な方法はget-default-display-contextプロシージャを利用します。
次はテキストの長さを取得する例です。
Code:
def string-width = {{get-default-display-context}.get-string-advance-width
                {Font "tahoma", 9pt}, "いちにさんし"                }



RE: グリッドのカラムを自動的に伸張させたい - umemura - 01-27-2014

ご指摘のとおり、フォントサイズが関係するので、
get-string-advance-width を使うべきですね。

Unicode などの文字の場合は、おかしくなってしまうところでした。
ありがとうございます。