メインメニュー(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('いない');
みなさん、どうも有難う御座いました。解決しました(感謝です)
ツイート | ![]() |