BLOGS

4D ブログ

warning: file_get_contents(http://www.telize.com/geoip/54.92.201.232) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/www.4d.com/docs/includes/common.inc(1762) : eval()'d code on line 4.
18/04/2016

サミット恒例の質疑応答タイムには,リバルディエール,エノー,マウル,テソンディエ,ソブチャックらの幹部メンバーに対し,テクノロジーや経営戦略に関する質問が出席者から投げかけられ,自由な雰囲気の中でさまざまな意見が交わされました。

 

Read more

01/04/2016

 4月14日(木)はフォーディー・ジャパンの創立記念日のため休業となります。

Read more

25/03/2016

2016年2月25日,15R4のベータ版がパートナー向けに公開されました。この記事では,次期バージョンの注目ポイントを紹介しています。

 

関連記事: 15R4: 最新情報

 

Read more

18/03/2016

フォームオブジェクトの『スタティックテキスト』は,入力エリアのラベルや説明文など,入力不可の標準テキストをレイアウトに表示するために使用されます。"スタティック"という名称が示唆しているように,通常,表示されるテキストは決まっているものなので,デベロッパーはフォームエディター上で直接その内容を入力することでしょう。しかし,実際のところ,スタティックテキストの内容は動的に制御することができ,ある場合には,そうすることが必須かもしれません。

 

スタティックテキストオブジェクトには,標準的なUnicode文字列を自由に表示することができます。しかし,フォームエディターやプロパティリストに直接,入力されたテキストは,非Unicodeの内部エンコーデイングで管理されるため,いわゆるShift_JISに変換できない,サロゲートペア文字や日本語以外のスクリプトは,すべて"?"に変換されて表示されます。そのような文字を表示する必要がある場合には,後述するいずれかの方法を使用し,フォームエディターやプロパティリストに直接テキストを入力することはしないでください。

 

1. XLIFF

スタティックテキストに表示するテキストが決まっており,その内容に拡張文字が含まれる場合には,XLIFF参照を活用するようにしてください。XLIFF参照を使用する場合,テキストの内容は":xliff:resourceName"あるいは":15001,1"のようなコードになります。

 

2. 差し込み

スタティックテキストに表示するテキストには,フィールドや変数の参照を含めることができます。差し込みを挿入するには,"<[myTable]myField>", "<myVar>"のように,変数名などを"<"と">"で括ります。テーブルやフィールドの名称そのものは,"<?1]2>"のようなシンタックスで挿入することができます。

 

3. コマンド

v12以降,スタティックテキストに表示されるテキストは,OBJECT SET TITLEコマンドで書き換えることができます。これには,グループボックスのタイトルも含まれます。コマンドを使用すれば,拡張文字が含まれるテキストも問題なく表示することができます。


15/03/2016

2016年2月25日,15R4のベータ版がパートナー向けに公開されました。この記事では,次期バージョンの注目ポイントを紹介しています。

 

Read more

09/03/2016

4D Packプラグインには,実験的なユーティリティコマンドが収録されています。かつて提供されていたコマンドの中には,後に4Dの正規コマンドに採用されたものもあります。役目を終えた,廃止予定のプラグインコマンドは,道理にかなった期間が過ぎた後,プラグインから取り除かれます。たとえば,v11の時点では,下記のコマンドに対して代替が勧告されていました。

 

 

参考資料: v11変換ガイド

 

Read more

09/03/2016

テキスト入力オブジェクト(変数およびフィールド)には,それぞれ個別に履歴を管理しており,取り消し(Control+Z)やり直し(Control+Shift+Z)操作ができるようになっています。ちなみに,取り消しができる回数には,100回という上限が設定されています(ACI0076904修正メモより)。

 

MODIFY RECORDMODIFY SELECTIONなど,古典的なレコード入力/編集モードでは,標準アクションの『次レコード』『前レコード』などでレコードを切り替えるたびに,フォームがリロードされ,フィールドの編集履歴がリセットされます。レコード番号を超えて『取り消し』『やり直し』をすることはないからです。

 

注記: 14.xの初期リリースでは,レコード番号を超えてControl+Zが効いてしまうという不具合がありました(ACI0092803, ACI0094609)。その問題は,ビルド189393以降で修正されています。

 

現バージョンの4Dでは,DIALOGコマンドで表示した,汎用的な入力画面でも,レコードの編集ができるようになってます。そのような場合,クエリや並び替え,セットや命名セレクションの適用によってカレントレコードがリロードされたとしても,フォームはリロードされるわけではありません。したがって,テキスト入力の編集記録は継続されています

 

注記: v2003以前に作成されたストラクチャーの場合,互換性オプション『ダイアログボックスでフィールドを入力可にする』を有効にすることにより,フィールドが編集できるようになります。

 

テキスト入力の編集履歴は,入力可プロパティや非表示プロパティを再設定することにより,リセットすることができます。たとえば,下記のようなコードを実行することにより,フォーム全体の履歴をリセットすることができます。

 

OBJECT SET ENTERABLE(*;"@";False)
OBJECT SET ENTERABLE(*;"@";True)

フォームオブジェクトは,イベント実行サイクルの終了時にまとめて再描画されるので,上記により,画面がちらついたりすることはありません。

 

まとめ

ダイアログ画面で複数のレコードを連続的に編集するようなアプリケーションでは,プログラミングでテキスト入力の編集履歴をリセットすることができます。古典的なレコード編集画面では,レコードを移動するたびに4Dが自動的にフォームをリロードするので,特別なコーディングは必要ありません。


09/03/2016

USB接続のバーコードリーダーは,安価で設定も簡単であるため,さまざまな用途で活用されています。4Dで構築したPOSシステムの場合,テキスト入力エリアにフォーカスを移動し(GOTO OBJECT),通常のキーボード入力と同じようにバーコードリーダーで読み取った情報を受け取るのが一般的です。USB接続のバーコードリーダーは,大抵,キーボードとして認識されるように作られているからです。 

 

v14以降,一部の機種でバーコード入力の精度に問題のあることが報告されています。すべてのリーダーが問題が発生するわけではありません。同じ問題は,4D以外のアプリケーションでも発生しますが,すべてのアプリケーションで問題が発生するわけでもありません。具体的には,下記の機種と4D v14の組み合わせで読み取り精度の問題(文字の欠落)が報告されています。プラットフォームは,Windows 7およびWindows 10です。

 

 

対照的に,インターネット上のショッピングサイトで購入できる,安価で汎用的な機種は,そのまま快適に使用できた,ということも報告されています。いずれにしても,文字の欠落など,読み取り精度の問題が発生する場合,リーダーの設定で読み取りの間隔(ディレイ時間)を開けることにより,問題を解決することができます。詳しい設定方法は,デバイスの取扱説明書を参照してください。


07/03/2016

On Web Connectionデータベースメソッドの$3, $4引数には,ブラウザおよびサーバーのIPアドレスが従来のような"127.0.0.1"ではなく,"::ffff:127.0.0.1"といった形式でアドレスが返されることがあります。v14/v15のWebサーバーがIPv6に対応しているためです。

 

ハイブリッド・デュアルスタックのIPv6/IPv4では,IPv4射影アドレス (mapped) と呼ばれる特殊な級のアドレスが実装されています。そのようなアドレスは,80ビットの"0"と16ビットの"1"に続き,下記32ビットにIPv4アドレスが含まれています。

 

IPv4射影アドレスは,標準的なIPv6形式の96ビットのプリフィックスに続けて標準的なIPv4形式のアドレス32ビットで表現されるのが一般的です。たとえば,IPv4アドレスの 192.0.2.128 は ::ffff:192.0.2.128 という風に表現されます。データベースメソッド内でIPアドレスをチェックするようなプログラムは,IPv4射影アドレスにも対応できるように記述すると良いでしょう。

 

 


07/03/2016

v15の64ビット版では,コンパイラーが改定され,C_REALのデータ型を処理するためのFPUアセンブリ命令が生成されるようになりました。

 

関連記事実数型の計算

 

v15の64ビット版をコンパイルモードで使用するためには,CPUがSSE4.1命令セットをサポートしていなければなりません。2007年以前の古いCPUでは,SSE4.1命令セットがサポートされていない可能性があります。そのようなマシンでは,実数型の演算でアプリケーションがクラッシュする恐れがあるので注意してください。

 

クラッシュするコードの例:

 

C_REAL($result;$a;$b)
$a:=(Random%(999999-100+1))+100
$b:=(Random%(20-1+1))+1
$result:=$a\$b

 

上記のような実数同士の『整数除算』には,ROUNDSDプロセッサ命令が使用されています。この命令は Intel Penryn (2007/2008年) および AMD Bulldozer (2011年) 以降でサポートされています。

 

2006年のCore Duo "Yonah" CPUは,SSE1およびSSE2のサポートが強化され,SSE3にも対応したモデルですが,SSE4.1命令セットには対応していません。他方,Core 2 Duoは,2006年 "Conroe",2007年 "Allendale",2008年 "Wolfdale" モデルがリリースされており,”Wolfdale" チップセットでは,SSE4.1命令セットがサポートされています。v15の64ビット版をコンパイルモードで動かしたい場合,2010年のIntel Core i3以降が搭載されているマシンを使用するようにしてください。

 

SSE4.1命令セットがサポートされていないCPUの例: 

 

  • AMD Athlon II X2 B24
  • Intel Xeon 5160
  • Intel Core 2 Duo T7250
  • Intel Core 2 Duo E6700 

 

サポートされている命令セットは,CHKCPU32で確認することができます。

 

SSE4.1命令セットがサポートされていないCPUであっても,実数型同士の整数除算をコンパイルモードで実行しなければ,問題ありません。

 

回避策

 

A. 除算演算子とRound関数を併用する

B. 整数型に変換してから整数除算演算子を使用する

 

まとめ

古いCPUが搭載されたマシンでは,v15を64ビット/コンパイルモードで動作させることができないかもしれません。目安として,2010年以降に生産されたCPUであれば,SSE4.1命令セットがサポートされているはずです。