0

表示時にフォームが閉じられるように DFM (Delphi のフォーム スクリプト形式) を編集することはできますか?

私は Delphi でコードを書いていないので、これらのフォームがどのように機能するかはよくわかりませんが、フォームのOnShowまたはOnCreateイベントにコードを入れることはできるようです (ただし、標準の Delphi コードではないようです)。ただし、CloseExitFormNameExitDestroyなどのステートメントをいくつか試しても機能しません (OnShow プロパティの値が無効であるなどのエラーを示すログが作成されます)。

フォームを閉じる通常の方法はボタンを使用することですが、ボタンにはOnClickイベントはなく、プロパティ " ModalResult = 1 " だけです。

開いたときにウィンドウを閉じる方法はありますか?フォームの OnCreate または OnShow イベントに配置できる標準関数はありますか? それとも、フォーム自体に ModalResult = 1 を与えるチェックボックスを作成するのでしょうか? (これが機能するかどうかはわかりません)

ご提案ありがとうございます。
=)

(注: 明らかかもしれませんが、ソースはありません。)

4

4 に答える 4

2

DFM にはありません。ソースを変更する必要があります。

于 2009-12-15T08:06:44.947 に答える
1

編集:テキストウォールを入力している間に追加されたコメントのいくつかを見ると、物事が少し明確になります。

リソース エディターを使用して DFM を編集し、実際にソース コードに触れずにアプリの動作を変更していると思いますか?

この場合、最善の方法は、Visibleプロパティをに設定することFalseです。ただし、開発者が「フォームをコードで積極的に表示する」場合、これには何のメリットもありません。(彼は、 を呼び出すかShowShowModalまたはVisibleプロパティを明示的に設定することによって、これを行うことができました。)

残念ながら、これが事実である場合、実際のソース コードを変更せずにできることは何もありません。これは、フォームのロード時に DFM が処理されるためです。つまり、フォームを表示する開発者のコ​​ードの前。を呼び出すと電流がクリアされるため、設定する場所を探してもModalResult無駄です。ModalResultShowModal

意味がないので、あなたがやろうとしていることを正確に理解しているとは思いません。
フォームが表示されるとすぐにフォームを自動的に閉じたいようです。それは意味がありません。:S
それで、私があなたのことを正しく理解しているなら、なぜあなたがこれをしたいのか説明してください; 実際の問題に対するより良い解決策があるかもしれません。

ただし、いくつかの一般的な概念...

  • フォームを閉じたい場合は、フォームを閉じるアクションにリンクする必要があります。フォームにボタンを配置するか、メニュー項目を配置します。
  • 標準フォームには、既定でフォームを閉じる標準の Windows メカニズムがあります。(つまり、右上の X です。)
  • フォームを表示するには 2 つの方法があり、表示方法はフォームが閉じられる方法に影響を与えます。モーダルに表示することも (ユーザーと対話するアプリケーションの唯一のフォームであることを意味します)、通常に表示することもできます (ユーザーはアプリケーションの他のフォームを切り替えることができます)。
    • フォームをモーダルに表示するポイントは、ユーザーが必要な処理を完了するまでコードの流れをブロックすることです。多くの場合、ユーザーが何らかの形で回答または確認を提供する必要があります。
    • モーダルに表示する場合、フォームは . で閉じる必要がありModalResultます。
    • 正常に表示されている場合、ModalResultは無効です。
  • フォームが「閉じられている」場合はいつでも、これを行う方法がいくつかあります。
    • フォームは単純に非表示にすることができます。まだそこにありますが、見えません。次にフォームを表示する場合は、再度表示するだけです。
    • フォームは破棄できます。つまり、メモリ内に存在しなくなります。これが完了すると、次にフォームを使用するときにフォームを再作成する必要があります。
    • フォームを閉じようとする試みは積極的に防ぐことができます (通常はお勧めしませんが、特定のケースでは必要になる場合があります - たとえば、フォームの情報が正しくない場合など)。
    • フォームは単純に最小化できます (これは MDI 子フォームでよく行われます)。
  • 注: フォームには、フォームFormStyleの動作、表示、および閉じる方法に影響を与える多くの属性 (最も重要なもの) もあります。(たとえば、MDI 子フォームはデフォルトで最小化するか、閉じたときに何もしません。)
  • : アプリケーションのメイン フォームが適切に閉じられている場合、アプリケーションはシャットダウンします。

さて、いくつかの技術的なこと...

  • 前述のように、フォームはモーダルまたは通常のいずれかで表示できます。またはのいずれMyForm.Show;かを使用してModalResult := MyForm.ShowModal;
    • : フォームがモーダルで表示された場合はModalResult、ユーザーの回答を確認し、それに応じて対処する必要があります。
  • フォームをモーダルに表示した場合は、 を設定する必要がModalResultあり、フォームは自動的に閉じます。これを行う簡単な方法はModalResult、フォームのボタンに を割り当てることです。ボタンをクリックすると、フォームが自動的に設定されModalResultます。
  • フォームを正常に表示した場合はMyForm.Close、適切な時点で呼び出すだけです。注意OnCloseQuery: フォームを「閉じる」方法は他にもありますが、フォームを閉じることができるかどうかを確認するメカニズムであるイベントを処理できるため、この方法を使用することをお勧めします。
  • : フォームを閉じるときに、Delphi が呼び出すことができる 2 つのイベントがあり、フォームを閉じる動作を変更するために処理できます。
    • OnCloseQueryフォームを閉じることができるかどうかを確認するために呼び出されます。
    • OnCloseフォームを閉じる方法を調べるために呼び出されます (前に説明したように)。

質問に戻ります (フォームを自動的に閉じたいようです)。フォームを自動的に閉じるのではなく、気にしないでください。これは非常に簡単です。すべてのフォームにはVisibleプロパティがあります。に設定するとTrue、Delphi はフォームの作成時にフォームを自動的に通常通り表示します。したがって、プロパティが であることを確認するだけですFalse

于 2009-12-15T09:06:40.870 に答える
0

ソースがなければ多くのことはできませんが、ファイルを移動したり、既存のプロパティを変更したりできます。プログラム用の MAP ファイルがあり、既存のイベント (onCreate/OnShow) が存在する場合、実行可能ファイルにパッチを適用してそれらのイベント用に別のコードを呼び出すことができますが、簡単ではなく、そうしないようにする必要があります。以前よりも多くのコードを挿入したり、存在しないルーチンへの外部呼び出しを行ったりしないでください。

于 2009-12-15T23:20:10.847 に答える