「FAQ」カテゴリーアーカイブ

Curlに関するFAQのページです

オフライン実行について

【ご質問】
オフラインで使用することは可能でしょうか。

【回答】
随時接続コンピューティング(OCC)機能を使用することにより可能です。

詳細は、Curl開発者ガイドの
[外部リソースとの対話]-[随時接続コンピューティング (OCC)]
の項をご参照ください。

アニメーションについて

◆ご質問◆
アニメーションは使用出来るのでしょうか。

◆回答◆
Timerイベントを使用してアニメーションを表示することが出来ます。

Curl開発者ガイドの
[グラフィックスとレンダリング]→[アニメーション]の項
をご参照ください。

RecordGridで入力チェックを行うには

◆ご質問◆
RecordGridにおいて必須入力チェック、桁数チェック、属性チェック等をクライアント側で行うことは可能でしょうか。

◆回答◆
各列毎に、RecordGridColmnクラスの非ローカルオプションである”cell-spec”に
チェックロジックを含んだカスタマイズしたRecordGridCell指定することで可能です。

RecordGridのIME制御

◆ご質問◆
RecordGridにて、各入力項目の属性によって自動的にIMEの「ON/OFF」を切り替えることは可能でしょうか。

◆回答◆
各列毎に、RecordGridColmnクラスの非ローカルオプションである”cell-spec”に
IMEのON/OFFを切替えるカスタマイズしたRecordGridCellを指定することで可能です。

ListBoxに横スクロールを表示させるには

【ご質問】
Curl RTE5の環境にて、ListBoxの下にスクロールバーを表示することは可能でしょうか。

【回答】
ScrollBoxクラスの”always-disable-hscroll?”プロパティを 利用することで実現可能です。

以下のサンプルを参考にしてください。

{curl 5.0,6.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}

{let lbox:ListBox = {ListBox width = 30mm, height = 20mm,
                        “Aardvark”, “Cat”, “Dog”, “Elephant”,
                        “あああああいいいいいうううううえええええおおおおお”,
                        “Aardvark”, “Cat”, “Dog”, “Elephant”
                    }
}

{value
    ||もしも将来のバージョンアップでグラフィック構造が変更されても
    ||出来るだけ対応できるようにするため宣言の型をできるだけ緩くします
    let ui:ListBoxUI = (lbox.ui-object asa ListBoxUI)
    let iterator:{Iterator-of Graphic} = ui.graphical-children

    ||ScrollBoxと決めてしまうとグラフィック構造が変更された場合にエラーになる可能性があるため
    ||any型にしておきます
    let g:any = ({iterator.read-one-as-any})
    ||型がScrollBoxのときのみ実行するように分岐しておきます
    {type-switch g
     case scroll-box:ScrollBox do
        ||こちらの設定で横スクロールが表示され利用できるようになります
        ||詳細は「always-disable-hscroll?」をヘルプドキュメントで検索してください
        set scroll-box.always-disable-hscroll? = false
     else
        ||型がScrollBoxではなかったときの処理を記述してください
    }

    lbox
}

(注意)
ScrollBoxを取得することで、ListBoxでの横スクロールバーの利用が可能となりますが、
上記サンプルは、”Ver5.0においてのListBoxのグラフィック構造”に沿ってScrollBoxを取得しているため、
将来もしもグラフィック構造が変更され、その”グラフィック構造が変更されたバージョン”に
アプリケーションをバージョンアップするとエラーが起こる可能性があります。

choose-fileで設定したファイルが取得できない

【ご質問】
choose-file プロシージャの default-location にファイル名だけを指定した場合、
開発環境ではファイル名が取得出来るのですが、APサーバに配置後アクセスした場合は
ファイル名が取得できません。

APサーバにアクセスしてダウンロードを行った場合に、
ファイル名をダイアログに設定したいのですがどのようにすればよいのでしょうか。

【回答】
{url}マクロに、ファイル名のみを指定した場合にはアプレットのソースファイルとの
相対関係でurlが解決され、ソースファイルと同じディレクトリにファイルがあることが想定されます。

正しくファイルを取得する為には、{url}マクロで、
絶対URLまたは相対URLでリソースの場所を明示する必要があります。
システムの移植性を考慮するとリソースの指定は、相対URLで指定することが
多くの場合望ましい結果をもたらします。

相対URLに関する詳細は、Curl開発者ガイドの
[外部リソースとの対話]-[ファイルやその他のリソースへのアクセス]
の項内の[Web サイト リソースの Url の作成]-[相対 URL]
の項をご参照ください。

Tableの罫線幅の設定について

◆ご質問◆
Tableの罫線の幅を設定したいのですが、どのようにすればよいのでしょうか。
また、罫線の色を変更することはできるのでしょうか。

◆回答◆
罫線の幅および罫線の色の設定は、
Tableクラスにある以下オプションを設定することで可能です。

  ・horizontal-line-color
  ・horizontal-line-width
  ・vertical-line-color
  ・vertical-line-width

詳細はCurl開発者ガイドの
[グラフィカルユーザインターフェイス]→[グラフィカルコンテナ]
→[表]→[表のオプション]→[水平線および垂直線の使用]

Curlで表示した画像をExcelにコピーする

【ご質問】
Curlで表示した画像(.gif など)をExcelに貼り付けるには、どのようにしたらよいのでしょうか。

【回答】
Clipboard.set-objectを使用することで実現可能です。

{{Clipboard.get-system-clipboard}.set-object
    {Pixmap.from-url
        {url [画像ファイルのURL]}
    }
}

詳細は、Curl開発者ガイドの
[CURL.DESKTOP.CLIPBOARD]-[Clipboard]
の項内のメソッド[set-object]の項をご参照ください。 

RecordGridの横スクロールについて

【ご質問】
RecordGridにて、プログラムから特定のセルが表示されるように
スクロールさせるにはどのようにすればよいのでしょうか。
Cellにフォーカスを設定せずに、カラムをスクロールさせる手段が見つかりませんでした。
フォーカス設定をせずに横スクロールをすることはできるのでしょうか。

【回答】
SkinnableRecordGridUIを継承したクラスを自身のui-objectに設定し、
“reveal-index(メソッド)”をオーバーライドすることで実現可能です。

詳細は以下のサンプルをご参照ください。

{curl 7.0,8.0 applet}

{define-class public MySkinnableRecordGridUI {inherits SkinnableRecordGridUI}
  {constructor public {default …}
    {construct-super …}
  }

  {method public {my-reveal-index row-index:int = -1, column-index:int = -1}:void
    {super.reveal-index row-index = row-index, column-index = column-index}
  }
}

{value
    let rs:RecordSet = {RecordSet
                           {RecordFields
                               {RecordField “a”, nullable?=true},
                               {RecordField “b”, nullable?=true},
                               {RecordField “c”, nullable?=true},
                               {RecordField “d”, nullable?=true},
                               {RecordField “e”, nullable?=true},
                               {RecordField “F”, nullable?=true}
                           },
                           {RecordData},{RecordData},{RecordData},{RecordData e = “target”},
                           {RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData},
                           {RecordData},{RecordData},{RecordData},{RecordData},{RecordData}
                       }
    let rg:RecordGrid = {RecordGrid ui-object = {MySkinnableRecordGridUI},
                            record-source = rs}
   
    {VBox
        {CommandButton label = “test”,
            {on Action do
                let ui:MySkinnableRecordGridUI = rg.ui-object asa MySkinnableRecordGridUI
                {dump ui}
                {ui.my-reveal-index row-index = 3, column-index = 4}
            }
        },
        rg
    }
}

IME(変換モード)の制御について

◆ご質問◆
IMEの制御について、入力モードは”input-method-keyboard-mode”で制御可能という認識ですが、
変換モードを制御することは可能でしょうか。

◆回答◆
入力モードについては、”input-method-keyboard-mode”にて制御することが可能ですが、
変換モードについては、生憎、Curlからは制御することができません。

CurlRTEのデフォルトの特権設定について

◆ご質問◆
Curl コントロールパネルのセキュリティタブにデフォルトで”secure.curl.com”の設定がありますが、
このホストに対する特権の解除を行なっても問題はありませんでしょうか。

◆回答◆
以前は”secure.curl.com”を使用しており、特権の設定を行う必要があったため、
デフォルトで”secure.curl.com”に特権を設定していましたが、
現在は使用していないため、このホストに対する特権の解除を行っても問題はありません。

マウスの操作について

◆ご質問◆
マウスの操作について、以下の操作をCurlで対応することは可能でしょうか。

 1.チルトホイールなどを使った横スクロールをする。
 2.マウスのプロパティにある「ポインタを自動的に既定のボタン上に移動する」を有効にする。

◆回答◆
これらはマウスおよびOSの機能により制御されているため、Curlによってその動作を制御することはできません。

エラーメッセージ:「モード ‘w’ でファイル [URL] を開くことに失敗しました」

◆ご質問◆
以下のメッセージが表示されます。
「モード ‘w’ でファイル ‘[ファイルのURL]’を開くことに失敗しました
  要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。(1224)」

この問題を解消するにはどのようにしたらよいでしょうか。

◆回答◆
今回のエラーメッセージは、以下のように構成されています。

「モード ‘①’ でファイル ‘②’ を開くことに失敗しました: ③」

 ①ファイルの読み書き込みモードを表すものです。
  今回は、’w’ですので、書き込みしていることを表します。
 ②ファイルパス、ファイル名を表すものです。
 ③ここには、OSからのメッセージが格納されます。
   「要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。 (1224)」
    は、今回の現象を調査する際に重要となるメッセージとなります。

「ファイルが他のプロセス(ウイルスバスターなど)に利用されているため、
  書き込みモードで開くことに失敗した」ことが原因として考えられます。

Curl言語やシステムそのものに問題があるのではなく、
稼動しているOSや周辺のプロセス(アプリケーション)が起因している可能性があります。

TextDisplayで複数行を表示させるには

【ご質問】
TextDisplayにおいて幅が狭く入力文章が途中で切れてしまいます。
複数行で全て表示するにはどのようにしたらよいのでしょうか。

【回答】
TextDisplayは一行で文字列を表示する想定で作られているため、
複数行を表示することはできません。

TextDisplayで複数行を表示させたい場合は、ロジックを改変した
TextDisplayに似せた新しいコントロールを作成する必要があります。
一例としては、TextAreaの背景色を調整し、文字編集を不可にすることで
TextDisplayに似たものになります。
以下のサンプルをご参照ください。

{curl 8.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}

|| SkinnableTextAreaUIのサブクラス
{define-class public CustomTextAreaUI {inherits SkinnableTextAreaUI}
  {constructor public {default …}
    {construct-super {splice …}}
    def v-bar = {self.scrollbox.get-vscroll}
    || スクロールバーは表示しない
    set v-bar.thickness = 0px
  }
}

{def text-area ={TextArea
                           width = 5cm,
                           height= 3cm,
                           ui-object = {CustomTextAreaUI},
                           value = {String.repeat-char ‘a’,100},
                           control-content-background = “#E0E0E0”,
                           editable? = false
                       }
}

{value
    text-area
}

 

バージョンにより印刷結果が異なる

【ご質問】
Curl RTE 4.0.6と、Curl RTE 7.0.3を使用して、
それぞれ印刷を行うと印刷結果が異なります。
バージョンによって印刷結果が異なるのは仕様なのでしょうか。
また、Curl RTE 7.0.3使用時に、Curl RTE 4.0.6と
同様の印刷結果にするにはどうしたらよいのでしょうか。

【回答】
この現象はRenderingModeに起因しています。
このRenderingModeはVer 6より導入した機能で、
Viewをレンダリングするモードを定義することができます。
Ver 7のdeafultでは”high-quality”が設定されております。

Ver 4と同一のレンダリングにするには
RenderingMode.normalを設定することで可能です。

下記のコードを用いることでRenderingModeを変更することができます。
{set-rendering-mode RenderingMode.normal}

詳細はAPIリファレンスの
[CURL.GUI.BASE]-[RenderingMode]と
[CURL.GUI.BASE]-[set-rendering-mode]
の項をご参照ください。

また以下のFAQもご参照ください。
http://developers.curlap.com/faq/49-faq-operation/317-2010-10-07-03-51-17.html
http://developers.curlap.com/faq/49-faq-operation/308-ver7.html

シングルクリックとダブルクリックを排他的に制御したい

【ご質問】
画面部品をシングルクリックまたはダブルクリックしてそれぞれ排他的に別々の処理をしたいと考えています。
しかし、ダブルクリックした場合、シングルクリック分のPointerPressイベントが発生してしまいまいた。
つまりダブルクリックの場合は、2回イベントが発生します。

これを制御し、ダブルクリックした時はシングルクリック分のPointerPressイベントが
発生しないようにすることは可能でしょうか。

【回答】
ダブルクリックをするとclick-countが1のときの処理が起動し、
その後click-countが2のときの処理が起動します。
この動作はCurlの仕様です。

以下は解決案の1つとして作成したサンプルです。

{curl 6.0,7.0,8.0 applet}
{curl-file-attributes character-encoding = “shift-jis”}

{let my-alarm:#Alarm}

{View
    {Frame width = 8cm, height = 8cm, background = “yellow”,
        {on e:PointerPress do
            {if e.button == left-button then
                {if e.click-count == 1 then
                    {set my-alarm = {Alarm
                                                delay = 0.4s,
                                                {proc {}:void
                                                     {output “シングルクリック”}
                                                }
                                            }
                    }
                elseif e.click-count == 2 then
                    {output “ダブルクリック”}
                    {my-alarm.cancel}
                }
            }
        }
    },
    visibility = “normal”,
    {on WindowClose do
        {exit}
    }
}
 

クリック後、任意の時間内にもう一度クリックされるかどうかを判断し、実行する処理を変えています。
任意の時間は「”複数クリック実行時のクリック間の最大遅延秒数(0.3s)” + 0.1s」で設定しています。
ただしこの方法ですと、シングルクリック実行時の処理が遅く感じられます。

この処理の遅さが許容されるかどうかは分かりませんが、
PointerPressの回数に応じて処理を分岐させるような構造は、
見直して頂く必要があるように思われます。

バージョン間でのTabContainer の仕様について

【ご質問】
TabContainerに関して、Ver 5とVer 7ではタブが幅に収まらない場合の
レイアウト・操作が異なります。

 Ver 5の場合:
 左右(上下)のボタンで表示位置を調整することで、タブの選択を行う。

 Ver 7の場合:
 ボタンを押下するとタブの一覧がコンテキストで表示され、その中から選択を行う。

Ver 7のTabContainerでVer 5相当の動作を行うようにすることは可能でしょうか。

【回答】
Ver 7より TabContainer の仕様が変更されたため、レイアウトが変更されています。

“install-standard-look-and-feel”プロシージャを用いることで
Ver 5と同様のレイアウトで表示することが出来ます。

詳細は、APIリファレンスの
[CURL.GUI.STYLED-CONTROLS]-[install-standard-look-and-feel]
の項をご参照ください。

ただし、このプロシージャを用いるとスキンが適用されず、丸みのないTabContainerでの
表示となります。(操作性だけでなく外見もVer 5と同様のものになります。)

外見が Ver 7 のままで、ボタンの配置や操作性を Ver 5同様にされたいのであれば、
オープンコントロールを使用する必要があります。
ただし、オープンソースを大幅に修正する必要があるため、作業に時間を要します。
※オープンコントロールは標準コントロール部品全体を複製しているため、
  ソースのコンパイル等に時間を要し、
  全体の処理速度が遅くなる可能性がありますので、
  使用する際はお気をつけください。

詳細は、Curl開発者ガイドの
[グラフィカル ユーザー インターフェイス]-[ダイアログ と コントロール]-[オープン コントロール]
の項をご参照ください。

グラフの軸の値をカンマ区切りで表示したい

【ご質問】
グラフの軸の数値をカンマ区切り形式にする場合、どのようにすればよいのでしょうか。

【回答】
Y軸のカスタマイズはLayeredChart.left-axis-parentを使用することで可能となります。
数値のカンマ区切りはNumberFormatterを使用することで可能となります。

詳細はサンプルをご参照ください。

詳細は、APIリファレンスの
[CURL.LANGUAGE.FORMAT]-[NumberFormatter]
の項をご参照ください。