3

300 を超えるさまざまなフォームで構成される、大規模なレガシー データベース駆動の VCL アプリケーションがあります。本番データベースと一緒にインストールされるソフトウェアとともに、練習用 (ダミー) データベースを提供したいと考えています。

問題は、ユーザーが練習モードを使用している場合、練習モードで作業していることをユーザーが認識できるように、目立つように明確なものを作成する必要があることです。最も理想的な解決策は、すべてのフォームの内側の端に赤い境界線を配置することです。しかし、非常に多くのフォームがあるため、すべてを変更したくありません。

1 つのグローバルな場所から、アプリケーション全体のすべてのフォームの端に沿って (Windows 境界の外側ではなく内側に) そのようなフレームを追加するにはどうすればよいですか?

VCL スタイルは使用できません。それ以外の場合は、そこから実装します。すべてのフォームを反復してこの境界線を描画できる可能性があるグローバルレベルで何かを探しています。ただし、これは、すべてのフォームのサイズ変更メッセージをキャッチして、この境界線を再描画することも意味します。

私が見ることができる最も簡単な方法は、この機能を持つ基本フォームを作成し、この基本フォームからシステム全体のすべてのフォームを継承することです。ただし、これは、すべてのフォームがこれに基づいていることを確認することを意味します。過去に既存のフォームの基本フォームを変更する際に別の問題が発生したことがあります (別の問題)。別の簡単な解決策があれば、その解決策は避けたいと思います。

4

3 に答える 3

0

DFMがテキストとして保存されていると仮定すると、クリスの答えにはバリエーションがあります。

  1. すべてのフォームが継承するフォームを定義します。
  2. すべての PAS ファイルをテキスト エディタにロードし、Class(TForm) を class(TMyBaseForm) に置き換えます。
  3. IIRC では、すべての DFM ファイルも編集する必要があります。「オブジェクト」という文字列を「継承」に変更する必要があります。過去に行ったことに基づいてこれを書いているため、最初にテスト アプリでこれを試してください。この回答が 100% 完了しているかどうかはわかりません。
  4. ボーダー機能 (オン/オフ) を TMyBaseForm に追加します

厳密に言えば、これには「すべてのフォームを通過する」必要がありますが、「選択したファイルを開く」と「開いているすべてのファイルを置き換える」は実際には大したことではありません;-)

唯一の欠点は、DFM をテキストとして保存していない場合、まずそれを変更する必要があることです。

[独自の「ベース フォーム」から継承することは、多くの場合、大規模なプロジェクトに適しています。たとえば、必要な既定のプロパティを持たないサード パーティのコンポーネントに使用します。開発者が既定のプロパティを変更するのを忘れた場合、基本フォームのランタイム コードによって更新されます]。

于 2013-08-31T14:45:41.983 に答える