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

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

CurlでAudio再生

【ご質問】
CurlでWAVファイルの再生をし、再生速度の変更ができますか?

【回答】
Curl開発者ガイド[サウンド]の項にも記載がありますが Curlでは
 ・パン(左右の調整:AudioBuffer.pan)、
 ・ボリューム(大小の調整:AudioBuffer.svolume)、
 ・周波数(AudioBuffer.sample-rate)
を操作することが可能です。

周波数を操作することで再生速度を変更可能です。
ただし、音程も同時に変化します。

会議中の会話を録音したWAVファイルを再生するような場合であれば
音程が変化しても許容範囲かとは存じますが 用途によりますので
予めご了承頂きますようお願い致します。

イメージの保存方法

【ご質問】
Curlで画面上に表示した特定の部品をJPEGにして保存する方法を教えてください。

【回答】
以下の手順にて作成することが可能です。

①GraphicオブジェクトをGraphic-to-PixmapプロシジャにてPixmapに変換し
②変換されたPixmapをImageData.save-to-urlにて画像保存することが可能です。

Ver.8ではPDFファイルの生成も可能でございます。(print-graphic-pdf)
こちらですと、Graphicオブジェクトを直接PDFファイルに保存できますので
実装が簡単かと思います。 併せてご検討頂ければと思います。

 

{curl 8.0 applet}

||グラフィックオブジェクト
{let g:VBox = {VBox
                  width  = 5cm ,
                  height = 5cm,
                  background = “blue”
              }
}

||グラフィックオブジェクトの表示
{value
    {VBox
        g,
        {HBox
            {CommandButton
                label = “JPEG”,
                {on Action do
                    let image-data:ImageData = {ImageData}
                   
                    ||グラフィックオブジェクトをPixmapに変換する
                    def pixmap = {Graphic-to-Pixmap g}
                   
                    ||ImageDataクラスにPixmapを設定する。
                    set image-data.pixmaps = {new {Array-of Pixmap},pixmap}

                    ||画像ファイルに変換する。
                    {image-data.save-to-url {url “./sample.jpeg”} , “image/jpeg”}  
                }
            },
            {CommandButton
                label = “PDF”,
                {on Action do
                    {print-graphic-pdf g,{url “./sample.pdf”}}
                }
            }
        }
    }
}

スクロールバーを太くしたい

【ご質問】
TextArea、DropdownList、ComboBox、RecordGridなど
動的にスクロールバーが表示される部品のスクロールバーの太さをに変更する方法を教えてください。

【回答】
これらの部品には、内蔵するスクロールバーの太さを調節するオプションが公開されておりません。
そのため他の属性のようには簡単に変更ができませんが、サブクラス化することにより可能となります。

サブクラスから部品内部のグラフィック階層を辿り、
対象となるスクロールバーを取得して
thicknessオプションから太さを設定できます。
サンプル

なお、バージョンの変更等によりこのグラフィック階層に変更がありますと、
エラーが発生するなど意図した通りに動作しなくなる可能性がございますのでご注意ください。

 

右クリックメニューのカスタマイズ

◆ご質問◆
右クリックメニューをカスタマイズしたいのですが可能でしょうか?

◆回答◆
Curlには、メニューに関するAPIが用意されており、こちらを利用することでメニューを作成することが可能です。
 Curl開発者ガイド-[グラフィカルユーザインターフェース]-[メニュー]

TextFieldやRecordGridのメニューをカスタマイズしたサンプルを添付します。

サンプルファイル

 

CDEにてCurlのライブラリ(ドキュメント)をインストールする方法

◆ご質問◆
CDEにてCurlのライブラリ(ドキュメント)をインストールする方法を教えてください。

Curl IDEの場合は、CurlIDEにて、
[メニュー]-[ヘルプ]-[ライブラリのインストール]より行っていました。

 

◆回答◆
[Eclipseメニュー]-[Window]-[Preferences]-[Curl]-[インストール済みのライブラリ]より、
[インストールボタン]より、該当のマニフェストファイルを選択してください。

CDE-lib-install.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Curlドキュメント・ビューワにインストールされます。

 

起動が遅い

【ご質問】

 起動が遅く、キャッシュファイル作成の処理に時間がかかっているようです。

【回答】

 クライアントのウイルスチェックソフトにより、
  OCURLファイルのチェックが異常に負荷がかかり、
  ウイルスチェックソフトに 記録があった事例があります。

キャッシュが毎回作成される

【ご質問】

 起動速度が遅く、調べてみると パッケージキャッシュが毎回作成されているようです。

【回答】

 ロードバランサの先に複数台のAPサーバが存在する状態で、
  Curlモジュールのタイムスタンプがずれている場合、
  アプレット起動時に接続先APサーバが変わると、
  キャッシュ再作成が発生するなどの事例があります。

手動アンインストール(WindowsXP)

手動アンインストールの方法(WindowsXP)

なんらかの理由で手動でアンインストールをせざるを得ない事象が発生した場合の手順を説明します。

手動アンインストール手順

●下記フォルダを削除して下さい。
(インストールドライブとしてはCドライブを想定しています)
 ・C:\Program Files\Curl Corporation フォルダ
 ・%USER_HOME%\Application Data\Curl Corporation フォルダ
 (%USER_HOME%は通常C:\Documents and Settings\[ユーザーID] になります。)
 ・%USER_HOME%\Local Settings\Application Data\Curl Corporation フォルダ
 
●下記レジストリキーを削除して下さい。
 ・マイ コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Curl Corporation
 ・マイ コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\
        Microsoft\Windows\CurrentVersion\Uninstall\Curl RTE X.X.X
  (※「Curl RTE X.X.X」は、インストールされているCurlのバージョンなどによって異なります。)

Curl RTE 手動アンインストール方法(Windows7・8・10)

Curl RTE 手動アンインストールの方法(Windows7・8・10)

なんらかの理由で手動でアンインストールをせざるを得ない事象が発生した場合の手順を説明します。

手動アンインストール手順

●下記フォルダを削除して下さい。
(インストールドライブとしてはCドライブを想定しています)
・C:\Program Files\Curl Corporation フォルダ
・%USER_HOME%\AppData\Local\Curl Corporation フォルダ
(通常はC:\Users\[ユーザーID]\AppData\Local\Curl Corporation)
・%USER_HOME%\AppData\Roaming\Curl Corporation フォルダ
(通常はC:\Users\[ユーザーID]\AppData\Roaming\Curl Corporation)

※64bit Windwos10 については、「Program Files」フォルダを下記のように読み換えてご利用ください。
・32bit: C:\Program Files\
・64bit: C:\Program Files (x86)\

●下記レジストリキーを削除して下さい。
・コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Curl Corporation
・コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\Windows\CurrentVersion\Uninstall\CurlRTE X.X.X
(※「Curl RTE X.X.X」は、インストールされているCurlのバージョンなどによって異なります。)

※64bit Windwos10 については、レジストリキーを下記のように読み換えてご利用ください。
・32bit: \HKEY_LOCAL_MACHINE\SOFTWARE\
・64bit: \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\

通信関連のトラブルシューティング

【ご質問】

パケットキャプチャにてトラブルシューティングするコツを教えてください。

【回答】

 Fiddlerなどのパケットキャプチャツールを用いて通信関連のトラブルシューティングする際に確認するポイントです。

・通信先ホスト名
・リクエストの種類(HEADリクエスト/GETリクエストなど)
・Webサーバが返却するHTTPステータスコード
・パケットの中身
・通信時間

通信内容に不正がある際にツールにてパケットの中身を確認する場合がありますが、
ツールそのものがパケット(通信内容)を画面に表示する際に制御(加工)していることもありますのでご注意ください。

 

小数点の処理について

【ご質問】

 下記式で、少数第3位の四捨五入を正しく行いたいのですが、

 {value {floor 2.445 * 100 + 0.5} / 100}
 2.445 * 100 = 244.49999999999997
 244.5とならず、正しく四捨五入できません。

【回答】

これは2.445を2進数で表現すると
10.011100011110101110000101000111101011 …
となり延々と続いてしまいます。
コンピュータは無限に続くものを処理することは不可能ですので
どこかでこの値を丸め近似値として扱います。
ですので2.445*100が244.5にならず244.49999999999997となります。

これを回避するには
2進表現で循環小数とならないように計算式自体を工夫する必要があります。

例えば
2進表現で循環小数とならないように全て整数で
計算して最後に元の小数になるように処理すればよいかと思います。
{floor 2445 / 10 + (1 / 2)} / 100  のようにするなどです。

CurlRTEインストーラ実行時にプロセスが残る

【ご質問】

Curl RTE のインストールを実施すると、正常に終了するように見えるが、Windowsタスクマネージャには、curl-rte-X.X.X-ja.exeが残ったままになっている。

【回答】

クライアントの監視ソフトの監視対象にCurlが使用するプロセスが含まれており
それが原因でタスクマネージャからsurge-do.exeが消えないことがございます。

期限付きDeploymentライセンス警告に関して

【ご質問】

期限付きDeploymentライセンスのメッセージ出力について教えてください。

 

【回答】

以下のように出力されます。

ライセンス切れの日付が30日を切ると
「このアプレットのライセンスは、数週間で有効期限が切れます。」

20日を切ると
「このアプレットのライセンスは、%d 日で有効期限が切れます。」
(%dには切れる日までの日数が入ります)

2日を切ると
「このアプレットのライセンスは、明日有効期限が切れます。」

 

RecordGridのFocusOutについて

【ご質問】

RecordGridにおいて、FocusOutイベントを拾いたいと考えております。
マウスを使って、Grid外のTextFieldなどに直接フォーカスを移動した場合の制御です。

【回答】

RecordGrid外へのフォーカス移動のタイミングで
セルのフォーカスアウト時の処理をさせることについては、
文字列を表示するセルの場合、cell-specに
StandardStringCellのサブクラスをセットすることで可能です。
StandardStringCellのcreate-editorメソッドをオーバーライドして、
その戻り値となるコントロール(TextField)に
FocusOut時の処理を定義してください。

詳細は添付資料(sample.curl)をご参照ください。
文字列、ドロップダウンリスト、チェックボタンの各セルの背景色が、
フォーカスのIn/Outのタイミングで変化するサンプルです。

http://developers.curlap.com/curl/faq/grid_focus_out_sample.curl

 

create-editorメソッドについては、開発者ガイドの
[StandardBaseEditableStringCell.create-editor]の項をご参照ください。

マウスオーバー時のイベントについて

【ご質問】
ドラッグ&ドロップで、2つのオブジェクト同士を統合させる処理を考えています。
この際、ドラッグ側とドロップ先のオブジェクトの内容を比較して、
(ドロップしてからの判断ではなく)「マウスオーバー中に」ドロップ可否を判断したいです。

【回答】
DragOverクラスのdssフィールドに保存されている
DataTransferSourceSetオブジェクトから
ドラッグ中のオブジェクトを取り出すことができます。

詳細は以下のサンプルをご参照ください。
(ドラッグ中のオブジェクトの属性によって
ドロップが可能かどうかを判断しています。)

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

{let vbox:VBox = {VBox halign = “center”, spacing = 1cm,
                     {HBox spacing = 2cm,
                         {EllipseGraphic
                             width = 10mm, height = 15mm, dragee = {ImageDragee}},
                         {EllipseGraphic
                             width = 20mm, height = 5mm, dragee = {ImageDragee}},
                         {EllipseGraphic
                             width = 20mm, height = 10mm, dragee = {ImageDragee}},
                         {EllipseGraphic
                             width = 15mm, height = 20mm, dragee = {ImageDragee}
                         }
                     },
                     {TextFlowBox   
                         border-width = 2pt,
                         border-color = “black”,
                         margin = 5pt, 
                         height = 5cm,
                         width = 5cm,
                         opaque-to-events? = true,
                         {text font-size = 16pt, 縦に長い図形だけドロップできます},
                        
                         {on e:DragOver do
                             || DataTransferSourceSetを取得
                             {if-non-null dss = e.dss  then
                                 {for i = 0 to dss.for-loop-count – 1 do
                                     || DataTransferSourceを取得
                                     {type-switch {{dss.get i}.get-data}
                                      case obj:EllipseGraphic do
                                         || ドラッグ中のEllipseGraphicオブジェクトにアクセス
                                         {if obj.height > obj.width then
                                             {e.will-accept-drop?
                                                 {proc
                                                     {type:Type,
                                                      x:Distance,
                                                      y:Distance,
                                                      effect:#DragEffect
                                                     }:DragEffect
                                                     {return drag-effect-copy}
                         }}}}}}},
                         {on e:Drop do
                             {e.accept-drop
                                 {proc
                                     {a:any,
                                      x:Distance,
                                      y:Distance,
                                      effect:#DragEffect}:DropResult
                                     {return
                                         {DropResultCopy
                                             action =
                                                 {proc {}:void
                                                     {if a isa EllipseGraphic then
                                                         {if a.height > a.width then
                                                             {popup-message
                                                                 modal? = true,
                                                                 “縦に長いのでdrop可”}
                         }}}}}}}}}
            }
}

{View
    {Frame vbox, width = 8cm, height = 8cm},
    visibility = “normal”,
    {on WindowClose do
        {exit}
    }
}

また、APIリファレンスの
[CURL.GUI.BASE]-[DataTransferSourceSet]
の項をご参照ください。

トレイを利用した印刷

【ご質問】

トレイを指定して印刷することができますか?

 

【回答】

Ver.8では出力するプリンタのトレイを指定することができます。
CurlAppsギャラリーにサンプルデモアプリがありますのでご確認できます。
http://developers.curlap.com/gallery/apps/134
また、Ver.8より印刷関連機能が強化されてますので併せてご確認いただければと思います。

ファイルのダウンロードダイアログについて

【ご質問】

 インターネットエクスプローラーのように、リンクをクリックするとファイルを開くのか、
 保存するのか、キャンセルするのかを表示するダイアログを表示することは可能でしょうか?
 開くを選択すると、WindowsであればOSが拡張子と紐付けているアプリケーションで開かれるといったものです。

【回答】

Curlの標準APIにて、お望みのダイアログを表示させることはできませんが、
HTTPヘッダに”Content-Disposition: attachment; filename=fname.ext”
を含めるとファイルのダウンロードダイアログを開くことが出来ることが判っています。
http://support.microsoft.com/kb/260519/ja

そのため、以下の流れでダイアログを表示させることが可能かと思われます。

① Curl画面にてリンクをクリックする。
② Curlからサーバにリクエスト情報を投げる。
③ サーバから該当ファイルを返却する際に、HTTPヘッダに以下情報を埋め込む。
  “Content-Disposition: attachment; filename=ファイル名”
④ クライアント側にてダイアログが表示される。

 

コンポーネントの登録に失敗します

【ご質問】

Crul8.0のVLEで7.0時代に作成したコンポーネントを登録しようとするとエラーが発生します。


機能拡張ファイル [ファイル名] をロード中にエラーが発生しました。
この機能拡張ファイルは、インストールされたパレット機能拡張のリストに
追加されていませんが、機能拡張ファイルのロードの試行によりエラーが発生する前の
ビジュアル レイアウト エディタ の状態に影響する可能性があります。
ビジュアル レイアウト エディタ の状態がこの方法で影響された場合、
マシンを再起動するか、Curl コントロール パネルを使用して
Curl ランタイムをシャット ダウンするまで、その影響が続く可能性があります。

次のテキストには、発生したエラーについての詳細が示されています。

SyntaxError: [ファイル名]:1[1]: 重複している ‘{curl … manifest}’
ステートメントに互換性がありません。 以前の宣言と一致するバージョンがありません。

【回答】
残念ながら CurlPro/IDE8.0.1000 のパレット拡張機能を用いて
Ver8以外のパレットを拡張することは不可能で御座います。

VLE機能拡張コンポーネントを作成するには作成したい
コンポーネントと同じバージョンのVLE機能拡張エディタを
使用しなければなりません。
Ver8の機能拡張を行う場合は、Ver8のIDE(VLE)をお使い頂き、
Ver8の機能拡張エディタをご使用下さいませ。

御手数ですが、御理解頂けます様御願い致します。

Dialogの大きさ取得

【ご質問】
Dialogの大きさを取得する方法について教えてください。

【回答】
Dialogを表示させた後、Dialogのwidthおよびheightを取得することで可能です。

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

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

{let size:VBox = {VBox}}
{let d:Dialog = {Dialog
                          width = 5cm,
                          height = 5cm,
                          {CommandButton
                              label = “get-size”,
                              {on Action do
                                  {size.clear}
                                  {size.add “幅  : ”&d.width}
                                  {size.add “高さ : ”&d.height}
                              }
                          }
                      }
}

{VBox
    {CommandButton
        label = “show”,
        {on Action do
            {d.show}
        }
    },
    {Fill height = 0.1cm},
    size
}