Thread Rating:
  • 340 Vote(s) - 2.66 Average
  • 1
  • 2
  • 3
  • 4
  • 5
グリッドのカラムを自動的に伸張させたい
12-20-2013, 03:24 PM,
#1
グリッドのカラムを自動的に伸張させたい
グリッド内で、金額を入力するカラムがあるのですが、
通常は数十万円程度の入力のため、
カラムのデフォルトの幅、は6桁+カンマの7桁を前提に設定していますが、
明細によっては(つまり、あるレコードだけ)、数千万程度の金額を入れることがあり、
その場合に、自動的にカラムの幅を大きくして、
入力金額すべてが表示枠内に収まるようにしたいです。

どのような方法が良いでしょうか。
12-20-2013, 03:32 PM,
#2
RE: グリッドのカラムを自動的に伸張させたい
とりあえず、ユーザの入力時だけ自動伸張することを前提にして、
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}
    }
}
01-10-2014, 03:44 PM,
#3
RE: グリッドのカラムを自動的に伸張させたい
Curlの拡張ライブラリには、縦に伸張する(改行分の複数行を表示できる)セルがありますね。
ステキ。
http://developers.curlap.com/re-referenc...lib05.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
        }
    }
}

01-24-2014, 05:25 PM,
#4
RE: グリッドのカラムを自動的に伸張させたい
テキストの正確な長さを取得するためには、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}, "いちにさんし"                }
01-27-2014, 03:25 PM,
#5
RE: グリッドのカラムを自動的に伸張させたい
ご指摘のとおり、フォントサイズが関係するので、
get-string-advance-width を使うべきですね。

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

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('1021')