Worksheetオブジェクトの1つのセルに、TextFieldを縦に2つ配置したいのですが、
どのように配置すればよいのでしょうか?
2行のセルにそれぞれTextFieldオブジェクトを設定し、行の結合を行えばできるかと思いますが、
なるべく1つのセルに入れたい考えです。Worksheetのイメージは添付ファイルのとおりです。
Worksheetオブジェクトのセルに複数のTextFieldを入れたい
WorksheetオブジェクトとはCurl External Libraryに含まれている、
Worksheetクラスのことでしょうか。
それならば、単純にVBoxでくくったTextFieldを入れてやればいいのではないでしょうか。
こんな感じで…
{import * from COM.CURL.EXT.WORKSHEET}
{Worksheet
4, 2, {widths 60pt, 1in},
font-size = 10pt, font-family = "Tahoma",
scrollable? = false,
border-width = 1px,
row = 0, col = 0,
row-height = .25in, colspan = 2, {big Sample Worksheet},
row = 1, col = 0, "Quantity", {input-cell domain = int, 0},
row = 2, col = 0, row-height = 1in,
{VBox
"Price",
{TextField width = 50pt, value = "test1"},
{TextField width = 50pt, value = "test2"}
},
{input-cell domain = DataSource.currency-domain, 0.0},
row = 3, col = 0,
{value-cell halign = "right", "Total"},
{formula-cell
domain = DataSource.currency-domain,
{proc {dest
ataRef, a
ataRef, b
ataRef}:void
set dest.value = a.as-double * b.as-double
},
{RelativeCellRef -2, 0},
{RelativeCellRef -1, 0}
}
}
Worksheetクラスのことでしょうか。
それならば、単純にVBoxでくくったTextFieldを入れてやればいいのではないでしょうか。
こんな感じで…
{import * from COM.CURL.EXT.WORKSHEET}
{Worksheet
4, 2, {widths 60pt, 1in},
font-size = 10pt, font-family = "Tahoma",
scrollable? = false,
border-width = 1px,
row = 0, col = 0,
row-height = .25in, colspan = 2, {big Sample Worksheet},
row = 1, col = 0, "Quantity", {input-cell domain = int, 0},
row = 2, col = 0, row-height = 1in,
{VBox
"Price",
{TextField width = 50pt, value = "test1"},
{TextField width = 50pt, value = "test2"}
},
{input-cell domain = DataSource.currency-domain, 0.0},
row = 3, col = 0,
{value-cell halign = "right", "Total"},
{formula-cell
domain = DataSource.currency-domain,
{proc {dest
ataRef, a
ataRef, b
ataRef}:voidset dest.value = a.as-double * b.as-double
},
{RelativeCellRef -2, 0},
{RelativeCellRef -1, 0}
}
}
ありがとうございます。
この例では、Quantityにカーソルがある状態でtabキーを押したときにtest1,test2,priceの順に遷移させたいですが、tabキーを押して遷移させてもtest1やtest2の項目には行きません。
また、Quantityにカーソルがある状態でtest1にマウスクリックしてもQuantityに戻ってしまいます。
input-cellのui-specプロパティにこんな感じにVBoxでも入れることができれば実現できそうな感じですが、入れるとアサーションの失敗でエラーになってしまいます。
{input-cell ui-spec =
{VBox
"Price",
{TextField width = 50pt, value = "test1"},
{TextField width = 50pt, value = "test2"}
},""}
この例では、Quantityにカーソルがある状態でtabキーを押したときにtest1,test2,priceの順に遷移させたいですが、tabキーを押して遷移させてもtest1やtest2の項目には行きません。
また、Quantityにカーソルがある状態でtest1にマウスクリックしてもQuantityに戻ってしまいます。
input-cellのui-specプロパティにこんな感じにVBoxでも入れることができれば実現できそうな感じですが、入れるとアサーションの失敗でエラーになってしまいます。
{input-cell ui-spec =
{VBox
"Price",
{TextField width = 50pt, value = "test1"},
{TextField width = 50pt, value = "test2"}
},""}
あーなるほど、入力させることも視野にいれてるんですね。
ちょっとソースコード見てみましたが、今のWorksheetのつくりでは難しいような
気がします。
{input-cell ui-spec =
{proc {cv:CellValue}:Visual
set cv.spec._locked? = true
{return
{VBox
"Price",
{TextField width = 50pt, value = "test1"},
{TextField width = 50pt, value = "test2"}
}
}
}
},
""
}
ui-specの指定でこのようにprocを指定してVisualを返すことができ、
その中でCellSpecの_locked?プロパティを変えてやるとアサーションエラーは
発生しませんが、勿論tabキーでの遷移はうまくいきません。
どうもフォーカスが当たったときに編集用のエディタにはValueControlしかダメなようで、
今回のようにVBoxなどのVisualではあくまでも表示用ということになり、
フォーカスが当たらず遷移対象から無視されるみたいです。
ちょっとソースコード見てみましたが、今のWorksheetのつくりでは難しいような
気がします。
{input-cell ui-spec =
{proc {cv:CellValue}:Visual
set cv.spec._locked? = true
{return
{VBox
"Price",
{TextField width = 50pt, value = "test1"},
{TextField width = 50pt, value = "test2"}
}
}
}
},
""
}
ui-specの指定でこのようにprocを指定してVisualを返すことができ、
その中でCellSpecの_locked?プロパティを変えてやるとアサーションエラーは
発生しませんが、勿論tabキーでの遷移はうまくいきません。
どうもフォーカスが当たったときに編集用のエディタにはValueControlしかダメなようで、
今回のようにVBoxなどのVisualではあくまでも表示用ということになり、
フォーカスが当たらず遷移対象から無視されるみたいです。