4

重複の可能性:
フォームのデザイン (レイアウト) を偶発的な変更から「ロック」する Delphi オプションはありますか?

最近 StarTeam から SVN に変更しましたが、DFM ファイルに問題があります。実際にフォームを変更していなくても、Delphi が DFM ファイルを変更しているように見えます。

例: 既存のファイルを開き、アクティブなタブシートを変更し、ファイルを保存し、タブシートを元の状態に戻し、再度保存します。2 つのファイルを比較すると、PixelsPerInch、TextHeight、Top、およびその他の多くの値が変更されましたか? 私のコードの小さなサンプル:

   PixelsPerInch = 96
      TextHeight = 13
      inherited PageControl1: TPageControl
        Top = 105
        Height = 629
        Margins.Left = 5
        Margins.Top = 5
        Margins.Right = 5
        Margins.Bottom = 5
        HotTrack = True
        inherited TabSheet1: TTabSheet
          Margins.Left = 5
          Margins.Top = 5
          Margins.Right = 5
          Margins.Bottom = 5

私の質問は次のとおりです。フォームが変更された場合にのみ、Delphi で DFM のみを変更できるようにする方法はありますか? 現在、SVN で常に更新すると競合が発生します。

4

2 に答える 2

8

これは、Delphi のフォーム ストリーミング メカニズムの仕組みの結果にすぎません。

Delphi デザイナでフォームを開くと、.dfm ファイルを使用してフォーム上の各コンポーネントのインスタンスが作成されます。あなたの場合、フォーム デザイナーは .dfm ファイル内の各オブジェクトをインスタンス化します。.dfm ファイルの各プロパティが読み込まれます。

次に、デザイナーでフォームが変更されたことを示す何かを行うと (アクティブなタブシートを変更するなど)、デザイナーは保存時に .dfm ファイルを再作成します。そして、メモリ内コンポーネントに自分自身を保存するように要求して、.dfm ファイルを再作成します。この保存プロセスでは、ディスク上の .dfm ファイルがどのように見えるかは考慮されません。各コンポーネントは、その時点でのプロパティを保存するだけです。

つまり、要約すると、Delphi の動作を変更するためにできることは実際には何もありません。あなたができる最善のことは、影響を最小限に抑えるためにそれを回避することです.

フォームにある場合Scaled=Trueは、すべての開発マシンが同じフォント スケーリングを使用していることを確認する必要があります。そうしないと、開発者 A があるフォント スケーリングで保存すると、その .dfm ファイルは、開発者 B が別のフォント スケーリングで保存したものとは完全に異なります。すべての位置が変更されます。120dpi のフォント スケーリングを使用する開発者がいるようですね。そして、それはあなたに悲しみの終わりを与えるつもりはありません.

フォーム ファイルへの無害な編集によって大きな変更が生じた場合は、それらの変更をコミットします。すべての開発者マシンを同じように構成すると、物事が落ち着くことがわかります。これらの無害な編集によって、.dfm ファイルが変更されることはなくなります。

これは、Delphi を使用したビジュアル デザインの職業上の危険の 1 つにすぎません。コミットするときはいつでも、.dfm ファイルに細心の注意を払う必要があります。私は定期的に、Tortoise コミット ダイアログから .dfm ファイルへの変更を元に戻しています。また、フォーム デザイナーを使用するのではなく、テキスト エディターで .dfm ファイルを変更することもよくあります。

于 2012-10-16T09:18:44.397 に答える
0

フォームが最後に保存されてから Delphi のバージョンを更新した場合は、dfm の変更も表示されます。そのため、古いフォームをチェックアウトしてマイナーな変更を加えると、他の多くの変更が表示されます。これらは新しい Delphi バージョンで導入された新しいプロパティである場合もあれば、値が変更されている場合もあります。これらは、チェックアウトされていないフォームに対してまだ行われていない保留中の変更も示します。Delphi をアップグレードした後、すべてのフォームをチェックアウトし、すぐにチェックインしてすべての変更を記録できます。

ビジュアル デザインでは、「好きなように」フォームを作成し、それらの変更をすべて Delphi に保存させます。多くのプロパティを静かに設定しますが、異なる開発者がフォームで作業するにつれて、これらは変更される可能性があります。設定が重要な場合 (フォームの高さと幅など)、コードで設定します。プロパティの変更は引き続き表示されますが、問題ではないことがわかります。

于 2012-10-16T12:52:04.260 に答える