メインメニュー(Form1)から呼び出した別のフォーム(aaa)を以下の通り呼び出しています。
procedure TForm1.Button1Click(Sender: TObject);
begin
  Faaa :=TFaaa.Create(application);
  Faaa.Visible :=True;
end;
ここでフォームaaaが稼動中かの判定をしたい場合、aaaが未稼働だとエラーになってしまいます。
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Faaa.Visible =True then
  begin  
    Showmessage('稼動中');
  end;
end;
どうしたらよいか教えて下さい。
稼働というか生成されているか確認する方法はだめかな?
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Faaa <> nil then
  begin  
    Showmessage('稼動中');
  end;
end;
こんばんは。
やってることはtakeさんと同じです。
詳細にはこんな感じで同じようなことをやっています。
これがベストかどうかはわからないけど、参考になれば…
1.プロジェクト→ソース表示にて、
  Application.CreateForm(TForm2, Form2);  を消す
2.Unit1
  procedure TForm1.Button1Click(Sender: TObject);
  begin
    if Assigned(Form2) then Form2.Close;
    Form2 := TForm2.Create(Application);
    Form2.Show;
  end;
  
  procedure TForm1.Button2Click(Sender: TObject);
  begin
    if Form2 <> nil then
    begin
      Showmessage('稼動中');
    end;
  end;
3.Unit2
  procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
  begin
    Action := caFree;
    Form2  := nil;
  end;
こんな感じかな。
function IsFormExists(AForm: TForm): Boolean;
var
  i: Integer;
begin
  Result := False;
  if (AForm <> nil) then 
  begin
    for i := 0 to Screen.FormCount-1 do 
    begin
      if (Screen.Forms[i] = AForm) then 
      begin
        Result := True;
        Exit;
      end;
    end;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  if (IsFormExists(Faaa) and Faaa.Visible) then
  begin  
    Showmessage('稼動中');
  end;
end;
先日KHE00221さんが使われていたこれで良いのでは?
  if Assigned(Faaa) then ShowMessage('いるよ') else
    ShowMessage('いない');
みなさん、どうも有難う御座いました。解決しました(感謝です)
| ツイート | 
        
         |