5

Delphi 2007 で書かれたかなり大きな (フリーウェア) プロジェクトがTntUnicodeControlsあり、TntLXControlsライブラリとライブラリの両方を使用しており、Delphi 2009 に移行する予定です。

残念ながら、私はプロジェクトのいたるところでこれらのライブラリを使用しています:

  • Unicode 機能を提供する VCL コントロールの置き換え
  • Win32 API ラッパー (主に文字列の比較用)
  • TntLXFormsTntLXRegistry、 ...の機能強化
  • を使用するサードパーティ コンポーネントTntControls。(VirtualTrees、SpTBXLib、D2009 のアップデートが利用可能)

このようなプロジェクトを Delphi 2009 に移植した経験や提案はありますか。最初に (商用の) TMSUnicode コントロールに切り替えることをお勧めしますか?

4

4 に答える 4

5

GExperts をインストールします。TTntXXX を TXXXX コントロールに変換するのに役立つ "Replace component" IDE アドインがあります。一度試してみて、問題がなければ「プロジェクト内のすべての場所を置き換える」にチェックを入れてください。

SpTbx と VirtualTrees は再コンパイルのみ可能で、どちらも D2009 をサポートしています。

Unicode API を呼び出すためだけに WinAPI ラッパーを使用した場合、それらは D2009 でも動作するはずです。

これにより、TntLX コントロール (TntLXForms、TntLXRegistry など) が残ります。それらはサポートされていないため、とにかく変更する良い機会かもしれません.

于 2008-12-26T10:03:24.983 に答える
4

2007年から2009年にTNTを使用するC++Builderアプリケーションを移植しているので、これのいくつかを手伝うことができます。D2009でのUnicodeへの切り替えは遅れており、歓迎されています。ただし、過去にUnicodeを必要としなかった人にとっては、移行がおそらく簡単であり、おそらくまだ必要ないのは残念です。私のように、Unicodeが必要で、それを提供するためにTroy Wolbrinkの優れたTNTコントロールを使用した場合、かなり複雑な仕事があります...

幸いなことに、D2009をサポートするTMSソフトウェアのTNTControlsの新しいバージョンがあります。私はこれを見ていませんが、移植性を容易にするために、ネイティブVCLコンポーネント上の単なる「ファサード」レイヤーであると期待しています。他のライブラリを再構築して使用できるかどうかを検討します。

ただし、ネイティブVCLコントロールに戻る方がよい場合があります。その理由は、文字列タイプです。TNTコントロールは常にWideStringを使用してUnicode文字列をやり取りしてきましたが、WideStringを独自のコードに分散させて使用することもできます。これは機能しますが、WideStringはCOM BSTRタイプを「ラップ」するため、実際にはCOM相互運用機能にのみ使用する必要があるため理想的ではありません。D2009のネイティブUnicode文字列は参照カウントされており、大幅に高速化されているはずです。

TNTコンポーネントをネイティブVCLコンポーネントに置き換えることにした場合は、GExpertsの[コンポーネントの置き換え]コマンドを使用できます。または、.DFMファイルと.PASファイル(テキスト形式でありますが、 TTNTをTに置き換えてください。

于 2008-12-26T10:04:31.987 に答える
3

次のリソースをお勧めします。

MarcoCantuのDelphi2009ハンドブック第3章(Unicodeへの移植) http://www.marcocantu.com/dh2009/

Nick Hodgesの記事(Unicodeの世界でのDelphi) http://blogs.codegear.com/nickhodges/2008/11/20/39149

于 2008-12-26T13:02:02.140 に答える
1

いずれにせよ大変な作業になると思います。以前にユニコード互換にするためにすべての作業を行っていなかった場合よりも、おそらくそうです。個人的には、tms Unicode コントロールのことは忘れて、vcl に戻ります。将来的にはより多くの痛みを軽減します。(これらのコントロールに反するものは何もありません。念のため。)

また、D2009 の文字列は、アプリで間違いなく使用した D2007 の Widestring と同じではないことに注意してください。そのため、文字列 (AnsiString) から熱心に変更した Widestring のすべてのインスタンスを、文字列 (現在は unicodestring) に戻す必要があります。

于 2008-12-26T09:54:36.217 に答える