[delphi-users:4922] FMXのFormの破棄

199 views
Skip to first unread message

Quest

unread,
May 31, 2018, 3:24:18 AM5/31/18
to delphi...@freeml.com
Delphi10.2でFMXのTForm.Releaseが非推奨になったようで
警告が出るようになりました。
非推奨になるのはいいのですが、その代替方法がわかりません。
フォームを破棄すること自体が非推奨とも思えないので
何かReleaseメソッドの代わりの方法があると思うのですが
ご存知の方居られますでしょうか。
よろしくお願いします。



MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
freemlを運営するGMOメディア株式会社では、
2019年新卒採用の募集をしております。
【募集職種】エンジニア職/Webデザイナー職
説明会も開催中!下記よりアクセスしてください。
https://www.gmo.media/recruit/?utm_medium=freeml&utm_source=freeml
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

hosokawa

unread,
May 31, 2018, 4:44:40 AM5/31/18
to delphi...@freeml.com
Quest さん

こんにちは。
細川です。

FMX の話だと思いますが、基本的には Close で大丈夫です。

ご存じの通り VCL の TCustomForm.Release は削除にマークを付けて後で消す機能です。
例えば Form に乗っている TButton.OnClick の中から Release を呼んだ場合、
OnClick を処理している最中に Form が削除されず、抜けた後で削除されます。

FireMonkey の場合、Close を呼ぶと中(ReleaseForm 手続き)でタイミングをずらし
て解放してくれます。
ただし、Close なので、メインフォームで無い場合は OnClose で Action に
TCloseAction.caFree を渡してあげる必要があります(デフォルト値は
TCloseACtion.caHide)。

もしも、それが面倒な場合は自分でやってもいいと思います。

例えばこんな感じです(こっちのほうが面倒ですが)。

procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.ForceQueue(
TThread.Current,
procedure
begin
DisposeOf;
end
);
end;
Regards,
HOSOKAWA Jun
Application Division 3 Manager
embarcadero MVP for Delphi

[S/G] SERIALGAMES Inc.
TEL: 03-5812-4368
FAX: 03-5812-0970

---------------------------------------------------------------
このメールには、本来の宛先の方のみに限定された機密情報が含まれて
いる場合がございます。お心あたりのない場合は、送信者にご連絡のうえ、
このメールを削除してくださいますようお願い申し上げます。
PLEASE READ:This e-mail is confidential and intended for
the named recipient only. If you are not an intended recipient,
please notify the sender and delete this e-mail.
---------------------------------------------------------------


MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
無料ゲームから本格的に楽しめるゲームまで、
インストール不要でスグに遊べます♪
今すぐ遊ぶ ⇒
http://user.gesoten.com/cid/m/378?z=0&g=0

hosokawa

unread,
May 31, 2018, 4:49:03 AM5/31/18
to delphi...@freeml.com
細川です。
補足です。

こんなことも出来ます。

with TfrmVersion.Create(nil) do
try
ShowModal;
finally
DisposeOf;
end;

Quest

unread,
May 31, 2018, 5:32:33 AM5/31/18
to delphi...@freeml.com
細川さん、こんにちは。
いつもお世話になっています。

OnCloseでActionにcaFreeを設定するのには気付きませんでした。
Form1 := TForm.Create(nil);
try
Form1.ShowModal;
finally
Form1.Release;
end;
このVCLでの習慣にとらわれすぎていました。
OnCloseイベントで処理するようにしてみます。

ありがとうございました。
Reply all
Reply to author
Forward
0 new messages