2

私のプロジェクトには2つのフォーム(form1、form2)があり、form1は構成フォームです。

Form1 を表示したいのですが、Button1 をクリックすると、Form2 と free(Release) Form1 が表示されます。どうすればこれを行うことができますか?

私はこのコードを使用します。しかし、このプロジェクトは自動的に開始して終了します。友人は、アプリケーション メッセージ ループが開始されず、メイン フォームが存在しないためにアプリケーションが終了するためと述べました。どうすればこの問題を解決できますか?

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.CreateForm(TForm2, Form2);
  Release;
end;

///

program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Form1:= TForm1.Create(Application);
  Application.Run;
end.
4

3 に答える 3

7

質問のタイトルで尋ねたとおりに実行します。構成フォームを作成して表示してから、メインフォームを作成して表示します。秘訣は、それらをどのように作成するかです。メインフォームにしたい1つのフォームにのみ使用してください。Application.CreateForm他のすべてのフォームには、通常のオブジェクト作成手法を使用します。

次のようにDPRファイルを変更します。

var
  ConfigForm: TConfigForm;
begin
  Application.Initialize;

  ConfigForm := TConfigForm.Create(nil);
  try
    if ConfigForm.ShowModal <> mrOK then
      exit;
  finally
    ConfigForm.Free;
  end;

  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
于 2011-01-07T21:17:52.163 に答える
0

ShowMainFormfalseに設定すると、Form1 の表示を禁止できます。IDE がコードを作成するのと同じように、コードを DPR に残します。

uses
  Forms,
  Unit2 in 'Unit2.pas' {Form2},
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

Form2のFormCreateイベントで、ShowMainFormfalseに設定し、 Showを呼び出して Form2 を表示します。

procedure TForm2.FormCreate(Sender: TObject);
begin
  Application.ShowMainForm := False;
  Show;
end;

Form2のButtonClickイベントで Form1 を表示し、Form2 を閉じます。

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.Show;
  Close;
end;

これにより、必要なすべての変更が unit2 内に保持されます。

その上で一晩寝た後に頭に浮かんだいくつかの発言を編集します。

  1. Form2 は最後に自動作成されたもの、つまり Application.Run ステートメントの直前にある必要があります。
  2. ButtonClick イベントの Form1.Show ステートメントは、FormClose イベントに移動する必要があります。したがって、ユーザーは Windows の閉じるボタンまたは好きな方法でフォームを閉じることができます。
  3. 何らかの理由で Form1 が表示されない場合は、アプリケーションを閉じるコードを追加する必要があります。停止はここで行うことができます。
于 2011-01-08T00:29:11.713 に答える
0

最初に Form2 を作成する必要があり、これがメイン フォームになります。非表示で開始し、Form1 がジョブを完了した後に表示する必要があります。このようなもの:

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
  Release;
end;

///

program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  Form2.Hide;
  Form1 := TForm1.Create(Application);
  Form1.Show;
  Application.Run;
end.

その理由は、メイン フォームを閉じるとアプリが終了するためです。通常、メイン フォームは最初に作成するフォームです。

于 2011-01-07T20:49:54.010 に答える