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

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

Curl と Webシステム間の認証連携(SSO)

CurlアプリとWebアプリ間で、SSOを実現するために、認証クッキーを共有する方法を採用する場合、以下のような連携方法があります。

先にWebシステム認証済みの状態で、Curlアプリへログインする場合
連携方法:

デタッチトアプレットの起動ファイル(.dcurl)をサーバーサイドで動的に作成し、通信が発生する可能性がある処理の前処理として、{set-insecure-http-cookie 「サーバーサイドで作成した認証クッキー情報」}, {set-secure-http-cookie 「サーバーサイドで作成した認証クッキー情報」} 等を利用して、アプレットに必要な認証クッキーをアプレットコードに埋め込み、Curlアプリを実行する時にサーバーと通信する前にクッキー情報が設定され、それ以降サーバーとの通信が該当クッキーが利用されるようになり、SSO認証が実現可能になります。

Curlアプリでログイン後、認証クッキーをWebシステムに渡してSSOを実現する場合
連携方法1:

CurlアプレットからWebシステムのリンクを開くときに、認証クッキーをGETパラメータでWebシステム側に渡すして、Webシステム側のJavascriptコードでクッキーとして設定し、それ以降Webシステムサーバー側へアクセスできるようになります。

連携方法2:

クリップボードを活用すれば、CurlアプリとWebシステム間で相互にデータの引き渡しができるため、認証クッキーの共有もお互いに可能になります。
この方法の詳細はこちらのページでご確認ください

Google Chromeのロケーションバーに独立型アプレットのurlを指定しても起動しない

【ご質問】

Google Chromeのロケーションバーに独立型アプレットのurlを指定しましたが、ブラウザ画面に次のようなエラーメッセージが表示されて
起動できません。
curl://launch/http://~/start.dcurlに一致する情報は見つかりません

検索のヒント:

キーワードに誤字・脱字がないか確認します。
別のキーワードを試してみます。
もっと一般的なキーワードに変えてみます。

【回答】

Google Chromeブラウザの画面にこのメッセージが表示される場合は、指定したURLがGoole検索の対象の文字列と見なされて、
検索結果が表示されています。

このような場合は次の手順をお試しください。

Chromeのロケーションバーに再度、独立型アプレットのURLを貼り付けます。
この際にロケーションバーの下に表示されるドロップダウンの状態により
対応方法が異なります。

  • URLの先頭に虫眼鏡のアイコンが付いた行とファイルのアイコンが付いた行が表示された場合
    faq_chrome_curl_launch_link_01.jpg
    1. ファイルアイコンの行を選択
    2. 「外部プロトコル リクエスト」ダイアログが表示される
    3. 「このようなリンクの設定をすべて保存する」にチェックを入れ、「アプリケーションの起動」ボタンを押す
      faq_chrome_curl_launch_link_02.jpg
  • URLの先頭に虫眼鏡のアイコンが付いた行のみが表示された場合

    以前に「外部プロトコル リクエスト」ダイアログが表示された際に、「このようなリンクの設定をすべて保存する」に
    チェックを入れて「何もしない」ボタンを押しているとこの状態になります。

    この場合は、下記の手順でGoogle Chromeの設定を変更することで独立型アプレットを起動することができます。

    1. Google Chromeを一旦終了する
    2. Google Chromeの設定ファイル “Local State”をテキストエディタで開く
      ※設定ファイルは下記にあります(Windowsの場合)
      <ユーザフォルダ(例:C:\Users\<ユーザ名>)>\AppData\Local\Google\Chrome\User Data\Local State
    3. Local Stateファイルの中から文字列”curl”を検索
    4. 文字列「”curl”:true, 」のtrueをfalseに書き換えてファイルを上書き保存
    5. Google Chromeを起動し、ロケーションバーに独立型アプレットのUrlを入力する

以上の手順で独立型アプレットが起動します。
Chromeを一度終了して再起動した後は、”curl://”まで入力するとアイコンがファイルアイコンに変わるようになり、上記手順は不要になります。

DELL社製PCでCurlのアプレットから印刷を行うとフリーズしてアプリケーションが動作を停止します。

【ご質問】 DELL社製PCでCurlのアプレットから印刷を行うとフリーズしてアプリケーションが動作を停止します。

【回答】
「Dell Backup and Recovery」などのDELL社製ユーティリティソフトウェアがプリインストールされている場合、
Curlのアプレットから印刷を行った際に印刷ダイアログが表示されずにアプリケーションが動作を停止するという
報告事例がございます。

Curl Pro/IDEライセンスが有効化出来ない

【ご質問】
Curl Pro/IDEライセンスの有効化を行おうとしたところ、以下の画像の様に
「無効なライセンスコード」エラーが発生します。
(ライセンスコードが間違っていないことは確認済みです。)
pro-license-error1.png

【回答】
上記メッセージはCurlコントロールパネルの「ライセンス」タブにCurl Pro/IDEライセンスを
入力した際に表示されるものです。

Curl Pro/IDEライセンスはCurl IDE又はCDEから有効化する必要があります。
Curl IDEからライセンスを有効化する際の手順は以下になります。
 1.Curl IDE を起動
 2.メニューより「ヘルプ」 – 「Curl Pro/IDE ライセンスの購入」を選択
 3.ダイアログ内の「ライセンスのアクティベート」ボタンを押下
 4.スタンドアロンライセンスの「ライセンスキー」にライセンスを入力して「OK」ボタンを押下

ライセンス有効化手順に関してはこちらもご参照ください。

参考情報:
誤ったライセンスコードを使用してCurl IDEからライセンス有効化を行った際には
以下の様なメッセージが表示されます。
pro-license-error2.png

「Could not contact ‘Surge.exe’」というエラーについて

【ご質問】
Curlアプリケーションを起動しようとしたところ、
「Could not contact ‘Surge.exe’」
というエラーが発生して起動出来ません。

この現象の原因と対処法を教えて頂けますでしょうか?

【回答】
「Could not contact ‘Surge.exe’」というエラーが発生する要因としては
過去の事例からは以下のことが考えられます。

1.インストールに失敗している
なんらかの原因でインストールに失敗している可能性があります。
例.administrator以外の権限でインストールを行った。
→Curlを一度アンインストールした後、再度インストールを行うことで
  現象が解消することがあります。
  アンインストールが正常に実行できない場合は以下のページを参考に
  手動アンインストールを実行してください。
  http://developers.curlap.com/faq/50-faq-not-expectation/790-manual-uninstall-winxp.html
  http://developers.curlap.com/faq/50-faq-not-expectation/789-manual-uninstall-win7.html

  その他インストール時の注意点に関しては、下記のページをご参照ください。
  http://www.curlap.com/download/rte/installation.html

2.セキュリティソフトの影響を受けている
ウイルス対策ソフト・パーソナルファイアーウォールなどのセキュリティソフトの
影響を受けている可能性があります。
例.セキュリティソフトがCurlを起動するために必要なファイルをロックしている。
→セキュリティソフトを無効化して現象が解消しないか確認することで切り分けできます。
  セキュリティソフトのログなどを確認することで結うような情報が得られる場合もあります。

3.古いバージョンのCurlを動かそうとしている場合
複数バージョンのCurlがインストールされている環境において、
明示的に古いバージョンのCurlを起動しようとすると上記エラーが発生する可能性があります。
→過去の事例では、一度手動アンインストールを行った後で再インストールを行うことで
  現象が改善しています。

4.(WindowsVista・7・8)UACの影響を受けている
WindowsOSのUAC(ユーザーアカウント制御)の影響を受けている可能性があります。
→UACを無効化して現象が解消しないか確認することで切り分けできます。

グラフY軸の最小値設定に関して

【ご質問】
グラフY軸のプロパティを以下のように設定したところ、表示される最小値が0になってしまいます。
最小値に正の数値を設定するにはどのようにしたらよいのでしょうか。

 force-range? = true
 forced-min = 80
 forced-max = 200

【回答】
最小値に正の数値を設定するためには、上記設定に加えて
force-zero?をfalseに設定する必要があります。 

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

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

{import * from CURL.GUI.CHARTS}

{let records:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “Region”, domain = String},
            {RecordField “M1”, caption = “January”, domain = int},
            {RecordField “M2”, caption = “February”, domain = int},
            {RecordField “M3”, caption = “March”, domain = int}
        },
        {RecordData Region = “North”, M1 = 100, M2 = 140, M3 = 130 },
        {RecordData Region = “East”, M1 = 110, M2 = 140, M3 = 170},
        {RecordData Region = “South”, M1 = 140, M2 = 100, M3 = 130},
        {RecordData Region = “West”, M1 = 160, M2 = 190, M3 = 140}
    }
}
{let chart1:LayeredChart =
    {LayeredChart
        width = 10cm,
        height = 6cm,
        left-axis = {new {NumericDataSeriesAxis-of double},
                        force-range? = true,
                        forced-min = 80,
                        forced-max = 200,
                        {ChartDataSeries records, “M1”},
                        {ChartDataSeries records, “M2”},
                        {ChartDataSeries records, “M3”}
                    },
        {LineLayer
            {ChartDataSeries records, “M1”},
            {ChartDataSeries records, “M2”},
            {ChartDataSeries records, “M3”},
            x-axis-data = {ChartDataSeries records, “Region”}
        }
    }
}
{let chart2:LayeredChart =
    {LayeredChart
        width = 10cm,
        height = 6cm,
        left-axis = {new {NumericDataSeriesAxis-of double},
                        force-zero? = false,
                        force-range? = true,
                        forced-min = 80,
                        forced-max = 200,
                        {ChartDataSeries records, “M1”},
                        {ChartDataSeries records, “M2”},
                        {ChartDataSeries records, “M3”}
                    },
        {LineLayer
            {ChartDataSeries records, “M1”},
            {ChartDataSeries records, “M2”},
            {ChartDataSeries records, “M3”},
            x-axis-data = {ChartDataSeries records, “Region”}
        }
    }
}

{VBox
    {text “force-zero?”の設定が無い場合},
    chart1,
    {text “force-zero?=false”にした場合},
    chart2
}

y-min.png

詳細は、Curl開発者ガイドの
[グラフ]-[LayeredChart 軸]-[軸の範囲の制御]
の項と、APIリファレンスの
[CURL.GUI.CHARTS]-[NumericAxisMixin-of]
の項内のメソッド[set-forced-range]の項をご参照ください。

また以下のページもご参照ください。
http://developers.curlap.com/faq/48-faq-specification/863-y-max.html
http://developers.curlap.com/faq/48-faq-specification/418-y.html

グラフY軸の最大値設定に関して

【ご質問】
グラフY軸のプロパティを以下のように設定したところ、表示される最大値が1になってしまいます。
最小値のみ設定し、最大値はデータに依存して表示させることは可能でしょうか。

 force-range? = true
 forced-min = 0

【回答】
force-range?をtrueに指定した場合は必ずforced-minに加えて
forced-maxも指定する必要があります。

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

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

{import * from CURL.GUI.CHARTS}

{let records:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “Region”, domain = String},
            {RecordField “M1”, caption = “January”, domain = int},
            {RecordField “M2”, caption = “February”, domain = int},
            {RecordField “M3”, caption = “March”, domain = int}
        },
        {RecordData Region = “North”, M1 = 100, M2 = 140, M3 = 130 },
        {RecordData Region = “East”, M1 = 110, M2 = 140, M3 = 170},
        {RecordData Region = “South”, M1 = 140, M2 = 100, M3 = 130},
        {RecordData Region = “West”, M1 = 160, M2 = 190, M3 = 140}
    }
}
{let chart1:LayeredChart =
    {LayeredChart
        width = 10cm,
        height = 6cm,
        left-axis = {new {NumericDataSeriesAxis-of double},
                        force-range? = true,
                        forced-min = 0,
                        {ChartDataSeries records, “M1”},
                        {ChartDataSeries records, “M2”},
                        {ChartDataSeries records, “M3”}
                    },
        {LineLayer
            {ChartDataSeries records, “M1”},
            {ChartDataSeries records, “M2”},
            {ChartDataSeries records, “M3”},
            x-axis-data = {ChartDataSeries records, “Region”}
        }
    }
}
{let chart2:LayeredChart =
    {LayeredChart
        width = 10cm,
        height = 6cm,
        left-axis = {new {NumericDataSeriesAxis-of double},
                        force-range? = true,
                        forced-min = 0,
                        forced-max = 200,
                        {ChartDataSeries records, “M1”},
                        {ChartDataSeries records, “M2”},
                        {ChartDataSeries records, “M3”}
                    },
        {LineLayer
            {ChartDataSeries records, “M1”},
            {ChartDataSeries records, “M2”},
            {ChartDataSeries records, “M3”},
            x-axis-data = {ChartDataSeries records, “Region”}
        }
    }
}

{VBox
    {text “forced-max”が無い場合},
    chart1,
    {text “forced-max=200”にした場合},
    chart2
}

y-max.png

一定の値ではなくデータに依存して最大値を変えようとするのであれば、
チャートに使用するデータ(レコードセット)から最大値を取得して
設定してみてはいかがでしょうか。

詳細は、Curl開発者ガイドの
[グラフ]-[LayeredChart 軸]-[軸の範囲の制御]
の項と、APIリファレンスの
[CURL.GUI.CHARTS]-[NumericAxisMixin-of]
の項内のメソッド[set-forced-range]の項をご参照ください。

また以下のページもご参照ください。
http://developers.curlap.com/faq/48-faq-specification/864-y-min.html
http://developers.curlap.com/faq/48-faq-specification/418-y.html

円グラフで凡例を円の内側に表示したい

【ご質問】
PieChart・PieSetを使用しているのですが、凡例を見やすくするために
大きくしたところグラフ自体のサイズが小さくなってしまいました。
グラフ自体のサイズを小さくすることなく凡例を大きくするために
凡例を円グラフの内側に表示したいと考えていますが可能でしょうか。

【回答】
今回の要望を満たす一つの例として下記サンプルコードを参考にして下さい。

下記サンプルではPieChart 起動後、レイアウト処理の完了時に発生する
ChartLayoutChangedイベント時に
{PieChart.create-legend}を使用して凡例Graphicを作成して
PieSet内部に配置しています。

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

{import * from CURL.GUI.CHARTS}

{let records:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “Region”, domain = String},
            {RecordField “M1”, caption = “January”, domain = int}
        },
        {RecordData Region = “North”, M1 = 100},
        {RecordData Region = “East”, M1 = 110},
        {RecordData Region = “South”, M1 = 140},
        {RecordData Region = “West”, M1 = 160}
    }
}

{let chart:PieChart =
    {PieChart
        width = 10cm,
        height = 10cm,
        pie-label-radius = 0.5,
        legend-enabled? = false,
        inner-radius = 2cm,
        {PieSet
            legend-enabled? = true,
            wedge-labels? = false,
            {ChartDataSeries records, “M1”},
            label-data = {ChartDataSeries records, “Region”},
            {on ChartLayoutChanged at pie-set:PieSet do
                let gl:Graphic = {chart.create-legend}
                let vb:HBox = {HBox
                                        background = “white”,
                                        vorigin = “center”,
                                        valign =  “center”,
                                        {VBox
                                            horigin = “center”,
                                            gl
                                        }
                                    }
                {pie-set.add
                    vb
                }
            }
        }
    }
}

{VBox
    {RecordGrid
        height = 4cm,
        width = 10cm,
        record-source = records
    },
    {VBox
        border-color = “black”,
        border-width = 3pt,
        chart
    }
}

 

become-activeとrequest-key-focusの違いについて

【ご質問】
特定処理後に、あるコントロール(CommandButtonやTextFieldなど)にフォーカスを
割り当てたいと考えています。
メソッド become-active と request-key-focus いずれを使用しても
正常にフォーカス割り当ては出来たのですが、この2つのメソッドにはどのような違いがあるのでしょうか。

【回答】
request-key-focusはVisualクラスとそのサブクラスで使用出来るメソッドです。
become-activeはVisualのサブクラスであるActiveTraversorで使用出来るメソッドになります。
したがいまして request-key-focus のみ使用可能なオブジェクトが存在します。
(例.Shapeではrequest-key-focusは使用出来ますが、become-activeは使用出来ません。)

ActiveTraversorのサブクラスであるControlは一般的に複数のオブジェクトを組み合わせて
構成されており、become-active はどのオブジェクトにキーボードフォーカスを持たせれば
良いかの制御を行いますが、request-key-focusはそのような制御は行いません。

また request-key-focus を使用した場合はアクティブになった時にキーフォーカス要求を自動で行います。

上記のような理由からAPIリファレンス上では、両方使用可能なオブジェクトにおいては
become-active を呼び出すように記載されています。

アプレット内に別アプレットを表示することは出来るか

【ご質問】
あるアプレット内に別のアプレットを表示することは出来ますか。

【回答】
AppletData・AppletGraphicを使用することで実現可能です。

呼び出す側のアプレット(以下「親アプレット」と呼びます)に
呼び出される側のアプレット(以下「子アプレット」と呼びます)を表示するための
グラフィックとしてAppletGraphicを定義したうえで、
AppletDataをAppletGraphicと組み合わせて定義することで
親アプレット内に子アプレットを表示することが出来ます。

またバージョン6以降であれば、以下のような親アプレットと子アプレット間の
交信を行うことが出来ます。
・子アプレットに定義したメソッドを親アプレットから実行(applet-invoke-async)
・親アプレットに定義されたプロシージャを子アプレットから呼び出す(parent-invoke-async)

詳細は、Curl開発者ガイドの
[外部リソースとの対話]-[子アプレットとJavaScriptサポート]の項と
APIリファレンス内の各APIの項をご参照ください。 

AppletDataに関するサンプルを用意しました。
また、Curl開発者ガイドにもサンプルが用意されていますのでご参照下さい。

タッチデバイス上でタッチ操作を行った際にイベントを発生させることは出来るか

【ご質問】
タッチデバイス上でCurl8を使用しています。
タッチ操作を行った際に、イベントを発生させることは可能でしょうか。
例.Frame上をタッチするとポップアップメッセージを表示させる。

【回答】
GestureTouch発生時のイベント制御を行うことで実現するのはいかがでしょうか。
GestureTouchを発生させるためにはTouchInputModeを”bundled”に
設定する必要があることに注意して下さい。

下記サンプルコードを参考にして下さい。

{curl 8.0 applet}

{Frame
    background = “yellow”,
    border-width = 18pt,
    {Frame
        width = 4in,
        height = 72pt,
        border-width = 1pt,
        border-color = “black”,
        opaque-to-events? = true,
        {on e:AttachEvent at f:Frame do
            {{f.get-view}.set-touch-input-mode “bundled”}
        },
        {on GestureTouch at f:Frame do
            {popup-message “GestureTouch Fired!!”}
        }
    }
}

またTouchInputModeを”bundled”に設定するとPointerPress・PointerReleaseも
タッチ操作を行った際に発生するようになります。
これらPointer系イベントで制御を行う方法もあります。

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

Curl標準の右クリックメニューの表示方法

【ご質問】
コンテナ上で特定操作を行った際に、TextFieldで右クリックした際に
表示される右クリックメニューを表示することは可能でしょうか。
例.Frame上をクリックしたらTextField用の右クリックメニューが表示されるような実装

【回答】
Curl標準の右クリックメニューの表示は以下の標準APIを使用することで実現可能です。
 default-context-menu-for-text-field-proc
 default-context-menu-for-view-proc

使用方法に関しては以下のサンプルを参考にして下さい。

{curl 8.0 applet}

{let v1:#View}
{let v2:#View}
{let fr1:Frame = {Frame
                   height = 5cm,
                   width = 5cm,
                   background = “yellow”,
                    {on e:AttachEvent at fr:Frame do
                        set v1 = {fr.get-view}
                    },
                    {on e:PointerRelease at fr:Frame do
                        let bmp:BaseMenuPane =
                            {View.default-context-menu-for-text-field-proc v1 asa View}
                        {bmp.popup fr, e.x, e.y}
                    }
                }
}
{let fr2:Frame = {Frame
                   height = 5cm,
                   width = 5cm,
                   background = “green”,
                    {on e:AttachEvent at fr:Frame do
                        set v2 = {fr.get-view}
                    },
                    {on e:PointerRelease at fr:Frame do
                        let bmp:BaseMenuPane =
                            {View.default-context-menu-for-view-proc v2 asa View}
                        {bmp.popup fr, e.x, e.y}
                    }
                }
}
{VBox
    fr1,
    fr2

キャッシュデータの保存先に関して

【ご質問】
Curlのキャッシュはどこに保存されるのでしょうか。
また保存先の変更は可能でしょうか。

【回答】
Curlのパッケージキャッシュの保存先は以下の通りです。
(Curlコントロールパネル「全般」タブ内の「キャッシュ設定」ボタンを
押すと表示されるダイアログ上で確認可能です。)

WindowsXPの場合:
%USER_HOME%\Application Data\Local\Curl Corporation\Surge\package-cache
(通常 %USER_HOME% は C:\Document and Settings\[ユーザー名] になります。)

WindowsVista以降の場合:
%USER_HOME%\AppData\Local\Curl Corporation\Surge\package-cache
(通常 %USER_HOME% は C:\Users\[ユーザー名] になります。)

上記保存先は固定されており変更を行うことは出来ません。

例えばログオフ時に
%USER_HOME%\AppData\Local
配下を削除するような運用環境においてはキャッシュ機能を活用することは
出来ないことをご了承下さいますようお願いします。

Curlのインストール先に関して

【ご質問】
Curlのインストールを行う際、インストール先は通常
C:\Program Files\Curl Corporation
になると思いますが、インストール先を別の場所に変更することは出来ますか。
また別のドライブにインストールを行うことは出来ますか。

【回答】
インストールを行う際にインストール先の変更を行うことで
インストール先の変更は可能です。
(Cドライブ以外へのインストールも可能です。)

ただしインストール先の変更を行うことが出来るのは、
Curlの初回インストール時のみであることにご注意下さい。

Curlが既にインストールされている環境にインストールをする場合は
インストール先の変更は出来ません。
インストール済みのCurlを全てアンインストールした後、
再度インストールを行うことでインストール先の変更を行うことが出来ます。

GestureTouchが発生しません

【ご質問】
WindowsOSにてCurl8をマルチタッチデバイス上で使用しています。
CurlIDEドキュメントに記載されている以下のサンプルを使用して
Gesture系イベントの発生状況を確認しています。

Windows上でサポートされているGestureイベントとして
GestureTap、 GestureMagnify、 GestureRotate、 GestureTouch
が記載されていますが、GestureTouchが発生しません。

GestureTouchはどのような操作をした際に発生するイベントでしょうか。

{curl 8.0 applet}

{Frame
    background = “yellow”,
    border-width = 18pt,
    {Frame
        width = 4in,
        height = 72pt,
        border-width = 1pt,
        border-color = “black”,
        opaque-to-events? = true,
        {on e:GestureBegin at f:Frame do
            {e.continue-implicit-pointer-grab f}
            {f.clear}
            set f.background = “green”
        },
        {on e:GestureEvent at f:Frame do
            {if not (e isa GestureBegin) and not (e isa GestureEnd) then
                {f.add replace? = true, {String e}}
            }
        },
        {on GestureEnd at f:Frame do
            {unset f.background}
        }
    }
}

【回答】
Curlにはタッチ操作に関するモードであるTouchInputModeというものがあります。
このTouchInputModeは初期状態では gesture という値になっております。

TouchInputMode=gestureの際には2本以上の指で行う操作である
GestureTap、 GestureMagnify、 GestureRotateは認識しますが
GestureTouchは認識しません。

TouchInputModeを bundled に変更することで1本指で行う操作である
GestureTouchを認識するようになります。
(ただしGestureTap、 GestureMagnify、 GestureRotateは認識しなくなります。)

上記サンプルの場合は、下記のコードを追記することでGestureTouchを
認識するようになります。
{on e:AttachEvent at f:Frame do
    {{f.get-view}.set-touch-input-mode “bundled”}
}

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

GestureBeginが発生しません

 【ご質問】
Curl8をマルチタッチデバイス上で使用しています。
CurlIDEドキュメントに記載されている以下のサンプルを使用して
デバイス上をタッチしてもGestureBeginが発生しません。

GestureBeginを発生させるためにはなにか条件があるのでしょうか。
またGestureBeginはどのような時に発生するイベントでしょうか。 

{curl 8.0 applet}

{Frame
    background = “yellow”,
    border-width = 18pt,
    {Frame
        width = 4in,
        height = 72pt,
        border-width = 1pt,
        border-color = “black”,
        opaque-to-events? = true,
        {on e:GestureBegin at f:Frame do
            {e.continue-implicit-pointer-grab f}
            {f.clear}
            set f.background = “green”
        },
        {on e:GestureEvent at f:Frame do
            {if not (e isa GestureBegin) and not (e isa GestureEnd) then
                {f.add replace? = true, {String e}}
            }
        },
        {on GestureEnd at f:Frame do
            {unset f.background}
        }
    }
}

【回答】
GestureBegin・GestureEndイベントはCurlにてサポートされているGesture系イベントが
発生した際に、その前後で発生するイベントです。
例.2本指でGestureMagnifyを発生させると、その前後にGestureBegin・GestureEndが
  発生していることが確認出来ます。

GestureBeginイベントはタッチ操作の開始時(タッチデバイス上を触り始めた時)に
発生するものではないことにご注意下さい。

詳細は、Curl開発者ガイドの
[グラフィカル ユーザー インターフェイス]-[ポインタ イベント]内の
[ジェスチャー イベント]項をご参照ください。

CurlでOS・IEバージョンを取得する方法

【ご質問】
Curlを実行しているクライアント端末のOSとIEのバージョンを取得する方法はありますか?

【回答】
Curlの標準APIではOS・IEのバージョンを取得する方法はございません。
Curlアプレットからシェルコマンド、WindowsAPI、ActiveXなどを呼び出して
取得する事は可能です。

一例としてspawn-host-shellプロシージャを利用してOS・IEバージョンを取得する
サンプルを以下に紹介します。
 

{curl 8.0 applet}

{import * from CURL.RUNTIME.HOST-PROCESS}

{CommandButton
    label = “OS Version”,
    {on Action do
        let hp:HostProcess =
            {spawn-host-shell
                read-stdout? = true,
                “ver”
            }
        let tis:TextInputStream = {hp.read-open-stdout}
        let str:StringBuf = {tis.read-one-string}
        {tis.close}
        {if {str.find-string “Windows XP”} != -1 then
            {popup-message “Windows XP”}
         elseif {str.find-string “6.0”} != -1 then
            {popup-message “Windows Vista”}
         elseif {str.find-string “6.1”} != -1 then
            {popup-message “Windows 7”}
         elseif {str.find-string “6.2”} != -1 then
            {popup-message “Windows 8”}
        }
    }
}

{CommandButton
    label = “IE Version”,
    {on Action do
        let hp:HostProcess =
            {spawn-host-shell
                read-stdout? = true,
                “reg query \”HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\” /v Version”
            }
        let tis:TextInputStream = {hp.read-open-stdout}
        let str:StringBuf = {tis.read-one-string}
        {tis.close}
        {popup-message str}
    }
}
 

また以下のページも参考にしてください。
http://developers.curlap.com/faq/48-faq-specification/391-os.html

intの値を文字列に変換するには

◆ご質問◆
 int型の値をString型に変換するにはどうすればいいですか。

◆回答◆
formatを使用する方法とStringを使用する方法があります。
具体的には
{format “%d”, intValue}
{String intValue}
で実現可能です。

また
“” & intValue
でも同じ様に変換可能です。
この表現に関してはAPIリファレンス内の
「CURL.LANGUAGE.STRINGS」→「& プリミティブ」
の項を参照下さい。
(いずれかのオペランドが文字列でない場合、連結する前に
{format “%s”, operand} が呼び出され、出力式が取得されます。)

プログラムでRadioFrameに値を設定してValueChangedイベントを発生させたい

【ご質問】
RadioFrameにValueChangedイベントを追加しました。
しかしプログラムでRadioFrame.valueを設定した場合にイベントが発生しません。
ユーザ操作の場合と同様にイベントを発生させるにはどのようにすればよいでしょうか。

【回答】
RadioFrameのset-value-with-eventsメソッドを使用することで実現可能です。

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

{value
    let rb1:RadioButton = {RadioButton label = “one”, radio-value = 1}
    let rb2:RadioButton = {RadioButton label = “two”, radio-value = 2}
    let rb3:RadioButton = {RadioButton label = “three”, radio-value = 3}
    let rf:RadioFrame =
        {RadioFrame
            {spaced-vbox rb1, rb2, rb3},
            {on ValueChanged at rf:RadioFrame do
                {output “ValueChanged : “& rf.value}
            }           
        }
   
    let b1:CommandButton =
        {CommandButton
            label = “value使用”,
            {on Action do
                set rf.value = 1
            }
        }
    let b2:CommandButton =
        {CommandButton
            label = “set-value-with-events使用”,
            {on Action do
                {rf.set-value-with-events 3}
            }
        }
    {spaced-vbox
        rf,
        b1,
        b2
    }
}