こんにちは。
VLE拡張機能を使って、カスタムクラスを自由に配置したいと思っています。
作ったカスタムクラスはCanvasを継承しており、レイアウトコンテナとして認識させたいのですが、
登録・配置など問題はなさそうなのですが、
レイアウトコンテナとして認識させることができていません。
なにか設定が必要ですか?
よろしくお願いします。
okm 様
質問の意図に外れていましたらすみません。
私もVLEの機能拡張を利用していますが、
拡張化のためのファイル ****.scurl に存在する
{register-palette-item DesignTime○○○}
○○○ = カスタム化されたクラス名
の継承クラスは、DesignTimeContainerGraphic でしょうか?
TextField や TextArea などの コントロールは
DesignTimeGraphic を継承しますが、
Box や Canvas などは DesignTimeContainerGraphic になるようです。
ちなみに
\Curl Corporation\Surge\[ここはversionによって変わる 7 とか 8 とか]\ide\vle\editor
に、拡張機能のためのクラスが存在します。
onyoさま
ありがとうございます!
おっしゃるとおり、継承クラスがDesignTimeContainerGraphicではありませんでした。
他にも、部品を乗っけられるようにするメソッド(でいいのでしょうか?)を足したりしました。
コントロール部品なら、VLE拡張機能エディタで簡単に作成できると思うのですが、
コンテナクラスは、手作業での修正が必要なんですね。
(それとも、自動で作成できるけど、勉強不足なだけかもしれませんが・・)
助かりました、ありがとうございました!
okm 様
>他にも、部品を乗っけられるようにするメソッド(でいいのでしょうか?)を足したりしました。
拡張機能のためのクラスを参照されたのであれば
恐らくあっていると思います。
自分もツールでの対処がわからなかったので
手直しで対処しました。
コントロールの中でも
CommandButton をカスタム化した場合
DesignTimeVersionedFrameContainer になるようです。
コンテナの場合は手作業必須な気がします。IDEがインストールされていれば、インストールディレクトリの ide/vle 以下でVLEのソースが見れるようなので、VBoxの実装等が参考にできると思います。
onyoさま
>コントロールの中でも
>CommandButton をカスタム化した場合
>DesignTimeVersionedFrameContainer になるようです。
そうなんですか!しりませんでした。
Curlのマニュアル等検索してもみつからなかったのですが、
DesignTimeVersionedFrameContainer とは、どういうものなんでしょうか?
CommandButtonもカスタム化していますが、VLE拡張エディタで作成したものも DesignTimeGraphic を継承したものが作成されています。
なにか不都合があるのでしょうか?
お分かりの範囲で教えていただけますか。
yosugaさま
ありがとうございます。
やはり手作業が発生するんですね。
VBoxのソースもみてみました。
それにしても、CurlのDocは見づらいですよね。
JavaDocみたいにならないのでしょうか・・。
カスタムクラス作っても、Docまでは作れません><。
okmさま
Curlには、javadocみたいな感じで、docstringってのがあります。
たしか、Curlのヘルプそのものも、curlのdocstringを用いていたと思います。
okm 様
一応、Ver7.0のソースも見てみましたが、
なにぶん私が作成した VLE拡張機能の Version は 4.0ですから
お使いの Version に適合するかはわかりませんので経験だけを語りますね。
登録、配置だけでしたら
CommandButton や CheckBox の
DesignTime○○○ クラスの継承先が DesignTimeGraphic
でも問題ありません。
が・・・自分はコンパイルのときに問題が発生しました。
標準の CommandButton は VLE で配置すると layout-container
なのですが
カスタム化した CommandButton は layout-element になってしまい
実行コンパイル時にエラーとなりました。
そこで ide/vle/editor/standard-desgn-class.scurl の
仕組みを見てみることにしました。
カスタム化された全てのコントロール、コンテナ
は DesignTimeGraphic を継承します。
DesignTimeVersionedFrameContainer は
DesignTimeCommandButton の直接の親ですから
カスタム化する場合もこのクラスを継承することで
ほぼ全てを満たしてくれると思います。
先の container と element の問題は
サブクラスの中の {new-element} メソッドのreturn値が
LayoutElement なのか LayoutContainer なのかで変わるということが
ソースを読み解くと判明しました。
要は、サブクラスの機能をVLE拡張で、どう使いたいのかで
自分なりに色々できますが、
めんどくさい場合、自分の作ったコントロールに
一番近いVLE標準のクラスを継承し、必要な部分だけを
改修していくのが近道だと自分は思っています。
DesignTimeGraphic
├DesignTimeContainerGraphic
│├DesignTimeBaseFrameContainer
││├DesignTimeVersionedFrameContainer
│││├DesignTimeCommandButton
│││├DesignTimeCheckButton
│││├DesignTimeRadioButton
│││・
│││・
│││・
│││
││├DesignTimeRadioFrame
││├DesignTimeDialog
││・
││・
││・
││
│├DesignTimeCanvas
│・
│・
│・
│
├DesignTimeControl
・├DesignTimeTextField
・├DesignTimeTextDisplay
・├DesignTimePasswordField
├DesignTimeTextArea
├DesignTimeDropdownList
├DesignTimeComboBox
├DesignTimeListBox
・
・
・
kinoさま
そのdocstring、読みにくいと思いませんか・・。
英語だからですかね。
英語の勉強しろ!という結論かもですね・・・・^^;
onyoさま
詳しくありがとうございます!
当方はVer7で開発しております。(今日CDE8にアップデートしてみましたが・・)
ただ、 'DesignTimeVersionedFrameContainer' は認識されません。 というエラーが発生してしまいます。
こちらのCommandButtonのカスタムクラスがよくないのでしょうか・・。
う~ん、、
ひまとまず、DesignTimeGraphic を継承することで期待する動きをしているようなので、このままにしてみます。
ありがとうございました。