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

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

プロキシキャッシュの制御について

◆ご質問◆
 最新版同期がうまくいかない原因が、
 Proxyサーバーによるキャッシュが原因だったとした場合、
 Proxyサーバー側で 拡張子.curl や.mcurlに対する振る舞いを変更しないと
 いけないのでしょうか?
 

◆回答◆
Webサーバのレスポンスを返す設定の中で「Cache-Control」ヘッダーを適切に設定して
頂くことが対策として考えられます。
この設定を行うことで途中の経路上でむやみにキャッシュに記録され、再利用さ
れないようになります。

なお、「Cache-Control」とはCurlの設定ではありません。

Cache-Controlとは、
————————————————————————
HTTPが規定するヘッダーの一つで,
キャッシュ・サーバーの動作を指定する。
キャッシュ・サーバーが読み取り,指示された動作を実行する。
no-cache(キャッシュ禁止)やmax-age(最大有効期限)などの
サブ命令を数多く持つ。
————————————————————————

Curlだけの設定ではプロキシサーバのキャッシュ機能をコントロールすることは不可能であり、
HTTPのレスポンスヘッダーの中でCache-Controlを設定することで
プロキシサーバのキャッシュ機能を「キャッシュ禁止」や、「有効期限の設定」を
行ったりすることが可能となります。
HTTPのレスポンスヘッダーの中にCache-Controlを設定するには
Webサーバの設定を変更等をして頂く必要があります。

 

Tiffファイル保存

◆ご質問◆
CurlでTiffファイル生成する際に”解像度に関する情報”を書き込むことは可能でしょうか。

◆回答◆
CurlからTiffファイルを生成する際に解像度に関する情報を書き込むことは出来ません。
また、Curlからこれらの情報を自動的に取得することもできません。

これらは仕様となっております。

create-Fileプロシージャ使用時のException

◆ご質問◆
「隠しファイル」属性のローカルファイルに対してcreate-File プロシージャを実行すると “PermissionDeniedFileException”が発生する。

◆回答◆
現在のCurlの仕様では
隠しファイル属性を持ったファイルに対して”create-Fileプロシージャ”を使用してファイルを作成した場合、
上記のExceptionが発生し新規にファイルを生成することは出来ません。

お手数をお掛け致しますが、何卒御理解頂けます様御願い致します。

 

RecordGrid内の1行の高さについて

【ご質問】
RecordGridのCellに長い文字列を設定した場合、自動的に折り返して
複数行の表示にしたいのですが、各行のセルの高さがGridの表示領域を超えると
Cellの高さが自動調節され文字が切れてしまいます。

文字を切れずに表示させることは可能でしょうか。

【回答】
RecordGrid内の行の高さはRecordGrid内部で決定しているため、
オプションやメソッドを使用して改変することはできませんが、
オープンコントロールを使用してRecordGrid内部の処理を改変することで
現象を回避することは可能です。

詳細はSampleをご参照ください。

改変箇所につきましてはキーワード(@START)で検索を行ってください。
 ・skinnable-record-grid-ui.scurl

※オープンコントロールは標準コントロール部品全体を複製しているため、
  ソースのコンパイル等に時間を要し、
  全体の処理速度が遅くなる可能性がありますので、
  使用する際はお気をつけください。

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

RecordGridの縦罫線の色指定

【ご質問】
RecordGrid で縦の罫線を列ごとに制御したいのですが、カスタムセルにボーダーを設定しても、
セルの罫線はグリッドの罫線をまたがない為点線のように見えてしまいます。
実現する方法はあるのでしょうか。

【回答】
RecordGridの罫線の色はRecordGrid内部で決定しており、
通常のオプションやメソッドにて改編することはできません。
オープンコントロールを使用することで、今回の現象を回避することが可能です。

詳細はSampleファイルをご参照ください。

改編箇所につきましてはキーワード(@START)で検索を行ってください。
 <改編ファイル>
 ・skinnable-record-grid-ui.scurl

※オープンコントロールは標準コントロール部品全体を複製しているため、
  ソースのコンパイル等に時間を要し、
  全体の処理速度が遅くなる可能性がありますので、
  使用する際はお気をつけください。

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

エラーメッセージ:「Failure loading “URL”」

◆ご質問◆
Curl起動ファイル実行時に「Failure loading “URL”」というメッセージが出力する。
原因はどのようなことが考えられるでしょうか。

◆回答◆
「Failure loading “URL”」のエラーが発生するのは”URL”で示されたCurlの起動ファイルが
何らかの理由で取得できなかった際に発生します。

<考えられる原因例>
 ・ネットワークの切断
   →画面遷移の途中で何らかの理由によりネットワークが切断され、ファイルが参照できなくなった。
 ・サーバとの接続が切断
   →何らかの理由によりサーバに接続できなくなり、ファイルを参照できなくなった。
 ・ファイルの削除、リネーム
   →ブラウザよりファイルを起動した後、何らかの理由によりファイルを削除もしくはリネームをした。

さらに、根本的な原因の究明には以下の状況を確認する必要があります。
 ・なぜCurlの起動ファイルが取得できないのか
 ・どのようなレスポンスがサーバから返却されているのか
 ・そもそも、リクエストがサーバに送信されているのか
  (どのようなリクエストがサーバに送信されているのか)

バーコードフォントについて

【ご質問】
バーコードを利用したいのですが、Curlではどのように行えばよいのでしょうか。

【回答】
Curlは基本的に端末にインストールされているフォントを使用することができます。
このインストールされているフォントにバーコードを表示するフォントが存在し、
そのフォントをCurlのfont-familyオプションで指定することでバーコードを表示することができます。

※Curl独自でバーコードをレンダリングして表示しているわけではありません。

{text
    font-size = 50pt,
    font-family = “バーコードが表示できるフォント名”,
    1234567890
}

表示幅より長い単語の改行

【ご質問】
TextFlowBoxで表示する単語(半角文字列)が表示幅より長い場合、
改行して表示することは可能でしょうか。

【回答】
TextFlowBoxはデフォルトで改行を行います。
ただし半角文字列の場合、文字列の途中で改行をすることはできません。
つまり長い単語(aaaaaa…など)は改行されずに表示されます。

しかし、allowing-breaks-in-wordsを使用することで、単語の途中で改行をすることが可能です。

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

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

{let text:TextFlowBox = {TextFlowBox.allowing-breaks-in-words
                                      “aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee”
                                  }
}
{VBox
    width=6cm,
    background=“aqua”,
    text
}

また、APIリファレンスの
[CURL.GUI.BASE]-[TextFlowBox]
の項内のコンストラクタ[allowing-breaks-in-words]
の項をご参照ください。 

ListBoxのラベル名取得

【ご質問】
ListBoxで値とラベル名が別の内容で設定されていた場合、
選択された行の値(value)ではなく、ラベル名(label)を取得することは可能か。

【回答】
{ListValueItem.label.get-text}でラベル名を取得することが可能です。

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

{curl 6.0,7.0,8.0 applet}

{VBox
    {italic Select at most one of the following pets:},
    {ListBox
        selection-policy = “single”,
        height = 1.0in,
        “Aardvark”, “Cat”, “Dog”, “Elephant”, “Gnu”, “Zebra”,
        {ListValueItem
            “This is value.”,
            label = “This is label.”
        },
        {on ValueFinished at lb:ListBox do
            {for x:any in lb.selected-items do
                {dump x}
                {popup-message {x.label.get-text}}
            }
            {for y:any in lb.value do
                {dump y}
            }
        }
    }
}

また以下のFAQをご参照ください。
http://developers.curlap.com/faq/48-faq-specification/627-listboxlabel.html

レコード追加時の初期値設定

【ご質問】
レコードグリッドでレコードを追加した際に列単位に初期値を設定することは可能でしょうか。

【回答】
default-valueを指定することで、レコード追加時の初期値を設定することが可能です。

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

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

{let rs:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField
                “名前”, domain = String
            },
            {RecordField
                “数値”, domain = int, default-value = 10
            }
        },
        {RecordData 名前 = “John”, 数値 = 1},
        {RecordData 名前 = “Jane”, 数値 = 2},
        {RecordData 名前 = “Jane”, 数値 = 3}
    }
}
{let rg:RecordGrid =
    {RecordGrid
        height = 10cm, width = 10cm, record-source = rs
    }
}
{value
    {VBox
        rg,
        {CommandButton
            label = “append record”,
            {on Action do
                {rs.append {RecordData}}
            }
        }
    }
}

WEBカメラの制御

◆ご質問◆
 CurlにてWebカメラを制御する方法する方法はありますでしょうか?

◆回答◆
残念ながらCurlの標準APIにWebカメラを制御する
ようなAPIは存在いたしません。

しかし、その利用しようとするWebカメラを制御するための
外部ライブラリ(DLL)が存在するのであれば、そのDLLインターフェースを
利用してCurlから制御することも可能かと思われます。

Curlアプリケーション⇔DLL⇔Webカメラ
のようにDLLを経由してWebカメラを制御します。

外部ライブラリの詳細については以下のヘルプをご参照ください。
「Curl開発者ガイド」→「基本概念-ライブラリ」→「外部ライブラリ」

 ※あくまでも論理上な回答であり、
 ウェブカメラ接続テストやその実績があるわけではございません。

 

コンテキストメニューの非表示

【ご質問】
画面上で「Ctrl+右クリック」を行うとコンテキストメニューが表示されますが、
コンテキストメニューを非表示にすることは可能でしょうか?

【回答】
{disable-inspection-gesture}プロシージャを使うことで非表示にすることが可能です。

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

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

{import * from CURL.GUI.CONTROL-BASE}

{value
    {disable-inspection-gesture}
    let cb1:CheckButton = {CheckButton
                                        label = “Ctrl+右クリック無効”,
                                       {on ValueChanged at cb:CheckButton do
                                           {if cb.value == true then
                                               {set cb.label = “Ctrl+右クリック有効”}
                                               {enable-inspection-gesture}
                                           else
                                               {set cb.label = “Ctrl+右クリック無効”}
                                               {disable-inspection-gesture}
                                           }
                                       }
                                   }
   
    let tf1:TextField = {TextField
                                 value = “This is a pen.”
                              }

    let people:RecordSet =
        {RecordSet
            {RecordFields
                {RecordField “First”, domain = String},
                {RecordField “Age”, domain = int}
            },
            {RecordData First = “John”, Age = 25},
            {RecordData First = “Jane”, Age = 28}
        }
    let rg2:RecordGrid = {RecordGrid
                                     record-source = people
                                  }
    let vbox:VBox = {spaced-vbox
                                cb1,
                                tf1,
                                rg2
                            }
   
    let v:View =
        {View    
            width = 350pt,
            height = 350pt,
            valign = “center”,
            halign = “center”,
            title = “sample”,
            vbox      
        }

    {v.show}
}

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

バージョンアップに伴うソースの変更

◆ご質問◆
バージョンアップを行いたいが、自動変換ツールの様なものはあるのでしょうか?

◆回答◆
保証されたソースコードを生成するようなツールはございません。

しかし、使用するAPIのバージョン、ソースコード内のヘラルドであれば、IDEにて一括で変更することが可能です。
 「プロジェクト-APIバージョンの変更」

特定コントロールをTab遷移対象外にする方法

【ご質問】
特定のコントロールをTAB(Shift+TAB)の遷移対象外とすることは可能でしょうか。

【回答】
非ローカルオプションである”active-traversal-container”にnullを設定することで実現可能です。

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

{curl 6.0,7.0,8.0 applet}

{let
    text1:TextField = {TextField},
    text2:TextField = {TextField
                                 active-traversal-container = null
                             },
    text3:TextField = {TextField}
}

{VBox
    text1,
    text2,
    text3
}

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

Curlコンテンツのダイナミック生成

【ご質問】
ASPやJSPなどのサーバスクリプトを使用し、Curlコンテンツのダイナミックな生成が可能ですが、
生成可能なCurlコンテンツは*.curl形式のコンテンツのみでしょうか。

【回答】
サーバスクリプトを使用して*.dcurl形式(独立型アプレット)をダイナミックに生成することも可能です。

パーシスタントキャッシュファイルが最大値に到達した場合

【ご質問】
キャッシュの容量が最大値を超えた場合、LRU方式で削除されるのでしょうか。
また、どのタイミングで削除されるのでしょうか。

【回答】
使用されてから一番長い時間がたっているキャッシュから削除されていきます。
つまりLRU(Least Recently Used)方式で削除されます。

削除が実行されるタイミングとしては、新しくパッケージキャッシュが作成されるタイミングで
削除するかどうかの処理が実行されます。
また、Curlコントロールパネルでキャッシュの最大サイズを設定した時も実行されます。

パッケージキャッシュについて

【ご質問】
 RTEコントロールパネルで、「(推奨)パーシステントパッケージキャッシュを有効にする」をチェックしています。
 また、「全てのアプレットの再同期を強制する」を選択しています。
 アプレットが変更された後、突然エラーになるPCがあります。
 「キャッシュを空にする」ボタンを押して再操作すると正常に動作します。
 どういった原因が考えられるでしょうか?

【回答】
このエラーは、キャッシュされたアプレットの構成ファイル(パッケージ)の
整合性が取れていないことが原因だと考えられます。

既にキャッシュとしてパッケージファイルが存在している状態で、
ファイルの修正およびデプロイを行うと修正されたパッケージファイルがキャッシュとして保存されます。
しかし、何らかの理由により”一部の”パッケージファイルは更新されず、
以前のパッケージがそのまま残ってしまった(つまりパッケージファイルの整合性が取れていない)場合、
追加・修正した内容が認識されません。
パッケージファイルの整合性が取れていない状況下で、
今回修正した処理を別パッケージから呼び出そうとした場合、
エラーの発生や追加・修正を行った処理内容が反映されない等の問題が生じます。
このような問題は、キャッシュをクリアすることにより、新旧パッケージが
削除され、再度パッケージを取得しなおすことになり、
パッケージ間で整合性が取れるようになります。
よって今回の現象が解消されることになります。

また、このような再デプロイ時の問題を解消する為には
resync-as-of 又はresync-file をご使用ください。
こちらを使用することで、強制的にパッケージキャッシュの同期を取ることができます。

詳細は、Curl開発者ガイドの
[コンテンツの構成要素]-[キャッシュと同期]
の項をご参照ください。

Proxyキャッシュの制御について

 ◆ご質問◆
 アプリケーションサーバ側のCurlアプリケーションをアップデートした際、
 Proxyサーバ上のキャッシュを無視し、
 必ずアプリケーションサーバからモジュールを取得するようにできますでしょうか?

 ◆回答◆
 生憎、Curlだけで制御することは困難でございます。

 Curlの通信のメカニズムは、
 Curl独自のものを使っているわけではなく、
 Win32 インターネット拡張機能(WinInet)を用いております。(Windowsの場合)
 
 そのため、
 クライアントサイドの設定を用いることができます。
 例えば、
  インターネットプロパティにてプロキシを使わない 設定をすることや
  PACファイルと呼ばれるブラウザのプロキシ設定を制御できる仕組み
 を用いることができます。

 また、サーバサイドにて、Cache-Controlを用いるなどして
 制御することも一案です。
 
 

プリンタの制御について

【ご質問】
Curlからの印刷時に、プリンターのデバイス制御はどの程度まで可能でしょうか?
例えば、数種類の帳票があり、それぞれの帳票で使用するトレイをプログラムから
指定して印刷することは可能でしょうか。

【回答】
Curlからは「print-graphic」プロシージャに渡せるオプションについてのみ制御できます。
「用紙サイズの指定」や「使用するプリンタの指定」などは制御出来ますが、
「使用するトレイの指定」は行うことは出来ません。

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

※上記記載内容はCurlバージョン7時点でのものです。
バージョン8からは印刷トレイを指定するためのオプション media-source が追加されています。
バージョン8での印刷機能強化
に関しては、以下のページをご参照ください。
http://developers.curlap.com/re-reference/56-print/744-print-graphic.html