3

コードを XE2 から Delphi XE3 に移動していますが、両方でコンパイルする必要があります。一部のユニットでは、'System.Actions' が自動的に USES 句に追加されることに気付きました。これにより、XE2 に戻るときに次のエラーが発生します。

F1026 ファイルが見つかりません: 'System.Actions.dcu' (ユニット スコープ "System" は Win64、OSX32、Win32 のみを示します)

ユニットスコープを正しく理解したことがありません。コンパイラ バージョン {$IFDEF} 内に何かをラップするのではなく、これを解決する正しい解決策はありますか?

ありがとう

4

3 に答える 3

10

Remy の言ったことはかなり正しいですが、XE2 と XE3 の両方でコードを動作させる簡単な方法があるかもしれません。ユニット エイリアスを からSystem.Actionsに追加するだけVcl.ActnListです。

Delphi コンパイラページのプロジェクト オプションにこれを追加します。以下を追加する必要があります。

System.Actions=Vcl.ActnList

同じ .dproj ファイルを使用して XE2 と XE3 の両方でコンパイルする必要がある場合は、運が悪いことに注意してください。そのユニット エイリアス設定は、XE3 でのプログラムのコンパイルを停止します。ただし、XE2 と XE3 に異なる .dproj ファイルがある場合は、両方で同じソースを使用できます。または、コマンド ラインで XE2 用にコンパイルするだけでよい場合は、このユニット エイリアスをそこに追加できます。これが役に立つかどうかはわかりませんが、ユニット エイリアス機能が過去に何度か同じような状況から抜け出すのに役立ったことは知っています。

于 2012-10-25T13:51:53.720 に答える
10

ActionsXE2にはユニットがありません。これは XE3 の新機能で、アクションのサポートを FireMonkey に導入するためのリファクタリング作業の一環として行われました。これは文書化されています:

Delphi および C++Builder XE3 の新機能:

アクション: FireMonkey は、以前は VCL でのみサポートされていた 2 つの機能である、アクションとアクション リストをサポートするようになりました。

重要: アクションを使用するすべての FireMonkey または VCL アプリケーションでは、uses セクションで System.Actions および System.Classes ユニットを指定する必要があります。

VCL アクションの実装の変更

System.Actions ユニットは RTL パッケージで作成されます。フレームワークに依存しないアクション機能を提供する Vcl.ActnList ユニットのクラスは、このユニットに移動されます。System.Actions のクラスは、TBasicAction および TBasicActionLink クラスで導入されたアクション機能の最も基本的な動作を拡張します。

重要: これらの変更の結果として、System.Classes および System.Actions ユニットを uses セクションに追加する必要があります。

FireMonkey および VCL でのアクションの実装

ファイアモンキー (FMX)

フレームワークに依存しない実装は、FireMonkey と VCL に共通です。この基本的なアクション機能は、新しい System.Actions RTL ユニットで拡張されています。

VCL

以前の RAD Studio リリースで Vcl.ActnList ユニットに実装されていた、フレームワークに依存しないアクション機能は、RTL の新しい System.Actions ユニットに含まれるようになりました (VCL と FireMonkey に共通)。

重要: これらの変更の結果として、アクションを使用する VCL アプリケーションの uses セクション (または #include) に System.Actions ユニットを追加する必要があります。

Actions実際にコードでアクションを使用していない場合はへの参照を削除するか、それ以外の場合は削除する必要があります{$IFDEF}

于 2012-10-25T09:13:25.780 に答える